private void print(ObjectProperty node) throws IOException { if (node.isGetterMethod()) { writer.append("get "); } else if (node.isSetterMethod()) { writer.append("set "); } Map<String, NameEmitter> oldNameMap = nameMap; nameMap = Collections.emptyMap(); print(node.getLeft()); nameMap = oldNameMap; if (!node.isMethod()) { writer.ws().append(':').ws(); } print(node.getRight()); }
private void visitPrototypeMembers(ObjectLiteral objLiteral, String clazz) { List<ObjectProperty> properties = objLiteral.getElements(); for (ObjectProperty property : properties) { AstNode propertyKey = property.getLeft(); JavaScriptTreeNode tn = createTreeNode(propertyKey); String memberName = RhinoUtil.getPropertyName(propertyKey); AstNode propertyValue = property.getRight(); visitPrototypeMember(tn, clazz, memberName, propertyValue); } }
void decompileObjectLiteral(ObjectLiteral node) { decompiler.addToken(Token.LC); List<ObjectProperty> props = node.getElements(); int size = props.size(); for (int i = 0; i < size; i++) { ObjectProperty prop = props.get(i); boolean destructuringShorthand = Boolean.TRUE.equals(prop.getProp(Node.DESTRUCTURING_SHORTHAND)); decompile(prop.getLeft()); if (!destructuringShorthand) { decompiler.addToken(Token.COLON); decompile(prop.getRight()); } if (i < size - 1) { decompiler.addToken(Token.COMMA); } } decompiler.addToken(Token.RC); }
properties = new Object[size]; for (ObjectProperty prop : elems) { if (prop.isGetter()) { decompiler.addToken(Token.GET); } else if (prop.isSetter()) { decompiler.addToken(Token.SET); properties[i++] = getPropKey(prop.getLeft()); if (!(prop.isGetter() || prop.isSetter())) { decompiler.addToken(Token.OBJECTLIT); Node right = transform(prop.getRight()); if (prop.isGetter()) { right = createUnary(Token.GET, right); } else if (prop.isSetter()) { right = createUnary(Token.SET, right);
private ObjectProperty getterSetterProperty(int pos, AstNode propName, boolean isGetter) throws IOException { FunctionNode fn = function(FunctionNode.FUNCTION_EXPRESSION); // We've already parsed the function name, so fn should be anonymous. Name name = fn.getFunctionName(); if (name != null && name.length() != 0) { reportError("msg.bad.prop"); } ObjectProperty pn = new ObjectProperty(pos); if (isGetter) { pn.setIsGetter(); } else { pn.setIsSetter(); } int end = getNodeEnd(fn); pn.setLeft(propName); pn.setRight(fn); pn.setLength(end - pos); return pn; }
private ObjectProperty plainProperty(AstNode property, int ptt) throws IOException { // Support, e.g., |var {x, y} = o| as destructuring shorthand // for |var {x: x, y: y} = o|, as implemented in spidermonkey JS 1.8. int tt = peekToken(); if ((tt == Token.COMMA || tt == Token.RC) && ptt == Token.NAME && compilerEnv.getLanguageVersion() >= Context.VERSION_1_8) { if (!inDestructuringAssignment) { reportError("msg.bad.object.init"); } AstNode nn = new Name(property.getPosition(), property.getString()); ObjectProperty pn = new ObjectProperty(); pn.putProp(Node.DESTRUCTURING_SHORTHAND, Boolean.TRUE); pn.setLeftAndRight(property, nn); return pn; } mustMatchToken(Token.COLON, "msg.no.colon.prop"); ObjectProperty pn = new ObjectProperty(); pn.setOperatorPosition(ts.tokenBeg); pn.setLeftAndRight(property, assignExpr()); return pn; }
private ObjectProperty methodDefinition(int pos, AstNode propName, int entryKind) throws IOException { FunctionNode fn = function(FunctionNode.FUNCTION_EXPRESSION); // We've already parsed the function name, so fn should be anonymous. Name name = fn.getFunctionName(); if (name != null && name.length() != 0) { reportError("msg.bad.prop"); } ObjectProperty pn = new ObjectProperty(pos); switch (entryKind) { case GET_ENTRY: pn.setIsGetterMethod(); fn.setFunctionIsGetterMethod(); break; case SET_ENTRY: pn.setIsSetterMethod(); fn.setFunctionIsSetterMethod(); break; case METHOD_ENTRY: pn.setIsNormalMethod(); fn.setFunctionIsNormalMethod(); break; } int end = getNodeEnd(fn); pn.setLeft(propName); pn.setRight(fn); pn.setLength(end - pos); return pn; }
ObjectLiteral obj = (ObjectLiteral) args.get(1); for (ObjectProperty prop : obj.getElements()) { String name = nameOf(prop.getLeft()); switch (name) { current.setExtend(stringLiteral(prop.getRight())); break; current.setOverride(stringLiteral(prop.getRight())); break; current.setPriority(numberLiteral(prop.getRight())); break; current.setRequires(arrayStringLiteral(prop.getRight())); break; String.format("Found 'require' and probably should be 'requires' in: %s#%s", source, prop.getLineno())); break; current.setUses(arrayStringLiteral(prop.getRight())); break; current.getAlternateClassName().addAll(stringLiterals(prop.getRight())); break; current.getAlias().addAll(stringLiterals(prop.getRight())); break;
@Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append(makeIndent(depth)); if (isGetter()) { sb.append("get "); } else if (isSetter()) { sb.append("set "); } sb.append(left.toSource(0)); if (type == Token.COLON) { sb.append(": "); } sb.append(right.toSource(0)); return sb.toString(); } }
@Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append("\n"); sb.append(makeIndent(depth+1)); if (isGetterMethod()) { sb.append("get "); } else if (isSetterMethod()) { sb.append("set "); } sb.append(left.toSource(getType()==Token.COLON ? 0 : depth)); if (type == Token.COLON) { sb.append(": "); } sb.append(right.toSource(getType()==Token.COLON ? 0 : depth+1)); return sb.toString(); } }
private String getParentName(AstNode fn) { for(int i = 5; fn != null && i > 0; i--, fn = fn.getParent()) { if (fn instanceof ObjectProperty) { ObjectProperty prop = (ObjectProperty) fn; AstNode label = prop.getLeft(); if (label instanceof Name) { return (((Name)label).getString()); } } } return null; }
@Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append("\n"); sb.append(makeIndent(depth+1)); if (isGetter()) { sb.append("get "); } else if (isSetter()) { sb.append("set "); } sb.append(left.toSource(getType()==Token.COLON ? 0 : depth)); if (type == Token.COLON) { sb.append(": "); } sb.append(right.toSource(getType()==Token.COLON ? 0 : depth+1)); return sb.toString(); } }
public boolean isMethod() { return isGetterMethod() || isSetterMethod() || isNormalMethod(); }
@Override public CAstNode visitObjectProperty(ObjectProperty node, WalkContext context) { return visit(node.getRight(), context); }
public boolean isSetter() { return node.isSetterMethod(); } }
public boolean isGetter() { return node.isGetterMethod(); }
/** * It is assumed that <code>descriptorObjectLit</code> has been * identified as an object literal containing property descriptors. Any * property descriptors found as properties of that literal are parsed * and tree nodes are created for them. * * @param descriptorObjLit The object literal containing property * descriptors (for example, the object parameter to * <code>Object.create()</code>). * @param clazz The class that the properties belong to. */ private void visitPropertyDescriptors(ObjectLiteral descriptorObjLit, String clazz) { List<ObjectProperty> descriptors = descriptorObjLit.getElements(); for (ObjectProperty prop : descriptors) { AstNode propertyKey = prop.getLeft(); AstNode propertyValue = prop.getRight(); // Should always be true, as this should be a property descriptor if (propertyValue instanceof ObjectLiteral) { JavaScriptTreeNode tn = createTreeNode(propertyKey); String memberName = RhinoUtil.getPropertyName(propertyKey); visitPropertyDescriptor(tn, clazz, memberName, (ObjectLiteral)propertyValue); } } }
void decompileObjectLiteral(ObjectLiteral node) { decompiler.addToken(Token.LC); List<ObjectProperty> props = node.getElements(); int size = props.size(); for (int i = 0; i < size; i++) { ObjectProperty prop = props.get(i); boolean destructuringShorthand = Boolean.TRUE.equals(prop.getProp(Node.DESTRUCTURING_SHORTHAND)); decompile(prop.getLeft()); if (!destructuringShorthand) { decompiler.addToken(Token.COLON); decompile(prop.getRight()); } if (i < size - 1) { decompiler.addToken(Token.COMMA); } } decompiler.addToken(Token.RC); }
properties = new Object[size]; for (ObjectProperty prop : elems) { if (prop.isGetter()) { decompiler.addToken(Token.GET); } else if (prop.isSetter()) { decompiler.addToken(Token.SET); properties[i++] = getPropKey(prop.getLeft()); if (!(prop.isGetter() || prop.isSetter())) { decompiler.addToken(Token.OBJECTLIT); Node right = transform(prop.getRight()); if (prop.isGetter()) { right = createUnary(Token.GET, right); } else if (prop.isSetter()) { right = createUnary(Token.SET, right);
private ObjectProperty getterSetterProperty(int pos, AstNode propName, boolean isGetter) throws IOException { FunctionNode fn = function(FunctionNode.FUNCTION_EXPRESSION); // We've already parsed the function name, so fn should be anonymous. Name name = fn.getFunctionName(); if (name != null && name.length() != 0) { reportError("msg.bad.prop"); } ObjectProperty pn = new ObjectProperty(pos); if (isGetter) { pn.setIsGetter(); } else { pn.setIsSetter(); } int end = getNodeEnd(fn); pn.setLeft(propName); pn.setRight(fn); pn.setLength(end - pos); return pn; }