Browse Source

Fixing completion of eval code

Sebastien Ros 12 years ago
parent
commit
36f6517d9d

+ 1 - 1
Jint/Native/Error/ErrorInstance.cs

@@ -29,7 +29,7 @@ namespace Jint.Native.Error
             string name;
             string name;
             string msg;
             string msg;
 
 
-            if (Name == Undefined.Instance)
+            if (Name == null || Name == "" || Name == Undefined.Instance)
             {
             {
                 name = "Error";
                 name = "Error";
             }
             }

+ 1 - 1
Jint/Native/Function/EvalFunctionInstance.cs

@@ -21,7 +21,7 @@ namespace Jint.Native.Function
 
 
             var parser = new JavascriptParser();
             var parser = new JavascriptParser();
             var program = parser.Parse(code);
             var program = parser.Parse(code);
-            return _engine.ExecuteStatement(program);
+            return _engine.ExecuteStatement(program).Value;
         }
         }
     }
     }
 }
 }

+ 6 - 3
Jint/Runtime/StatementInterpreter.cs

@@ -369,7 +369,8 @@ namespace Jint.Runtime
         public Completion ExecuteStatementList(IEnumerable<Statement> statementList)
         public Completion ExecuteStatementList(IEnumerable<Statement> statementList)
         {
         {
             var c = new Completion(Completion.Normal, null, null);
             var c = new Completion(Completion.Normal, null, null);
-            
+            Completion sl = c;
+
             try
             try
             {
             {
                 foreach (var statement in statementList)
                 foreach (var statement in statementList)
@@ -377,8 +378,10 @@ namespace Jint.Runtime
                     c = ExecuteStatement(statement);
                     c = ExecuteStatement(statement);
                     if (c.Type != Completion.Normal)
                     if (c.Type != Completion.Normal)
                     {
                     {
-                        return c;
+                        return new Completion(c.Type, c.Value ?? sl.Value, c.Identifier);
                     }
                     }
+
+                    sl = c;
                 }
                 }
             }
             }
             catch(JavaScriptException v)
             catch(JavaScriptException v)
@@ -386,7 +389,7 @@ namespace Jint.Runtime
                 return new Completion(Completion.Throw, v.Error, null);
                 return new Completion(Completion.Throw, v.Error, null);
             }
             }
 
 
-            return c;
+            return new Completion(c.Type, c.Value ?? sl.Value, c.Identifier);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 16 - 1
Jint/Runtime/TypeConverter.cs

@@ -117,7 +117,12 @@ namespace Jint.Runtime
 
 
             if (o is uint)
             if (o is uint)
             {
             {
-                return (uint) o;
+                return (uint)o;
+            }
+
+            if (o is DateTime)
+            {
+                return ((DateTime)o).Ticks;
             }
             }
 
 
             if (o == Undefined.Instance)
             if (o == Undefined.Instance)
@@ -295,6 +300,11 @@ namespace Jint.Runtime
                 return ToString((double)(uint)o);
                 return ToString((double)(uint)o);
             }
             }
 
 
+            if (o is DateTime)
+            {
+                return o.ToString();
+            }
+
             return ToString(ToPrimitive(o, TypeCode.String));
             return ToString(ToPrimitive(o, TypeCode.String));
         }
         }
 
 
@@ -331,6 +341,11 @@ namespace Jint.Runtime
                 return engine.Number.Construct((uint) value);
                 return engine.Number.Construct((uint) value);
             }
             }
 
 
+            if (value is DateTime)
+            {
+                return engine.Date.Construct((DateTime)value);
+            }
+
             if (value is double)
             if (value is double)
             {
             {
                 return engine.Number.Construct((double) value);
                 return engine.Number.Construct((double) value);