Jelajahi Sumber

Support for hoisting

Sebastien Ros 9 tahun lalu
induk
melakukan
817373698a

+ 1 - 1
Jint/Engine.cs

@@ -315,7 +315,7 @@ namespace Jint
 
             using (new StrictModeScope(Options._IsStrict || program.IsStrict()))
             {
-                DeclarationBindingInstantiation(DeclarationBindingType.GlobalCode, program.Body.OfType<FunctionDeclaration>(), program.Body.OfType<VariableDeclaration>(), null, null);
+                DeclarationBindingInstantiation(DeclarationBindingType.GlobalCode, program.HoistingScope.FunctionDeclarations, program.HoistingScope.VariableDeclarations, null, null);
 
                 var result = _statements.ExecuteProgram(program);
                 if (result.Type == Completion.Throw)

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

@@ -54,7 +54,7 @@ namespace Jint.Native.Function
                                 Engine.EnterExecutionContext(strictVarEnv, strictVarEnv, Engine.ExecutionContext.ThisBinding);
                             }
 
-                            Engine.DeclarationBindingInstantiation(DeclarationBindingType.EvalCode, program.Body.OfType<FunctionDeclaration>(), program.Body.OfType<VariableDeclaration>(), this, arguments);
+                            Engine.DeclarationBindingInstantiation(DeclarationBindingType.EvalCode, program.HoistingScope.FunctionDeclarations, program.HoistingScope.VariableDeclarations, this, arguments);
 
                             var result = _engine.ExecuteStatement(program);
 

+ 1 - 6
Jint/Native/Function/FunctionConstructor.cs

@@ -94,14 +94,9 @@ namespace Jint.Native.Function
                 throw new JavaScriptException(Engine.SyntaxError);
             }
 
-            // todo: check if there is not a way to use the FunctionExpression directly instead of creating a FunctionDeclaration
             var functionObject = new ScriptFunctionInstance(
                 Engine,
-                new FunctionDeclaration(
-                    new Identifier(Guid.NewGuid().ToString("n")),
-                    parameters.Select(x => new Identifier(x)).ToArray(),
-                    function.Body,
-                    false),
+                function,
                 LexicalEnvironment.NewDeclarativeEnvironment(Engine, Engine.ExecutionContext.LexicalEnvironment),
                 function.IsStrict()
                 ) { Extensible = true };

+ 2 - 2
Jint/Native/Function/ScriptFunctionInstance.cs

@@ -85,8 +85,8 @@ namespace Jint.Native.Function
                 {
                     Engine.DeclarationBindingInstantiation(
                         DeclarationBindingType.FunctionCode,
-                        _functionDeclaration.Body.Body.OfType<FunctionDeclaration>(),
-                        _functionDeclaration.Body.Body.OfType<VariableDeclaration>(),
+                        _functionDeclaration.HoistingScope.FunctionDeclarations,
+                        _functionDeclaration.HoistingScope.VariableDeclarations,
                         this,
                         arguments);
 

+ 1 - 1
Jint/project.json

@@ -34,6 +34,6 @@
     }
   },
   "dependencies": {
-    "Esprima": "1.0.0-alpha-002"
+    "Esprima": "1.0.0-alpha-*"
   }
 }