use of com.github.anba.es6draft.runtime.types.builtins.ArrayObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(Script node, Void value) {
ArrayObject body = createList(node.getStatements(), value);
if (hasBuilder(Type.Program)) {
return call(Type.Program, node, body);
}
OrdinaryObject program = createNode(node, Type.Program);
addProperty(program, "body", body);
addProperty(program, "sourceType", "script");
return program;
}
use of com.github.anba.es6draft.runtime.types.builtins.ArrayObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(LetExpression node, Void value) {
ArrayObject head = createList(node.getBindings(), value);
Object body = node.getExpression().accept(this, value);
if (hasBuilder(Type.LetExpression)) {
return call(Type.LetExpression, node, head, body);
}
OrdinaryObject expression = createExpression(node, Type.LetExpression);
addProperty(expression, "head", head);
addProperty(expression, "body", body);
return expression;
}
use of com.github.anba.es6draft.runtime.types.builtins.ArrayObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(TemplateLiteral node, Void value) {
if (!node.isTagged()) {
ArrayList<Object> list = new ArrayList<>();
for (Expression element : node.getElements()) {
if (element instanceof TemplateCharacters) {
list.add(createLiteral((TemplateCharacters) element));
} else {
list.add(element.accept(this, value));
}
}
if (list.size() == 1) {
return list.get(0);
}
ArrayObject elements = createListFromValues(list);
if (hasBuilder(Type.TemplateLiteral)) {
return call(Type.TemplateLiteral, node, elements);
}
OrdinaryObject expression = createExpression(node, Type.TemplateLiteral);
addProperty(expression, "elements", elements);
return expression;
} else {
ArrayList<String> rawList = new ArrayList<>(), cookedList = new ArrayList<>();
for (TemplateCharacters chars : TemplateStrings(node)) {
rawList.add(chars.getRawValue());
cookedList.add(chars.getValue());
}
Object callSiteObject;
ArrayObject raw = createListFromValues(rawList);
ArrayObject cooked = createListFromValues(cookedList);
if (hasBuilder(Type.CallSiteObject)) {
callSiteObject = call(Type.CallSiteObject, node, raw, cooked);
} else {
OrdinaryObject callSiteObj = createExpression(node, Type.CallSiteObject);
addProperty(callSiteObj, "raw", raw);
addProperty(callSiteObj, "cooked", cooked);
callSiteObject = callSiteObj;
}
ArrayList<Object> arguments = new ArrayList<>();
arguments.add(callSiteObject);
for (Expression subst : Substitutions(node)) {
arguments.add(subst.accept(this, value));
}
return createListFromValues(arguments);
}
}
use of com.github.anba.es6draft.runtime.types.builtins.ArrayObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(GeneratorDeclaration node, Void value) {
Object id = acceptOrNull(node.getIdentifier(), value);
ArrayObject params = createList(getParameterBindings(node.getParameters()), value);
ArrayObject defaults = createListWithNull(getParameterDefaults(node.getParameters()), value);
Object rest = acceptOrNull(getRestParameter(node.getParameters()), value);
Object body = createFunctionBody(node, value);
boolean generator = true;
boolean expression = false;
if (hasBuilder(Type.FunctionDeclaration)) {
return call(Type.FunctionDeclaration, node, id, params, body, generator, expression);
}
GeneratorStyle style = node instanceof LegacyGeneratorDeclaration ? GeneratorStyle.Legacy : GeneratorStyle.ES6;
OrdinaryObject function = createFunction(node, Type.FunctionDeclaration);
addProperty(function, "id", id);
addProperty(function, "params", params);
addProperty(function, "defaults", defaults);
addProperty(function, "body", body);
addProperty(function, "rest", rest);
addProperty(function, "generator", generator);
addProperty(function, "style", style.name);
addProperty(function, "expression", expression);
return function;
}
use of com.github.anba.es6draft.runtime.types.builtins.ArrayObject in project es6draft by anba.
the class ReflectParser method visit.
@Override
public Object visit(ObjectLiteral node, Void value) {
ArrayObject properties = createList(node.getProperties(), value);
if (hasBuilder(Type.ObjectExpression)) {
return call(Type.ObjectExpression, node, properties);
}
OrdinaryObject expression = createExpression(node, Type.ObjectExpression);
addProperty(expression, "properties", properties);
return expression;
}
Aggregations