use of com.github.anba.es6draft.ast.PropertyName in project es6draft by anba.
the class PropertyGenerator method visit.
/**
* 12.2.5.8 Runtime Semantics: PropertyDefinitionEvaluation
* <p>
* PropertyDefinition : PropertyName : AssignmentExpression
*/
@Override
public ValType visit(PropertyValueDefinition node, CodeVisitor mv) {
Expression propertyValue = node.getPropertyValue();
PropertyName propertyName = node.getPropertyName();
String propName = PropName(propertyName);
long propIndex = propName != null ? IndexedMap.toIndex(propName) : -1;
// stack: [<object>] -> []
if (propName == null) {
assert propertyName instanceof ComputedPropertyName;
ValType type = propertyName.accept(this, mv);
expressionBoxed(propertyValue, mv);
if (IsAnonymousFunctionDefinition(propertyValue)) {
SetFunctionName(propertyValue, type, mv);
}
mv.loadExecutionContext();
mv.lineInfo(node);
mv.invoke(Methods.ScriptRuntime_defineProperty);
} else if ("__proto__".equals(propName) && codegen.isEnabled(CompatibilityOption.ProtoInitializer)) {
expressionBoxed(propertyValue, mv);
mv.loadExecutionContext();
mv.lineInfo(node);
mv.invoke(Methods.ScriptRuntime_defineProtoProperty);
} else if (IndexedMap.isIndex(propIndex)) {
mv.lconst(propIndex);
expressionBoxed(propertyValue, mv);
if (IsAnonymousFunctionDefinition(propertyValue)) {
SetFunctionName(propertyValue, propName, mv);
}
mv.loadExecutionContext();
mv.lineInfo(node);
mv.invoke(Methods.ScriptRuntime_defineProperty_long);
} else {
mv.aconst(propName);
expressionBoxed(propertyValue, mv);
if (IsAnonymousFunctionDefinition(propertyValue)) {
SetFunctionName(propertyValue, propName, mv);
}
mv.loadExecutionContext();
mv.lineInfo(node);
mv.invoke(Methods.ScriptRuntime_defineProperty_String);
}
return null;
}
Aggregations