コード例 #1
0
ファイル: ExpressionIntepreter.cs プロジェクト: skipme/jint
        public JsValue EvaluateFunctionExpression(FunctionExpression functionExpression)
        {
            var funcEnv = LexicalEnvironment.NewDeclarativeEnvironment(_engine, _engine.ExecutionContext.LexicalEnvironment);
            var envRec = (DeclarativeEnvironmentRecord)funcEnv.Record;

            if (functionExpression.Id != null && !String.IsNullOrEmpty(functionExpression.Id.Name))
            {
                envRec.CreateMutableBinding(functionExpression.Id.Name);
            }

            var closure = new ScriptFunctionInstance(
                _engine,
                functionExpression,
                funcEnv,
                functionExpression.Strict
                );

            if (functionExpression.Id != null && !String.IsNullOrEmpty(functionExpression.Id.Name))
            {
                envRec.InitializeImmutableBinding(functionExpression.Id.Name, closure);
            }

            return closure;
        }
コード例 #2
0
 private void EmitFunctionExpression(FunctionExpression e)
 {
     if (null == e.Body)
     {
         Emit(e.Expression);
     }
     else
     {
         TranslateFunctionHeader(null, e.Parameters);
         Emit(e.Body);
     }
 }