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; }
private void EmitFunctionExpression(FunctionExpression e) { if (null == e.Body) { Emit(e.Expression); } else { TranslateFunctionHeader(null, e.Parameters); Emit(e.Body); } }