use of com.github.anba.es6draft.compiler.assembler.MethodName in project es6draft by anba.
the class PropertyGenerator method visit.
/**
* 14.3.9 Runtime Semantics: PropertyDefinitionEvaluation<br>
* 14.4.13 Runtime Semantics: PropertyDefinitionEvaluation
*/
@Override
public ValType visit(MethodDefinition node, CodeVisitor mv) {
MethodName method = codegen.compile(node);
boolean hasDecorators = !node.getDecorators().isEmpty();
if (hasDecorators) {
evaluateDecorators(decorators, node.getDecorators(), mv);
}
// stack: [<object>] -> []
String propName = PropName(node);
if (propName == null) {
assert node.getPropertyName() instanceof ComputedPropertyName;
ValType propKey = node.getPropertyName().accept(this, mv);
if (hasDecorators) {
addDecoratorKey(decorators, propKey, mv);
}
mv.iconst(node.getAllocation() == MethodDefinition.MethodAllocation.Object);
mv.invoke(method);
mv.loadExecutionContext();
mv.lineInfo(node);
switch(node.getType()) {
case AsyncFunction:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionAsync);
break;
case AsyncGenerator:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionAsyncGenerator);
break;
case Function:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinition);
break;
case ConstructorGenerator:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionConstructorGenerator);
break;
case Generator:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionGenerator);
break;
case Getter:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionGetter);
break;
case Setter:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionSetter);
break;
case BaseConstructor:
case DerivedConstructor:
case CallConstructor:
default:
throw new AssertionError("invalid method type");
}
} else {
if (hasDecorators) {
addDecoratorKey(decorators, propName, mv);
}
mv.aconst(propName);
mv.iconst(node.getAllocation() == MethodDefinition.MethodAllocation.Object);
mv.invoke(method);
mv.loadExecutionContext();
mv.lineInfo(node);
switch(node.getType()) {
case AsyncFunction:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionAsync_String);
break;
case AsyncGenerator:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionAsyncGenerator_String);
break;
case Function:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinition_String);
break;
case ConstructorGenerator:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionConstructorGenerator_String);
break;
case Generator:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionGenerator_String);
break;
case Getter:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionGetter_String);
break;
case Setter:
mv.invoke(Methods.ScriptRuntime_EvaluatePropertyDefinitionSetter_String);
break;
case BaseConstructor:
case DerivedConstructor:
case CallConstructor:
default:
throw new AssertionError("invalid method type");
}
}
return null;
}
use of com.github.anba.es6draft.compiler.assembler.MethodName in project es6draft by anba.
the class BlockDeclarationInstantiationGenerator method generate.
/**
* stack: [env] {@literal ->} [env]
*
* @param node
* the block statement
* @param mv
* the code visitor
*/
void generate(BlockStatement node, CodeVisitor mv) {
int declarations = LexicallyDeclaredNames(node).size();
if (declarations > INLINE_LIMIT) {
MethodName method = codegen.compile(node, this);
// stack: [env] -> [env]
mv.dup();
mv.loadExecutionContext();
mv.invoke(method);
} else {
generateInline(LexicallyScopedDeclarations(node), mv);
}
}
use of com.github.anba.es6draft.compiler.assembler.MethodName in project es6draft by anba.
the class DeclarationBindingInstantiationGenerator method InstantiateAsyncFunctionObject.
/**
* Emit function call for:
* {@link ScriptRuntime#InstantiateAsyncFunctionObject(LexicalEnvironment, ExecutionContext, RuntimeInfo.Function)}
* <p>
* stack: [] {@literal ->} [fo]
*
* @param context
* the variable which holds the execution context
* @param env
* the variable which holds the lexical environment
* @param f
* the function declaration to instantiate
* @param mv
* the instruction visitor
*/
private void InstantiateAsyncFunctionObject(Variable<ExecutionContext> context, Variable<? extends LexicalEnvironment<?>> env, AsyncFunctionDeclaration f, InstructionVisitor mv) {
MethodName method = codegen.compile(f);
mv.load(env);
mv.load(context);
mv.invoke(method);
mv.invoke(Methods.ScriptRuntime_InstantiateAsyncFunctionObject);
}
use of com.github.anba.es6draft.compiler.assembler.MethodName in project es6draft by anba.
the class DeclarationBindingInstantiationGenerator method InstantiateLegacyFunctionObject.
/**
* Emit function call for:
* {@link ScriptRuntime#InstantiateLegacyFunctionObject(LexicalEnvironment, ExecutionContext, RuntimeInfo.Function)}
* <p>
* stack: [] {@literal ->} [fo]
*
* @param context
* the variable which holds the execution context
* @param env
* the variable which holds the lexical environment
* @param f
* the function declaration to instantiate
* @param mv
* the instruction visitor
*/
private void InstantiateLegacyFunctionObject(Variable<ExecutionContext> context, Variable<? extends LexicalEnvironment<?>> env, FunctionDeclaration f, InstructionVisitor mv) {
MethodName method = codegen.compile(f);
mv.load(env);
mv.load(context);
mv.invoke(method);
mv.invoke(Methods.ScriptRuntime_InstantiateLegacyFunctionObject);
}
use of com.github.anba.es6draft.compiler.assembler.MethodName in project es6draft by anba.
the class DeclarationBindingInstantiationGenerator method InstantiateAsyncGeneratorObject.
/**
* Emit function call for:
* {@link ScriptRuntime#InstantiateAsyncGeneratorObject(LexicalEnvironment, ExecutionContext, RuntimeInfo.Function)}
* <p>
* stack: [] {@literal ->} [fo]
*
* @param context
* the variable which holds the execution context
* @param env
* the variable which holds the lexical environment
* @param f
* the function declaration to instantiate
* @param mv
* the instruction visitor
*/
private void InstantiateAsyncGeneratorObject(Variable<ExecutionContext> context, Variable<? extends LexicalEnvironment<?>> env, AsyncGeneratorDeclaration f, InstructionVisitor mv) {
MethodName method = codegen.compile(f);
mv.load(env);
mv.load(context);
mv.invoke(method);
mv.invoke(Methods.ScriptRuntime_InstantiateAsyncGeneratorObject);
}
Aggregations