dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] CVS: pnetlib/JScript/Builtins BuiltinFunction.cs,


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnetlib/JScript/Builtins BuiltinFunction.cs,1.2,1.3
Date: Thu, 06 Mar 2003 20:44:31 -0500

Update of /cvsroot/dotgnu-pnet/pnetlib/JScript/Builtins
In directory subversions:/tmp/cvs-serv17212/JScript/Builtins

Modified Files:
        BuiltinFunction.cs 
Log Message:


Handle builtin functions that have odd numbers of parameters.


Index: BuiltinFunction.cs
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/JScript/Builtins/BuiltinFunction.cs,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** BuiltinFunction.cs  7 Mar 2003 01:08:35 -0000       1.2
--- BuiltinFunction.cs  7 Mar 2003 01:44:23 -0000       1.3
***************
*** 75,79 ****
                                                         
JSFunctionAttributeEnum.HasVarArgs |
                                                         
JSFunctionAttributeEnum.HasEngine)) ==
!                                               (JSFunctionAttributeEnum)0)
                                {
                                        return method.Invoke(null, args);
--- 75,80 ----
                                                         
JSFunctionAttributeEnum.HasVarArgs |
                                                         
JSFunctionAttributeEnum.HasEngine)) ==
!                                               (JSFunctionAttributeEnum)0 &&
!                                  requiredParameters == args.Length)
                                {
                                        return method.Invoke(null, args);
***************
*** 83,101 ****
                                        Object[] tempArgs = new Object 
[requiredParameters];
                                        int posn = 0;
                                        if((flags & 
JSFunctionAttributeEnum.HasThisObject) != 0)
                                        {
                                                tempArgs[posn++] = thisob;
                                        }
                                        if((flags & 
JSFunctionAttributeEnum.HasEngine) != 0)
                                        {
                                                tempArgs[posn++] = engine;
                                        }
                                        if((flags & 
JSFunctionAttributeEnum.HasVarArgs) != 0)
                                        {
!                                               tempArgs[posn] = args;
                                        }
!                                       else
                                        {
                                                Array.Copy(args, 0, tempArgs, 
posn, args.Length);
                                        }
                                        return method.Invoke(null, tempArgs);
--- 84,130 ----
                                        Object[] tempArgs = new Object 
[requiredParameters];
                                        int posn = 0;
+                                       int req = requiredParameters;
+                                       Object[] rest;
                                        if((flags & 
JSFunctionAttributeEnum.HasThisObject) != 0)
                                        {
                                                tempArgs[posn++] = thisob;
+                                               --req;
                                        }
                                        if((flags & 
JSFunctionAttributeEnum.HasEngine) != 0)
                                        {
                                                tempArgs[posn++] = engine;
+                                               --req;
                                        }
                                        if((flags & 
JSFunctionAttributeEnum.HasVarArgs) != 0)
                                        {
!                                               if(req <= 1)
!                                               {
!                                                       tempArgs[posn] = args;
!                                               }
!                                               else
!                                               {
!                                                       --req;
!                                                       if(args.Length <= req)
!                                                       {
!                                                               
Array.Copy(args, 0, tempArgs, posn,
!                                                                               
   args.Length);
!                                                               rest = new 
Object [0];
!                                                       }
!                                                       else
!                                                       {
!                                                               
Array.Copy(args, 0, tempArgs, posn, req);
!                                                               rest = new 
Object [args.Length - req];
!                                                               
Array.Copy(args, req, rest, 0, rest.Length);
!                                                       }
!                                                       
tempArgs[tempArgs.Length - 1] = rest;
!                                               }
                                        }
!                                       else if(args.Length <= req)
                                        {
                                                Array.Copy(args, 0, tempArgs, 
posn, args.Length);
+                                       }
+                                       else
+                                       {
+                                               Array.Copy(args, 0, tempArgs, 
posn, req);
                                        }
                                        return method.Invoke(null, tempArgs);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]