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/Nodes JExpr.tc,1.3,1.4 JNode


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnetlib/JScript/Nodes JExpr.tc,1.3,1.4 JNode.tc,1.1,1.2
Date: Fri, 17 Jan 2003 01:34:50 -0500

Update of /cvsroot/dotgnu-pnet/pnetlib/JScript/Nodes
In directory subversions:/tmp/cvs-serv29381/JScript/Nodes

Modified Files:
        JExpr.tc JNode.tc 
Log Message:


Implement evaluation logic for JScript expressions.


Index: JExpr.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/JScript/Nodes/JExpr.tc,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** JExpr.tc    14 Jan 2003 12:37:36 -0000      1.3
--- JExpr.tc    17 Jan 2003 06:34:47 -0000      1.4
***************
*** 81,86 ****
  Eval(JSuper)
  {
!       // TODO
!       return null;
  }
  
--- 81,94 ----
  Eval(JSuper)
  {
!       IActivationObject act =
!               (engine.ScriptObjectStackTop() as IActivationObject);
!       if(act != null)
!       {
!               return act.GetDefaultThisObject();
!       }
!       else
!       {
!               return DBNull.Value;
!       }
  }
  
***************
*** 88,93 ****
  Eval(JIdentifier)
  {
!       // TODO
!       return null;
  }
  
--- 96,149 ----
  Eval(JIdentifier)
  {
!       IVariableAccess scope = (engine.ScriptObjectStackTop() as 
IVariableAccess);
!       while(scope != null)
!       {
!               if(scope.HasVariable(name))
!               {
!                       return scope.GetVariable(name);
!               }
!               scope = scope.GetParentScope();
!       }
!       return ((IVariableAccess)(engine.GetMainScope())).GetVariable(name);
! }
! 
! // Prepare for a store into an identifier.
! Prepare(JIdentifier)
! {
!       IVariableAccess scope = (engine.ScriptObjectStackTop() as 
IVariableAccess);
!       while(scope != null)
!       {
!               if(scope.HasVariable(name))
!               {
!                       data1 = scope;
!                       return;
!               }
!               scope = scope.GetParentScope();
!       }
!       data1 =  engine.GetMainScope();
! }
! 
! // Get and prepare for a store into an identifier.
! GetAndPrepare(JIdentifier)
! {
!       IVariableAccess scope = (engine.ScriptObjectStackTop() as 
IVariableAccess);
!       while(scope != null)
!       {
!               if(scope.HasVariable(name))
!               {
!                       data1 = scope;
!                       return scope.GetVariable(name);
!               }
!               scope = scope.GetParentScope();
!       }
!       scope = (IVariableAccess)(engine.GetMainScope());
!       data1 = scope;
!       return scope.GetVariable(name);
! }
! 
! // Store into an identifier in the current execution context.
! Store(JIdentifier)
! {
!       ((IVariableAccess)data1).SetVariable(name, value);
  }
  
***************
*** 127,131 ****
        value1 = expr1.GetAndPrepare(engine, ref data1, ref data2);
        value2 = expr2.Eval(engine);
!       // TODO: compute "value1 op value2".
        expr1.Store(engine, data1, data2, value1);
        return value1;
--- 183,266 ----
        value1 = expr1.GetAndPrepare(engine, ref data1, ref data2);
        value2 = expr2.Eval(engine);
!       value1 = Convert.ToPrimitive(value1, DefaultValueHint.None);
!       value2 = Convert.ToPrimitive(value2, DefaultValueHint.None);
!       switch(oper)
!       {
!               case JSToken.Plus:
!               {
!                       if(value1 is String || value2 is String)
!                       {
!                               value1 = ((String)value1) + ((String)value2);
!                       }
!                       else
!                       {
!                               value1 = Convert.ToNumber(value1) + 
Convert.ToNumber(value2);
!                       }
!               }
!               break;
! 
!               case JSToken.Minus:
!               {
!                       value1 = Convert.ToNumber(value1) - 
Convert.ToNumber(value2);
!               }
!               break;
! 
!               case JSToken.Multiply:
!               {
!                       value1 = Convert.ToNumber(value1) * 
Convert.ToNumber(value2);
!               }
!               break;
! 
!               case JSToken.Divide:
!               {
!                       value1 = Convert.ToNumber(value1) / 
Convert.ToNumber(value2);
!               }
!               break;
! 
!               case JSToken.Modulo:
!               {
!                       value1 = Convert.ToNumber(value1) % 
Convert.ToNumber(value2);
!               }
!               break;
! 
!               case JSToken.BitwiseOr:
!               {
!                       value1 = Convert.ToInt32(value1) | 
Convert.ToInt32(value2);
!               }
!               break;
! 
!               case JSToken.BitwiseXor:
!               {
!                       value1 = Convert.ToInt32(value1) ^ 
Convert.ToInt32(value2);
!               }
!               break;
! 
!               case JSToken.BitwiseAnd:
!               {
!                       value1 = Convert.ToInt32(value1) & 
Convert.ToInt32(value2);
!               }
!               break;
! 
!               case JSToken.LeftShift:
!               {
!                       value1 = Convert.ToInt32(value1) <<
!                                (int)(Convert.ToUInt32(value2) & 0x1F);
!               }
!               break;
! 
!               case JSToken.RightShift:
!               {
!                       value1 = Convert.ToInt32(value1) >>
!                                (int)(Convert.ToUInt32(value2) & 0x1F);
!               }
!               break;
! 
!               case JSToken.UnsignedRightShift:
!               {
!                       value1 = Convert.ToUInt32(value1) >>
!                                (int)(Convert.ToUInt32(value2) & 0x1F);
!               }
!               break;
!       }
        expr1.Store(engine, data1, data2, value1);
        return value1;
***************
*** 177,182 ****
  Eval(JBitwiseOr)
  {
!       // TODO
!       return null;
  }
  
--- 312,317 ----
  Eval(JBitwiseOr)
  {
!       return Convert.ToInt32(expr1.Eval(engine)) |
!                  Convert.ToInt32(expr2.Eval(engine));
  }
  
***************
*** 184,189 ****
  Eval(JBitwiseXor)
  {
!       // TODO
!       return null;
  }
  
--- 319,324 ----
  Eval(JBitwiseXor)
  {
!       return Convert.ToInt32(expr1.Eval(engine)) ^
!                  Convert.ToInt32(expr2.Eval(engine));
  }
  
***************
*** 191,196 ****
  Eval(JBitwiseAnd)
  {
!       // TODO
!       return null;
  }
  
--- 326,331 ----
  Eval(JBitwiseAnd)
  {
!       return Convert.ToInt32(expr1.Eval(engine)) &
!                  Convert.ToInt32(expr2.Eval(engine));
  }
  
***************
*** 198,203 ****
  Eval(JEq)
  {
!       // TODO
!       return null;
  }
  
--- 333,337 ----
  Eval(JEq)
  {
!       return Equality.JScriptEquals(expr1.Eval(engine), expr2.Eval(engine));
  }
  
***************
*** 205,210 ****
  Eval(JNe)
  {
!       // TODO
!       return null;
  }
  
--- 339,343 ----
  Eval(JNe)
  {
!       return !Equality.JScriptEquals(expr1.Eval(engine), expr2.Eval(engine));
  }
  
***************
*** 212,217 ****
  Eval(JStrictEq)
  {
!       // TODO
!       return null;
  }
  
--- 345,350 ----
  Eval(JStrictEq)
  {
!       return StrictEquality.JScriptStrictEquals
!               (expr1.Eval(engine), expr2.Eval(engine));
  }
  
***************
*** 219,224 ****
  Eval(JStrictNe)
  {
!       // TODO
!       return null;
  }
  
--- 352,357 ----
  Eval(JStrictNe)
  {
!       return !StrictEquality.JScriptStrictEquals
!               (expr1.Eval(engine), expr2.Eval(engine));
  }
  
***************
*** 226,231 ****
  Eval(JLt)
  {
!       // TODO
!       return null;
  }
  
--- 359,374 ----
  Eval(JLt)
  {
!       Object value1 = Convert.ToPrimitive(expr1.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       Object value2 = Convert.ToPrimitive(expr2.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       if(value1 is String && value2 is String)
!       {
!               return (String.CompareOrdinal((String)value1, (String)value2) < 
0);
!       }
!       else
!       {
!               return (Convert.ToNumber(value1) < Convert.ToNumber(value2));
!       }
  }
  
***************
*** 233,238 ****
  Eval(JLe)
  {
!       // TODO
!       return null;
  }
  
--- 376,391 ----
  Eval(JLe)
  {
!       Object value1 = Convert.ToPrimitive(expr1.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       Object value2 = Convert.ToPrimitive(expr2.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       if(value1 is String && value2 is String)
!       {
!               return (String.CompareOrdinal((String)value1, (String)value2) 
<= 0);
!       }
!       else
!       {
!               return (Convert.ToNumber(value1) <= Convert.ToNumber(value2));
!       }
  }
  
***************
*** 240,245 ****
  Eval(JGt)
  {
!       // TODO
!       return null;
  }
  
--- 393,408 ----
  Eval(JGt)
  {
!       Object value1 = Convert.ToPrimitive(expr1.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       Object value2 = Convert.ToPrimitive(expr2.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       if(value1 is String && value2 is String)
!       {
!               return (String.CompareOrdinal((String)value1, (String)value2) > 
0);
!       }
!       else
!       {
!               return (Convert.ToNumber(value1) > Convert.ToNumber(value2));
!       }
  }
  
***************
*** 247,252 ****
  Eval(JGe)
  {
!       // TODO
!       return null;
  }
  
--- 410,425 ----
  Eval(JGe)
  {
!       Object value1 = Convert.ToPrimitive(expr1.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       Object value2 = Convert.ToPrimitive(expr2.Eval(engine),
!                                                                               
DefaultValueHint.Number);
!       if(value1 is String && value2 is String)
!       {
!               return (String.CompareOrdinal((String)value1, (String)value2) 
>= 0);
!       }
!       else
!       {
!               return (Convert.ToNumber(value1) >= Convert.ToNumber(value2));
!       }
  }
  
***************
*** 254,259 ****
  Eval(JInstanceof)
  {
!       // TODO
!       return null;
  }
  
--- 427,437 ----
  Eval(JInstanceof)
  {
!       Object value1 = expr1.Eval(engine);
!       Object value2 = expr2.Eval(engine);
!       if(!(value2 is ScriptFunction))
!       {
!               throw new JScriptException(JSError.FunctionExpected);
!       }
!       return ((ScriptFunction)value2).HasInstance(value1);
  }
  
***************
*** 261,266 ****
  Eval(JIn)
  {
!       // TODO
!       return null;
  }
  
--- 439,443 ----
  Eval(JIn)
  {
!       return In.JScriptIn(expr1.Eval(engine), expr2.Eval(engine));
  }
  
***************
*** 268,273 ****
  Eval(JShl)
  {
!       // TODO
!       return null;
  }
  
--- 445,450 ----
  Eval(JShl)
  {
!       return Convert.ToInt32(expr1.Eval(engine)) <<
!                  (int)(Convert.ToUInt32(expr2.Eval(engine)) & 0x1F);
  }
  
***************
*** 275,280 ****
  Eval(JShr)
  {
!       // TODO
!       return null;
  }
  
--- 452,457 ----
  Eval(JShr)
  {
!       return Convert.ToInt32(expr1.Eval(engine)) >>
!                  (int)(Convert.ToUInt32(expr2.Eval(engine)) & 0x1F);
  }
  
***************
*** 282,287 ****
  Eval(JUShr)
  {
!       // TODO
!       return null;
  }
  
--- 459,464 ----
  Eval(JUShr)
  {
!       return Convert.ToUInt32(expr1.Eval(engine)) >>
!                  (int)(Convert.ToUInt32(expr2.Eval(engine)) & 0x1F);
  }
  
***************
*** 289,294 ****
  Eval(JAdd)
  {
!       // TODO
!       return null;
  }
  
--- 466,481 ----
  Eval(JAdd)
  {
!       Object value1 = Convert.ToPrimitive(expr1.Eval(engine),
!                                                                               
DefaultValueHint.None);
!       Object value2 = Convert.ToPrimitive(expr2.Eval(engine),
!                                                                               
DefaultValueHint.None);
!       if(value1 is String || value2 is String)
!       {
!               return ((String)value1) + ((String)value2);
!       }
!       else
!       {
!               return Convert.ToNumber(value1) + Convert.ToNumber(value2);
!       }
  }
  
***************
*** 296,301 ****
  Eval(JSub)
  {
!       // TODO
!       return null;
  }
  
--- 483,488 ----
  Eval(JSub)
  {
!       return Convert.ToNumber(expr1.Eval(engine)) -
!                  Convert.ToNumber(expr2.Eval(engine));
  }
  
***************
*** 303,308 ****
  Eval(JMul)
  {
!       // TODO
!       return null;
  }
  
--- 490,495 ----
  Eval(JMul)
  {
!       return Convert.ToNumber(expr1.Eval(engine)) *
!                  Convert.ToNumber(expr2.Eval(engine));
  }
  
***************
*** 310,315 ****
  Eval(JDiv)
  {
!       // TODO
!       return null;
  }
  
--- 497,502 ----
  Eval(JDiv)
  {
!       return Convert.ToNumber(expr1.Eval(engine)) /
!                  Convert.ToNumber(expr2.Eval(engine));
  }
  
***************
*** 317,322 ****
  Eval(JRem)
  {
!       // TODO
!       return null;
  }
  
--- 504,509 ----
  Eval(JRem)
  {
!       return Convert.ToNumber(expr1.Eval(engine)) %
!                  Convert.ToNumber(expr2.Eval(engine));
  }
  
***************
*** 324,329 ****
  Eval(JNeg)
  {
!       // TODO
!       return null;
  }
  
--- 511,515 ----
  Eval(JNeg)
  {
!       return -(Convert.ToNumber(expr.Eval(engine)));
  }
  
***************
*** 331,336 ****
  Eval(JUnaryPlus)
  {
!       // TODO
!       return null;
  }
  
--- 517,521 ----
  Eval(JUnaryPlus)
  {
!       return Convert.ToNumber(expr.Eval(engine));
  }
  
***************
*** 338,343 ****
  Eval(JDelete)
  {
!       // TODO
!       return null;
  }
  
--- 523,546 ----
  Eval(JDelete)
  {
!       if(expr is JFieldAccess)
!       {
!               // Must be a "JFieldAccess" to make sense.
!               Object thisob = Convert.ToObject
!                       (((JFieldAccess)expr).Eval(engine), engine);
!               if(thisob is ScriptObject)
!               {
!                       return 
((ScriptObject)thisob).Delete(((JFieldAccess)expr).name);
!               }
!               else
!               {
!                       return true;
!               }
!       }
!       else
!       {
!               // Evaluate expr for its side-effects only.
!               expr.Eval(engine);
!               return true;
!       }
  }
  
***************
*** 359,364 ****
  Eval(JPreInc)
  {
!       // TODO
!       return null;
  }
  
--- 562,571 ----
  Eval(JPreInc)
  {
!       Object data1 = null;
!       Object data2 = null;
!       Object value = expr.GetAndPrepare(engine, ref data1, ref data2);
!       value = Convert.ToNumber(value) + 1.0;
!       expr.Store(engine, data1, data2, value);
!       return value;
  }
  
***************
*** 366,371 ****
  Eval(JPreDec)
  {
!       // TODO
!       return null;
  }
  
--- 573,582 ----
  Eval(JPreDec)
  {
!       Object data1 = null;
!       Object data2 = null;
!       Object value = expr.GetAndPrepare(engine, ref data1, ref data2);
!       value = Convert.ToNumber(value) - 1.0;
!       expr.Store(engine, data1, data2, value);
!       return value;
  }
  
***************
*** 373,378 ****
  Eval(JPostInc)
  {
!       // TODO
!       return null;
  }
  
--- 584,593 ----
  Eval(JPostInc)
  {
!       Object data1 = null;
!       Object data2 = null;
!       Object value = expr.GetAndPrepare(engine, ref data1, ref data2);
!       double value2 = Convert.ToNumber(value);
!       expr.Store(engine, data1, data2, value2 + 1.0);
!       return value2;
  }
  
***************
*** 380,385 ****
  Eval(JPostDec)
  {
!       // TODO
!       return null;
  }
  
--- 595,604 ----
  Eval(JPostDec)
  {
!       Object data1 = null;
!       Object data2 = null;
!       Object value = expr.GetAndPrepare(engine, ref data1, ref data2);
!       double value2 = Convert.ToNumber(value);
!       expr.Store(engine, data1, data2, value2 - 1.0);
!       return value2;
  }
  
***************
*** 387,392 ****
  Eval(JBitwiseNot)
  {
!       // TODO
!       return null;
  }
  
--- 606,610 ----
  Eval(JBitwiseNot)
  {
!       return ~(Convert.ToInt32(expr.Eval(engine)));
  }
  
***************
*** 407,412 ****
  Eval(JNew)
  {
!       // TODO
!       return null;
  }
  
--- 625,643 ----
  Eval(JNew)
  {
!       // Evaluate the constructor.
!       Object constructor;
!       constructor = expr1.Eval(engine);
! 
!       // Evaluate the arguments.
!       Object[] args = Support.EvalArgList(expr2, engine);
! 
!       // Bail out if the constructor object is invalid.
!       if(!(constructor is ScriptFunction))
!       {
!               throw new JScriptException(JSError.FunctionExpected, 
this.context);
!       }
! 
!       // Call the constructor.
!       return ((ScriptFunction)constructor).Construct(args);
  }
  
***************
*** 414,419 ****
  Eval(JArrayAccess)
  {
!       // TODO
!       return null;
  }
  
--- 645,766 ----
  Eval(JArrayAccess)
  {
!       Object thisob = Convert.ToObject(expr1.Eval(engine), engine);
!       Object value = expr2.Eval(engine);
!       if(thisob is ScriptObject)
!       {
!               // Try to handle special cases to make array accesses more 
efficient.
!               if(value is int)
!               {
!                       return ((ScriptObject)thisob)[(int)value];
!               }
!               else if(value is double)
!               {
!                       return ((ScriptObject)thisob)[(double)value];
!               }
!               else if(value is String)
!               {
!                       return ((ScriptObject)thisob)[(String)value];
!               }
!               else
!               {
!                       return ((ScriptObject)thisob)[value];
!               }
!       }
!       else if(thisob is Array)
!       {
!               // Get the element from an underlying CLI array.
!               return ((Array)thisob).GetValue(Convert.ToInt32(value));
!       }
!       else if(thisob is IDictionary)
!       {
!               // Get the element from an underlying CLI dictionary.
!               return ((IDictionary)thisob)[value];
!       }
!       else
!       {
!               return null;
!       }
! }
! 
! // Prepare for an array store operation.
! Prepare(JArrayAccess)
! {
!       data1 = Convert.ToObject(expr1.Eval(engine), engine);
!       data2 = expr2.Eval(engine);
! }
! 
! // Get and prepare for an array store operation.
! GetAndPrepare(JArrayAccess)
! {
!       data1 = Convert.ToObject(expr1.Eval(engine), engine);
!       data2 = expr2.Eval(engine);
!       if(data1 is ScriptObject)
!       {
!               // Try to handle special cases to make array accesses more 
efficient.
!               if(data2 is int)
!               {
!                       return ((ScriptObject)data1)[(int)data2];
!               }
!               else if(data2 is double)
!               {
!                       return ((ScriptObject)data1)[(double)data2];
!               }
!               else if(data2 is String)
!               {
!                       return ((ScriptObject)data1)[(String)data2];
!               }
!               else
!               {
!                       return ((ScriptObject)data1)[data2];
!               }
!       }
!       else if(data1 is Array)
!       {
!               // Get the element from an underlying CLI array.
!               return ((Array)data1).GetValue(Convert.ToInt32(data2));
!       }
!       else if(data1 is IDictionary)
!       {
!               // Get the element from an underlying CLI dictionary.
!               return ((IDictionary)data1)[data2];
!       }
!       else
!       {
!               return null;
!       }
! }
! 
! // Perform an array store operation.
! Store(JArrayAccess)
! {
!       if(data1 is ScriptObject)
!       {
!               if(data2 is int)
!               {
!                       ((ScriptObject)data1)[(int)data2] = value;
!               }
!               else if(data2 is double)
!               {
!                       ((ScriptObject)data1)[(double)data2] = value;
!               }
!               else if(data2 is String)
!               {
!                       ((ScriptObject)data1)[(String)data2] = value;
!               }
!               else
!               {
!                       ((ScriptObject)data1)[data2] = value;
!               }
!       }
!       else if(data1 is Array)
!       {
!               // Store the element into an underlying CLI array.
!               ((Array)data1).SetValue(value, Convert.ToInt32(data2));
!       }
!       else if(data1 is IDictionary)
!       {
!               // Store the element into an underlying CLI dictionary.
!               ((IDictionary)data1)[data2] = value;
!       }
  }
  
***************
*** 421,426 ****
  Eval(JFieldAccess)
  {
!       // TODO
!       return null;
  }
  
--- 768,809 ----
  Eval(JFieldAccess)
  {
!       Object thisob = Convert.ToObject(expr.Eval(engine), engine);
!       if(thisob is ScriptObject)
!       {
!               return ((ScriptObject)thisob)[name];
!       }
!       else
!       {
!               return null;
!       }
! }
! 
! // Prepare to store into a field access.
! Prepare(JFieldAccess)
! {
!       data1 = Convert.ToObject(expr.Eval(engine), engine);
! }
! 
! // Get and prepare to store into a field access.
! GetAndPrepare(JFieldAccess)
! {
!       data1 = Convert.ToObject(expr.Eval(engine), engine);
!       if(data1 is ScriptObject)
!       {
!               return ((ScriptObject)data1)[name];
!       }
!       else
!       {
!               return null;
!       }
! }
! 
! // Store into a field access.
! Store(JFieldAccess)
! {
!       if(data1 is ScriptObject)
!       {
!               ((ScriptObject)data1)[name] = value;
!       }
  }
  
***************
*** 428,433 ****
  Eval(JCall)
  {
!       // TODO
!       return null;
  }
  
--- 811,847 ----
  Eval(JCall)
  {
!       // Evaluate the function and the "this" object.
!       Object thisob;
!       Object func;
!       if(expr1 is JFieldAccess)
!       {
!               thisob = Convert.ToObject
!                       (((JFieldAccess)expr1).expr.Eval(engine), engine);
!               if(thisob is ScriptObject)
!               {
!                       func = 
((ScriptObject)thisob).Get(((JFieldAccess)expr1).name);
!               }
!               else
!               {
!                       func = null;
!               }
!       }
!       else
!       {
!               thisob = null;
!               func = expr1.Eval(engine);
!       }
! 
!       // Evaluate the arguments.
!       Object[] args = Support.EvalArgList(expr2, engine);
! 
!       // Bail out if the function object is invalid.
!       if(!(func is ScriptFunction))
!       {
!               throw new JScriptException(JSError.FunctionExpected, 
this.context);
!       }
! 
!       // Call the function.
!       return ((ScriptFunction)func).Call(thisob, args);
  }
  
***************
*** 435,439 ****
  Eval(JArgList)
  {
!       // TODO
        return null;
  }
--- 849,853 ----
  Eval(JArgList)
  {
!       // Nothing to do here: handled by "Support.EvalArgList" instead.
        return null;
  }

Index: JNode.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnetlib/JScript/Nodes/JNode.tc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** JNode.tc    13 Jan 2003 10:53:20 -0000      1.1
--- JNode.tc    17 Jan 2003 06:34:47 -0000      1.2
***************
*** 22,25 ****
--- 22,26 ----
  using Microsoft.JScript.Vsa;
  using System.Reflection;
+ using System.Collections;
  
  %}
***************
*** 286,290 ****
  Eval(JScriptBlock)
  {
!       // TODO: declare the functions into the global scope.
  
        // Execute the global statements within the block.
--- 287,296 ----
  Eval(JScriptBlock)
  {
!       // Declare the functions into the global scope.  We do this by
!       // evaluating them - JFunction.Eval does the rest.
!       if(functions != null)
!       {
!               functions.Eval(engine);
!       }
  
        // Execute the global statements within the block.
***************
*** 315,320 ****
  Eval(JFunction)
  {
!       // TODO
!       return null;
  }
  
--- 321,337 ----
  Eval(JFunction)
  {
!       // Get the scope to declare the function within.
!       ScriptObject scope = engine.ScriptObjectStackTop();
! 
!       // Create a function object to wrap up this function.
!       FunctionObject obj = new FunctionObject
!               
(EngineInstance.GetEngineInstance(engine).GetFunctionPrototype(),
!                this, scope);
! 
!       // Add the function to the scope.
!       scope.Put(name, obj);
! 
!       // Nothing else to do.
!       return Empty.Value;
  }
  





reply via email to

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