2013-05-22 22:39:19 +00:00
|
|
|
/*******************************************************************************
|
|
|
|
* Copyright (c) 2013 IBM Corporation.
|
|
|
|
* All rights reserved. This program and the accompanying materials
|
|
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
|
|
* which accompanies this distribution, and is available at
|
|
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
|
|
*
|
|
|
|
* Contributors:
|
|
|
|
* IBM Corporation - initial API and implementation
|
|
|
|
*******************************************************************************/
|
2012-01-27 20:15:33 +00:00
|
|
|
package com.ibm.wala.cast.js.translator;
|
|
|
|
|
|
|
|
import org.mozilla.javascript.ast.ArrayComprehension;
|
|
|
|
import org.mozilla.javascript.ast.ArrayComprehensionLoop;
|
|
|
|
import org.mozilla.javascript.ast.ArrayLiteral;
|
|
|
|
import org.mozilla.javascript.ast.Assignment;
|
|
|
|
import org.mozilla.javascript.ast.AstNode;
|
|
|
|
import org.mozilla.javascript.ast.AstRoot;
|
|
|
|
import org.mozilla.javascript.ast.Block;
|
|
|
|
import org.mozilla.javascript.ast.BreakStatement;
|
|
|
|
import org.mozilla.javascript.ast.CatchClause;
|
|
|
|
import org.mozilla.javascript.ast.Comment;
|
|
|
|
import org.mozilla.javascript.ast.ConditionalExpression;
|
|
|
|
import org.mozilla.javascript.ast.ContinueStatement;
|
|
|
|
import org.mozilla.javascript.ast.DoLoop;
|
|
|
|
import org.mozilla.javascript.ast.ElementGet;
|
|
|
|
import org.mozilla.javascript.ast.EmptyExpression;
|
2015-08-14 16:27:13 +00:00
|
|
|
import org.mozilla.javascript.ast.EmptyStatement;
|
2012-01-27 20:15:33 +00:00
|
|
|
import org.mozilla.javascript.ast.ErrorNode;
|
|
|
|
import org.mozilla.javascript.ast.ExpressionStatement;
|
|
|
|
import org.mozilla.javascript.ast.ForInLoop;
|
|
|
|
import org.mozilla.javascript.ast.ForLoop;
|
|
|
|
import org.mozilla.javascript.ast.FunctionCall;
|
|
|
|
import org.mozilla.javascript.ast.FunctionNode;
|
|
|
|
import org.mozilla.javascript.ast.IfStatement;
|
|
|
|
import org.mozilla.javascript.ast.InfixExpression;
|
|
|
|
import org.mozilla.javascript.ast.Jump;
|
|
|
|
import org.mozilla.javascript.ast.KeywordLiteral;
|
|
|
|
import org.mozilla.javascript.ast.Label;
|
|
|
|
import org.mozilla.javascript.ast.LabeledStatement;
|
|
|
|
import org.mozilla.javascript.ast.LetNode;
|
|
|
|
import org.mozilla.javascript.ast.Name;
|
|
|
|
import org.mozilla.javascript.ast.NewExpression;
|
|
|
|
import org.mozilla.javascript.ast.NumberLiteral;
|
|
|
|
import org.mozilla.javascript.ast.ObjectLiteral;
|
|
|
|
import org.mozilla.javascript.ast.ObjectProperty;
|
|
|
|
import org.mozilla.javascript.ast.ParenthesizedExpression;
|
|
|
|
import org.mozilla.javascript.ast.PropertyGet;
|
|
|
|
import org.mozilla.javascript.ast.RegExpLiteral;
|
|
|
|
import org.mozilla.javascript.ast.ReturnStatement;
|
|
|
|
import org.mozilla.javascript.ast.Scope;
|
|
|
|
import org.mozilla.javascript.ast.ScriptNode;
|
|
|
|
import org.mozilla.javascript.ast.StringLiteral;
|
|
|
|
import org.mozilla.javascript.ast.SwitchCase;
|
|
|
|
import org.mozilla.javascript.ast.SwitchStatement;
|
|
|
|
import org.mozilla.javascript.ast.Symbol;
|
|
|
|
import org.mozilla.javascript.ast.ThrowStatement;
|
|
|
|
import org.mozilla.javascript.ast.TryStatement;
|
|
|
|
import org.mozilla.javascript.ast.UnaryExpression;
|
|
|
|
import org.mozilla.javascript.ast.VariableDeclaration;
|
|
|
|
import org.mozilla.javascript.ast.VariableInitializer;
|
|
|
|
import org.mozilla.javascript.ast.WhileLoop;
|
|
|
|
import org.mozilla.javascript.ast.WithStatement;
|
|
|
|
import org.mozilla.javascript.ast.XmlDotQuery;
|
|
|
|
import org.mozilla.javascript.ast.XmlElemRef;
|
|
|
|
import org.mozilla.javascript.ast.XmlExpression;
|
|
|
|
import org.mozilla.javascript.ast.XmlFragment;
|
|
|
|
import org.mozilla.javascript.ast.XmlLiteral;
|
|
|
|
import org.mozilla.javascript.ast.XmlMemberGet;
|
|
|
|
import org.mozilla.javascript.ast.XmlPropRef;
|
|
|
|
import org.mozilla.javascript.ast.XmlRef;
|
|
|
|
import org.mozilla.javascript.ast.XmlString;
|
|
|
|
import org.mozilla.javascript.ast.Yield;
|
|
|
|
|
|
|
|
public abstract class TypedNodeVisitor<R,A> {
|
|
|
|
|
|
|
|
public R visit(AstNode node, A arg) {
|
|
|
|
if (node instanceof ArrayComprehension) {
|
|
|
|
return visitArrayComprehension((ArrayComprehension) node, arg);
|
|
|
|
} else if (node instanceof WhileLoop) {
|
|
|
|
return visitWhileLoop((WhileLoop) node, arg);
|
|
|
|
} else if (node instanceof ArrayComprehensionLoop) {
|
|
|
|
return visitArrayComprehensionLoop((ArrayComprehensionLoop) node, arg);
|
|
|
|
} else if (node instanceof ArrayLiteral) {
|
|
|
|
return visitArrayLiteral((ArrayLiteral) node, arg);
|
|
|
|
} else if (node instanceof Assignment) {
|
|
|
|
return visitAssignment((Assignment) node, arg);
|
|
|
|
} else if (node instanceof AstRoot) {
|
|
|
|
return visitAstRoot((AstRoot) node, arg);
|
|
|
|
} else if (node instanceof Block) {
|
|
|
|
return visitBlock((Block) node, arg);
|
|
|
|
} else if (node instanceof BreakStatement) {
|
|
|
|
return visitBreakStatement((BreakStatement) node, arg);
|
|
|
|
} else if (node instanceof CatchClause) {
|
|
|
|
return visitCatchClause((CatchClause) node, arg);
|
|
|
|
} else if (node instanceof Comment) {
|
|
|
|
return visitComment((Comment) node, arg);
|
|
|
|
} else if (node instanceof ConditionalExpression) {
|
|
|
|
return visitConditionalExpression((ConditionalExpression) node, arg);
|
|
|
|
} else if (node instanceof ContinueStatement) {
|
|
|
|
return visitContinueStatement((ContinueStatement) node, arg);
|
|
|
|
} else if (node instanceof DoLoop) {
|
|
|
|
return visitDoLoop((DoLoop) node, arg);
|
|
|
|
} else if (node instanceof ElementGet) {
|
|
|
|
return visitElementGet((ElementGet) node, arg);
|
|
|
|
} else if (node instanceof EmptyExpression) {
|
|
|
|
return visitEmptyExpression((EmptyExpression) node, arg);
|
2015-08-14 16:27:13 +00:00
|
|
|
} else if (node instanceof EmptyStatement) {
|
|
|
|
return visitEmptyStatement((EmptyStatement) node, arg);
|
2012-01-27 20:15:33 +00:00
|
|
|
} else if (node instanceof ErrorNode) {
|
|
|
|
return visitErrorNode((ErrorNode) node, arg);
|
|
|
|
} else if (node instanceof ExpressionStatement) {
|
|
|
|
return visitExpressionStatement((ExpressionStatement) node, arg);
|
|
|
|
} else if (node instanceof ForInLoop) {
|
|
|
|
return visitForInLoop((ForInLoop) node, arg);
|
|
|
|
} else if (node instanceof ForLoop) {
|
|
|
|
return visitForLoop((ForLoop) node, arg);
|
|
|
|
} else if (node instanceof NewExpression) {
|
|
|
|
return visitNewExpression((NewExpression) node, arg);
|
|
|
|
} else if (node instanceof FunctionCall) {
|
|
|
|
return visitFunctionCall((FunctionCall) node, arg);
|
|
|
|
} else if (node instanceof FunctionNode) {
|
|
|
|
return visitFunctionNode((FunctionNode) node, arg);
|
|
|
|
} else if (node instanceof IfStatement) {
|
|
|
|
return visitIfStatement((IfStatement) node, arg);
|
|
|
|
} else if (node instanceof KeywordLiteral) {
|
|
|
|
return visitKeywordLiteral((KeywordLiteral) node, arg);
|
|
|
|
} else if (node instanceof Label) {
|
|
|
|
return visitLabel((Label) node, arg);
|
|
|
|
} else if (node instanceof LabeledStatement) {
|
|
|
|
return visitLabeledStatement((LabeledStatement) node, arg);
|
|
|
|
} else if (node instanceof LetNode) {
|
|
|
|
return visitLetNode((LetNode) node, arg);
|
|
|
|
} else if (node instanceof Name) {
|
|
|
|
return visitName((Name) node, arg);
|
|
|
|
} else if (node instanceof NumberLiteral) {
|
|
|
|
return visitNumberLiteral((NumberLiteral) node, arg);
|
|
|
|
} else if (node instanceof ObjectLiteral) {
|
|
|
|
return visitObjectLiteral((ObjectLiteral) node, arg);
|
|
|
|
} else if (node instanceof ObjectProperty) {
|
|
|
|
return visitObjectProperty((ObjectProperty) node, arg);
|
|
|
|
} else if (node instanceof ParenthesizedExpression) {
|
|
|
|
return visitParenthesizedExpression((ParenthesizedExpression) node, arg);
|
|
|
|
} else if (node instanceof PropertyGet) {
|
|
|
|
return visitPropertyGet((PropertyGet) node, arg);
|
|
|
|
} else if (node instanceof RegExpLiteral) {
|
|
|
|
return visitRegExpLiteral((RegExpLiteral) node, arg);
|
|
|
|
} else if (node instanceof ReturnStatement) {
|
|
|
|
return visitReturnStatement((ReturnStatement) node, arg);
|
|
|
|
} else if (node instanceof Scope) {
|
|
|
|
return visitScope((Scope) node, arg);
|
|
|
|
} else if (node instanceof ScriptNode) {
|
|
|
|
return visitScriptNode((ScriptNode) node, arg);
|
|
|
|
} else if (node instanceof StringLiteral) {
|
|
|
|
return visitStringLiteral((StringLiteral) node, arg);
|
|
|
|
} else if (node instanceof SwitchCase) {
|
|
|
|
return visitSwitchCase((SwitchCase) node, arg);
|
|
|
|
} else if (node instanceof SwitchStatement) {
|
|
|
|
return visitSwitchStatement((SwitchStatement) node, arg);
|
|
|
|
} else if (node instanceof ThrowStatement) {
|
|
|
|
return visitThrowStatement((ThrowStatement) node, arg);
|
|
|
|
} else if (node instanceof TryStatement) {
|
|
|
|
return visitTryStatement((TryStatement) node, arg);
|
|
|
|
} else if (node instanceof UnaryExpression) {
|
|
|
|
return visitUnaryExpression((UnaryExpression) node, arg);
|
|
|
|
} else if (node instanceof VariableDeclaration) {
|
|
|
|
return visitVariableDeclaration((VariableDeclaration) node, arg);
|
|
|
|
} else if (node instanceof VariableInitializer) {
|
|
|
|
return visitVariableInitializer((VariableInitializer) node, arg);
|
|
|
|
} else if (node instanceof WithStatement) {
|
|
|
|
return visitWithStatement((WithStatement) node, arg);
|
|
|
|
} else if (node instanceof XmlDotQuery) {
|
|
|
|
return visitXmlDotQuery((XmlDotQuery) node, arg);
|
|
|
|
} else if (node instanceof XmlElemRef) {
|
|
|
|
return visitXmlElemRef((XmlElemRef) node, arg);
|
|
|
|
} else if (node instanceof XmlExpression) {
|
|
|
|
return visitXmlExpression((XmlExpression) node, arg);
|
|
|
|
} else if (node instanceof XmlLiteral) {
|
|
|
|
return visitXmlLiteral((XmlLiteral) node, arg);
|
|
|
|
} else if (node instanceof XmlMemberGet) {
|
|
|
|
return visitXmlMemberGet((XmlMemberGet) node, arg);
|
|
|
|
} else if (node instanceof XmlPropRef) {
|
|
|
|
return visitXmlPropRef((XmlPropRef) node, arg);
|
|
|
|
} else if (node instanceof XmlString) {
|
|
|
|
return visitXmlString((XmlString) node, arg);
|
|
|
|
} else if (node instanceof Yield) {
|
|
|
|
return visitYield((Yield) node, arg);
|
|
|
|
} else if (node instanceof InfixExpression) {
|
|
|
|
return visitInfixExpression((InfixExpression) node, arg);
|
|
|
|
} else if (node instanceof Jump) {
|
|
|
|
return visitJump((Jump) node, arg);
|
|
|
|
} else {
|
|
|
|
throw new Error("unexpected node type " + node.getClass().getName());
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public abstract R visitArrayComprehension(ArrayComprehension node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitArrayComprehensionLoop(ArrayComprehensionLoop node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitArrayLiteral(ArrayLiteral node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitAssignment(Assignment node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitAstRoot(AstRoot node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitBlock(Block node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitBreakStatement(BreakStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitCatchClause(CatchClause node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitComment(Comment node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitConditionalExpression(ConditionalExpression node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitContinueStatement(ContinueStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitDoLoop(DoLoop node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitElementGet(ElementGet node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitEmptyExpression(EmptyExpression node, A arg) ;
|
|
|
|
|
2015-08-14 16:27:13 +00:00
|
|
|
public abstract R visitEmptyStatement(EmptyStatement node, A arg) ;
|
|
|
|
|
2012-01-27 20:15:33 +00:00
|
|
|
public abstract R visitErrorNode(ErrorNode node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitExpressionStatement(ExpressionStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitForInLoop(ForInLoop node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitForLoop(ForLoop node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitFunctionCall(FunctionCall node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitFunctionNode(FunctionNode node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitIfStatement(IfStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitInfixExpression(InfixExpression node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitJump(Jump node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitKeywordLiteral(KeywordLiteral node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitLabel(Label node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitLabeledStatement(LabeledStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitLetNode(LetNode node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitName(Name node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitNewExpression(NewExpression node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitNumberLiteral(NumberLiteral node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitObjectLiteral(ObjectLiteral node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitObjectProperty(ObjectProperty node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitParenthesizedExpression(ParenthesizedExpression node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitPropertyGet(PropertyGet node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitRegExpLiteral(RegExpLiteral node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitReturnStatement(ReturnStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitScope(Scope node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitScriptNode(ScriptNode node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitStringLiteral(StringLiteral node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitSwitchCase(SwitchCase node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitSwitchStatement(SwitchStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitSymbol(Symbol node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitThrowStatement(ThrowStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitTryStatement(TryStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitUnaryExpression(UnaryExpression node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitVariableDeclaration(VariableDeclaration node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitVariableInitializer(VariableInitializer node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitWhileLoop(WhileLoop node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitWithStatement(WithStatement node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlDotQuery(XmlDotQuery node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlElemRef(XmlElemRef node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlExpression(XmlExpression node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlFragment(XmlFragment node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlLiteral(XmlLiteral node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlMemberGet(XmlMemberGet node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlPropRef(XmlPropRef node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlRef(XmlRef node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitXmlString(XmlString node, A arg) ;
|
|
|
|
|
|
|
|
public abstract R visitYield(Yield node, A arg) ;
|
|
|
|
|
|
|
|
}
|