Search in sources :

Example 1 with PropertyName

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;
}
Also used : PropertyName(com.github.anba.es6draft.ast.PropertyName) ComputedPropertyName(com.github.anba.es6draft.ast.ComputedPropertyName) Expression(com.github.anba.es6draft.ast.Expression) ComputedPropertyName(com.github.anba.es6draft.ast.ComputedPropertyName)

Aggregations

ComputedPropertyName (com.github.anba.es6draft.ast.ComputedPropertyName)1 Expression (com.github.anba.es6draft.ast.Expression)1 PropertyName (com.github.anba.es6draft.ast.PropertyName)1