use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.
the class GeneratorFunctionConstructor method CreateDynamicGenerator.
private static OrdinaryGenerator CreateDynamicGenerator(ExecutionContext callerContext, ExecutionContext cx, Constructor newTarget, Object... args) {
/* step 1 (not applicable) */
/* step 2 (not applicable) */
/* step 3 */
Intrinsics fallbackProto = Intrinsics.Generator;
/* steps 4-10 */
String[] sourceText = functionSourceText(cx, args);
String parameters = sourceText[0], bodyText = sourceText[1];
/* steps 11, 13-20 */
Source source = functionSource(SourceKind.Generator, cx.getRealm(), callerContext);
RuntimeInfo.Function function;
try {
ScriptLoader scriptLoader = cx.getRealm().getScriptLoader();
function = scriptLoader.generator(source, parameters, bodyText).getFunction();
} catch (ParserException | CompilationException e) {
throw e.toScriptException(cx);
}
/* step 12 */
boolean strict = function.isStrict();
/* steps 21-22 */
ScriptObject proto = GetPrototypeFromConstructor(cx, newTarget, fallbackProto);
/* step 23 */
OrdinaryGenerator f = OrdinaryGenerator.FunctionAllocate(cx, proto, strict, FunctionKind.Normal);
/* steps 24-25 */
LexicalEnvironment<GlobalEnvironmentRecord> scope = f.getRealm().getGlobalEnv();
/* step 26 */
FunctionInitialize(f, FunctionKind.Normal, function, scope, newFunctionExecutable(source));
/* step 27 */
OrdinaryObject prototype = ObjectCreate(cx, Intrinsics.GeneratorPrototype);
f.infallibleDefineOwnProperty("prototype", new Property(prototype, true, false, false));
/* step 28 (not applicable) */
/* step 29 */
SetFunctionName(f, "anonymous");
/* step 30 */
return f;
}
use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(TemplateCallExpression node, Void value) {
Object callee = node.getBase().accept(this, value);
Object arguments = node.getTemplate().accept(this, value);
if (hasBuilder(Type.TaggedTemplate)) {
return call(Type.TaggedTemplate, node, callee, arguments);
}
OrdinaryObject expression = createExpression(node, Type.TaggedTemplate);
addProperty(expression, "callee", callee);
addProperty(expression, "arguments", arguments);
return expression;
}
use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(IdentifierName node, Void value) {
String name = node.getName();
if (hasBuilder(Type.Identifier)) {
return call(Type.Identifier, node, name);
}
OrdinaryObject expression = createNode(node, Type.Identifier);
addProperty(expression, "name", name);
return expression;
}
use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(CommaExpression node, Void value) {
ArrayObject expressions = createList(node.getOperands(), value);
if (hasBuilder(Type.SequenceExpression)) {
return call(Type.SequenceExpression, node, expressions);
}
OrdinaryObject expression = createExpression(node, Type.SequenceExpression);
addProperty(expression, "expressions", expressions);
return expression;
}
use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(ContinueStatement node, Void value) {
Object label = createIdentifierOrNull(node.getLabel());
if (hasBuilder(Type.ContinueStatement)) {
return call(Type.ContinueStatement, node, label);
}
OrdinaryObject statement = createStatement(node, Type.ContinueStatement);
addProperty(statement, "label", label);
return statement;
}
Aggregations