12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- using Esprima.Ast;
- using Jint.Native.Function;
- using Jint.Runtime.Environments;
- namespace Jint.Runtime.Interpreter.Expressions
- {
- internal sealed class JintFunctionExpression : JintExpression
- {
- private readonly JintFunctionDefinition _function;
- public JintFunctionExpression(Engine engine, IFunction function)
- : base(ArrowParameterPlaceHolder.Empty)
- {
- _function = new JintFunctionDefinition(engine, function);
- }
- protected override ExpressionResult EvaluateInternal(EvaluationContext context)
- {
- return GetValue(context);
- }
- public override Completion GetValue(EvaluationContext context)
- {
- var engine = context.Engine;
- var funcEnv = JintEnvironment.NewDeclarativeEnvironment(engine, engine.ExecutionContext.LexicalEnvironment);
- var closure = new ScriptFunctionInstance(
- engine,
- _function,
- funcEnv,
- _function.ThisMode);
- closure.MakeConstructor();
- if (_function.Name != null)
- {
- funcEnv.CreateMutableBindingAndInitialize(_function.Name, canBeDeleted: false, closure);
- }
- return Completion.Normal(closure, _expression.Location);
- }
- }
- }
|