blob: c0ab678385ba0495249fae535509fcc5b208ebd9 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
//-------------------------------------
// Removed from JSRoyaleEmitter.java 05-31-2015
//-------------------------------------
/*
@Override
public void emitForEachLoop(IForLoopNode node)
{
IContainerNode xnode = (IContainerNode) node.getChild(1);
IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
.getConditionalsContainerNode().getChild(0);
IASNode childNode = bnode.getChild(0);
write(ASEmitterTokens.TRY);
write(ASEmitterTokens.BLOCK_OPEN);
writeNewline();
write(JSGoogEmitterTokens.GOOG_ARRAY_FOREACH);
write(ASEmitterTokens.PAREN_OPEN);
getWalker().walk(bnode.getChild(1));
writeToken(ASEmitterTokens.COMMA);
writeToken(ASEmitterTokens.FUNCTION);
write(ASEmitterTokens.PAREN_OPEN);
if (childNode instanceof IVariableExpressionNode)
write(((IVariableNode) childNode.getChild(0)).getName());
else
write(((IIdentifierNode) childNode).getName());
writeToken(ASEmitterTokens.PAREN_CLOSE);
if (isImplicit(xnode))
write(ASEmitterTokens.BLOCK_OPEN);
getWalker().walk(node.getStatementContentsNode());
if (isImplicit(xnode))
{
writeNewline();
write(ASEmitterTokens.BLOCK_CLOSE);
}
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline();
write(ASEmitterTokens.BLOCK_CLOSE);
writeNewline();
write(ASEmitterTokens.CATCH);
write(ASEmitterTokens.PAREN_OPEN);
write("foreachbreakerror");
write(ASEmitterTokens.PAREN_CLOSE);
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.BLOCK_OPEN);
write(ASEmitterTokens.BLOCK_CLOSE);
writeNewline();
}
@Override
public void emitIterationFlow(IIterationFlowNode node)
{
// look for break in foreach and throw error instead
if (node.getKind() == IIterationFlowNode.IterationFlowKind.BREAK)
{
IASNode pNode = node.getParent();
while (pNode != null)
{
ASTNodeID id = pNode.getNodeID();
if (id == ASTNodeID.ForEachLoopID)
{
write(ASEmitterTokens.THROW);
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.NEW);
write(ASEmitterTokens.SPACE);
write(JSGoogEmitterTokens.ERROR);
write(ASEmitterTokens.PAREN_OPEN);
write(ASEmitterTokens.PAREN_CLOSE);
write(ASEmitterTokens.SEMICOLON);
return;
}
else if (id == ASTNodeID.ForLoopID ||
id == ASTNodeID.DoWhileLoopID ||
id == ASTNodeID.WhileLoopID)
break;
pNode = pNode.getParent();
}
}
write(node.getKind().toString().toLowerCase());
IIdentifierNode lnode = node.getLabelNode();
if (lnode != null)
{
write(ASEmitterTokens.SPACE);
getWalker().walk(lnode);
}
}
*/
/*
@Override
public void emitInterface(IInterfaceNode node)
{
ICompilerProject project = getWalker().getProject();
getDoc().emitInterfaceDoc(node, project);
String qname = node.getQualifiedName();
if (qname != null && !qname.equals(""))
{
write(formatQualifiedName(qname));
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.EQUAL);
write(ASEmitterTokens.FUNCTION);
write(ASEmitterTokens.PAREN_OPEN);
write(ASEmitterTokens.PAREN_CLOSE);
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.BLOCK_OPEN);
writeNewline();
write(ASEmitterTokens.BLOCK_CLOSE);
write(ASEmitterTokens.SEMICOLON);
}
final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
for (IDefinitionNode mnode : members)
{
boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
|| mnode.getNodeID() == ASTNodeID.SetterID;
writeNewline();
writeNewline();
writeNewline();
getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
write(formatQualifiedName(qname));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSEmitterTokens.PROTOTYPE);
write(ASEmitterTokens.MEMBER_ACCESS);
if (isAccessor)
{
writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
}
write(mnode.getQualifiedName());
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.EQUAL);
write(ASEmitterTokens.FUNCTION);
emitParameters(((IFunctionNode) mnode).getParameterNodes());
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.BLOCK_OPEN);
write(ASEmitterTokens.BLOCK_CLOSE);
write(ASEmitterTokens.SEMICOLON);
}
}
*/
/*
@Override
public void emitMethod(IFunctionNode node)
{
FunctionNode fn = (FunctionNode) node;
fn.parseFunctionBody(getProblems());
ICompilerProject project = getWalker().getProject();
getDoc().emitMethodDoc(node, project);
boolean isConstructor = node.isConstructor();
String qname = getTypeDefinition(node).getQualifiedName();
if (qname != null && !qname.equals(""))
{
write(formatQualifiedName(qname));
if (!isConstructor)
{
write(ASEmitterTokens.MEMBER_ACCESS);
if (!fn.hasModifier(ASModifier.STATIC))
{
write(JSEmitterTokens.PROTOTYPE);
write(ASEmitterTokens.MEMBER_ACCESS);
}
}
}
if (!isConstructor)
emitMemberName(node);
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.EQUAL);
write(ASEmitterTokens.FUNCTION);
emitParameters(node.getParameterNodes());
boolean hasSuperClass = hasSuperClass(node);
if (isConstructor && node.getScopedNode().getChildCount() == 0)
{
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.BLOCK_OPEN);
if (hasSuperClass)
emitSuperCall(node, CONSTRUCTOR_EMPTY);
writeNewline();
write(ASEmitterTokens.BLOCK_CLOSE);
}
if (!isConstructor || node.getScopedNode().getChildCount() > 0)
emitMethodScope(node.getScopedNode());
if (isConstructor && hasSuperClass)
{
writeNewline(ASEmitterTokens.SEMICOLON);
write(JSGoogEmitterTokens.GOOG_INHERITS);
write(ASEmitterTokens.PAREN_OPEN);
write(formatQualifiedName(qname));
writeToken(ASEmitterTokens.COMMA);
String sname = getSuperClassDefinition(node, project)
.getQualifiedName();
write(formatQualifiedName(sname));
write(ASEmitterTokens.PAREN_CLOSE);
}
}
*/
/*
@Override
protected void emitDefaultParameterCodeBlock(IFunctionNode node)
{
IParameterNode[] pnodes = node.getParameterNodes();
if (pnodes.length == 0)
return;
Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
if (defaults != null)
{
final StringBuilder code = new StringBuilder();
if (!hasBody(node))
{
indentPush();
write(JSRoyaleEmitterTokens.INDENT);
}
List<IParameterNode> parameters = new ArrayList<IParameterNode>(
defaults.values());
for (int i = 0, n = parameters.size(); i < n; i++)
{
IParameterNode pnode = parameters.get(i);
if (pnode != null)
{
code.setLength(0);
// x = typeof y !== 'undefined' ? y : z;\n
code.append(pnode.getName());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(ASEmitterTokens.EQUAL.getToken());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(ASEmitterTokens.TYPEOF.getToken());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(pnode.getName());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
code.append(ASEmitterTokens.UNDEFINED.getToken());
code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(ASEmitterTokens.TERNARY.getToken());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(pnode.getName());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(ASEmitterTokens.COLON.getToken());
code.append(ASEmitterTokens.SPACE.getToken());
code.append(pnode.getDefaultValue());
code.append(ASEmitterTokens.SEMICOLON.getToken());
write(code.toString());
if (i == n - 1 && !hasBody(node))
indentPop();
writeNewline();
}
}
}
}
*/
/*
private void writeGetSetPrefix(boolean isGet)
{
if (isGet)
write(ASEmitterTokens.GET);
else
write(ASEmitterTokens.SET);
write("_");
}
*/
/*
@Override
public void emitUnaryOperator(IUnaryOperatorNode node)
{
if (node.getNodeID() == ASTNodeID.Op_PreIncrID
|| node.getNodeID() == ASTNodeID.Op_PreDecrID
|| node.getNodeID() == ASTNodeID.Op_PostIncrID
|| node.getNodeID() == ASTNodeID.Op_PostDecrID)
{
IExpressionNode opNode = node.getOperandNode();
String getString = stringifyNode(opNode);
int index = getString.lastIndexOf("get_");
if (index != -1)
{
write(JSRoyaleEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
write(JSRoyaleEmitterTokens.PREINCREMENT);
else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
write(JSRoyaleEmitterTokens.POSTINCREMENT);
else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
write(JSRoyaleEmitterTokens.PREDECREMENT);
else
write(JSRoyaleEmitterTokens.POSTDECREMENT);
write(ASEmitterTokens.PAREN_OPEN);
String obj = getString.substring(0, index - 1);
write(obj);
write(ASEmitterTokens.COMMA);
String prop = getString.substring(index + 4);
int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
prop = prop.substring(0, endIndex);
write(ASEmitterTokens.DOUBLE_QUOTE);
write(prop);
write(ASEmitterTokens.DOUBLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
return;
}
else
{
IASNode parentNode = node.getParent();
if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
{
// GCC wanted parens around foo++.toString(). As in (foo++).toString();
write(ASEmitterTokens.PAREN_OPEN);
super.emitUnaryOperator(node);
write(ASEmitterTokens.PAREN_CLOSE);
return;
}
}
}
super.emitUnaryOperator(node);
}
*/