/*
* This file is part of the X10 project (http://x10-lang.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* This file was originally derived from the Polyglot extensible compiler framework.
*
* (C) Copyright 2000-2007 Polyglot project group, Cornell University
* (C) Copyright IBM Corporation 2007-2012.
*/
package polyglot.ast;
/**
* This abstract implementation of <code>ExtFactory</code> provides
* a way of chaining together ExtFactories, and default implementations
* of factory methods for each node.
*
* <p>
* For a given type of AST node <code>N</code>, there are three methods:
* <code>extN()</code>, <code>extNImpl()</code> and <code>postExtN(Ext)</code>.
* The method <code>extN()</code> calls <code>extNImpl()</code> to create
* an appropriate extension object, and if other <code>ExtFactory</code>s are
* chained onto this one, it will also call <code>extN()</code> on the next
* <code>ExtFactory</code>. The method <code>extN()</code> will then
* call <code>postExtN</code>, passing in the newly created extension object.
*
* <p>
* The default implementation of <code>extNImpl()</code> is to simply call
* <code>extMImpl()</code>, where <code>M</code> is the immediate
* superclass of <code>N</code>. Similarly, the default implementation of
* <code>postExtN(Ext)</code> is to call <code>postExtM(Ext)</code>.
*
* @see polyglot.ast.AbstractDelFactory_c has a very similar structure.
*/
public abstract class AbstractExtFactory_c implements ExtFactory
{
protected AbstractExtFactory_c() {
this(null);
}
protected AbstractExtFactory_c(ExtFactory nextExtFactory) {
this.nextExtFactory = nextExtFactory;
}
/**
* The next extFactory in the chain. Whenever an extension is instantiated,
* the next extFactory should be called to see if it also has an extension,
* and if so, the extensions should be joined together using the method
* <code>composeExts</code>
*/
private ExtFactory nextExtFactory;
public ExtFactory nextExtFactory() {
return nextExtFactory;
}
/**
* Compose two extensions together. Order is important: e1 gets added
* at the end of e2's chain of extensions.
* @param e1 the <code>Ext</code> object to add to the end of e2's
* chain of extensions.
* @param e2 the second <code>Ext</code> object that will have e1 added to
* its chain of extensions.
* @return the result of adding e1 to the end of e2's chain of extensions.
*/
protected Ext composeExts(Ext e1, Ext e2) {
if (e1 == null) return e2;
if (e2 == null) return e1;
// add e1 as e2's last extension, by recursing...
return e2.ext(composeExts(e1, e2.ext()));
}
// ******************************************
// Final methods that call the Impl methods to construct
// extensions, and then check with nextExtFactory to see if it
// also has an extension. Finally, call an appropriate post method,
// to allow subclasses to perform operations on the construction Exts
// ******************************************
public final Ext extFlagsNode() {
Ext e = extFlagsNodeImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extId();
e = composeExts(e, e2);
}
return postExtFlagsNode(e);
}
public final Ext extId() {
Ext e = extIdImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extId();
e = composeExts(e, e2);
}
return postExtId(e);
}
public final Ext extAmbAssign() {
Ext e = extAmbAssignImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extAmbAssign();
e = composeExts(e, e2);
}
return postExtAmbAssign(e);
}
public final Ext extAmbExpr() {
Ext e = extAmbExprImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extAmbExpr();
e = composeExts(e, e2);
}
return postExtAmbExpr(e);
}
public final Ext extAmbPrefix() {
Ext e = extAmbPrefixImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extAmbPrefix();
e = composeExts(e, e2);
}
return postExtAmbPrefix(e);
}
public final Ext extAmbReceiver() {
Ext e = extAmbReceiverImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extAmbReceiver();
e = composeExts(e, e2);
}
return postExtAmbReceiver(e);
}
public final Ext extAmbTypeNode() {
Ext e = extAmbTypeNodeImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extAmbTypeNode();
e = composeExts(e, e2);
}
return postExtAmbTypeNode(e);
}
public final Ext extArrayAccess() {
Ext e = extArrayAccessImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extArrayAccess();
e = composeExts(e, e2);
}
return postExtArrayAccess(e);
}
public final Ext extArrayInit() {
Ext e = extArrayInitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extArrayInit();
e = composeExts(e, e2);
}
return postExtArrayInit(e);
}
public final Ext extArrayTypeNode() {
Ext e = extArrayTypeNodeImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extArrayTypeNode();
e = composeExts(e, e2);
}
return postExtArrayTypeNode(e);
}
public final Ext extAssert() {
Ext e = extAssertImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extAssert();
e = composeExts(e, e2);
}
return postExtAssert(e);
}
public final Ext extAssign() {
Ext e = extAssignImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extAssign();
e = composeExts(e, e2);
}
return postExtAssign(e);
}
public final Ext extLocalAssign() {
Ext e = extLocalAssignImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extLocalAssign();
e = composeExts(e, e2);
}
return postExtLocalAssign(e);
}
public final Ext extFieldAssign() {
Ext e = extFieldAssignImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extFieldAssign();
e = composeExts(e, e2);
}
return postExtFieldAssign(e);
}
public final Ext extArrayAccessAssign() {
Ext e = extArrayAccessAssignImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extArrayAccessAssign();
e = composeExts(e, e2);
}
return postExtArrayAccessAssign(e);
}
public final Ext extBinary() {
Ext e = extBinaryImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extBinary();
e = composeExts(e, e2);
}
return postExtBinary(e);
}
public final Ext extBlock() {
Ext e = extBlockImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extBlock();
e = composeExts(e, e2);
}
return postExtBlock(e);
}
public final Ext extBooleanLit() {
Ext e = extBooleanLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extBooleanLit();
e = composeExts(e, e2);
}
return postExtBooleanLit(e);
}
public final Ext extBranch() {
Ext e = extBranchImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extBranch();
e = composeExts(e, e2);
}
return postExtBranch(e);
}
public final Ext extCall() {
Ext e = extCallImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCall();
e = composeExts(e, e2);
}
return postExtCall(e);
}
public final Ext extCanonicalTypeNode() {
Ext e = extCanonicalTypeNodeImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCanonicalTypeNode();
e = composeExts(e, e2);
}
return postExtCanonicalTypeNode(e);
}
public final Ext extCase() {
Ext e = extCaseImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCase();
e = composeExts(e, e2);
}
return postExtCase(e);
}
public final Ext extCast() {
Ext e = extCastImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCast();
e = composeExts(e, e2);
}
return postExtCast(e);
}
public final Ext extCatch() {
Ext e = extCatchImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCatch();
e = composeExts(e, e2);
}
return postExtCatch(e);
}
public final Ext extCharLit() {
Ext e = extCharLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCharLit();
e = composeExts(e, e2);
}
return postExtCharLit(e);
}
public final Ext extClassBody() {
Ext e = extClassBodyImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extClassBody();
e = composeExts(e, e2);
}
return postExtClassBody(e);
}
public final Ext extClassDecl() {
Ext e = extClassDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extClassDecl();
e = composeExts(e, e2);
}
return postExtClassDecl(e);
}
public final Ext extClassLit() {
Ext e = extClassLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extClassLit();
e = composeExts(e, e2);
}
return postExtClassLit(e);
}
public final Ext extClassMember() {
Ext e = extClassMemberImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extClassMember();
e = composeExts(e, e2);
}
return postExtClassMember(e);
}
public final Ext extCodeDecl() {
Ext e = extCodeDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCodeDecl();
e = composeExts(e, e2);
}
return postExtCodeDecl(e);
}
public final Ext extCompoundStmt() {
Ext e = extCompoundStmtImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extCompoundStmt();
e = composeExts(e, e2);
}
return postExtCompoundStmt(e);
}
public final Ext extConditional() {
Ext e = extConditionalImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extConditional();
e = composeExts(e, e2);
}
return postExtConditional(e);
}
public final Ext extConstructorCall() {
Ext e = extConstructorCallImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extConstructorCall();
e = composeExts(e, e2);
}
return postExtConstructorCall(e);
}
public final Ext extConstructorDecl() {
Ext e = extConstructorDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extConstructorDecl();
e = composeExts(e, e2);
}
return postExtConstructorDecl(e);
}
public final Ext extDo() {
Ext e = extDoImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extDo();
e = composeExts(e, e2);
}
return postExtDo(e);
}
public final Ext extEmpty() {
Ext e = extEmptyImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extEmpty();
e = composeExts(e, e2);
}
return postExtEmpty(e);
}
public final Ext extEval() {
Ext e = extEvalImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extEval();
e = composeExts(e, e2);
}
return postExtEval(e);
}
public final Ext extExpr() {
Ext e = extExprImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extExpr();
e = composeExts(e, e2);
}
return postExtExpr(e);
}
public final Ext extField() {
Ext e = extFieldImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extField();
e = composeExts(e, e2);
}
return postExtField(e);
}
public final Ext extFieldDecl() {
Ext e = extFieldDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extFieldDecl();
e = composeExts(e, e2);
}
return postExtFieldDecl(e);
}
public final Ext extFloatLit() {
Ext e = extFloatLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extFloatLit();
e = composeExts(e, e2);
}
return postExtFloatLit(e);
}
public final Ext extFor() {
Ext e = extForImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extFor();
e = composeExts(e, e2);
}
return postExtFor(e);
}
public final Ext extFormal() {
Ext e = extFormalImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extFormal();
e = composeExts(e, e2);
}
return postExtFormal(e);
}
public final Ext extIf() {
Ext e = extIfImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extIf();
e = composeExts(e, e2);
}
return postExtIf(e);
}
public final Ext extImport() {
Ext e = extImportImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extImport();
e = composeExts(e, e2);
}
return postExtImport(e);
}
public final Ext extInitializer() {
Ext e = extInitializerImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extInitializer();
e = composeExts(e, e2);
}
return postExtInitializer(e);
}
public final Ext extInstanceof() {
Ext e = extInstanceofImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extInstanceof();
e = composeExts(e, e2);
}
return postExtInstanceof(e);
}
public final Ext extIntLit() {
Ext e = extIntLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extIntLit();
e = composeExts(e, e2);
}
return postExtIntLit(e);
}
public final Ext extLabeled() {
Ext e = extLabeledImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extLabeled();
e = composeExts(e, e2);
}
return postExtLabeled(e);
}
public final Ext extLit() {
Ext e = extLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extLit();
e = composeExts(e, e2);
}
return postExtLit(e);
}
public final Ext extLocal() {
Ext e = extLocalImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extLocal();
e = composeExts(e, e2);
}
return postExtLocal(e);
}
public final Ext extLocalClassDecl() {
Ext e = extLocalClassDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extLocalClassDecl();
e = composeExts(e, e2);
}
return postExtLocalClassDecl(e);
}
public final Ext extLocalDecl() {
Ext e = extLocalDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extLocalDecl();
e = composeExts(e, e2);
}
return postExtLocalDecl(e);
}
public final Ext extLoop() {
Ext e = extLoopImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extLoop();
e = composeExts(e, e2);
}
return postExtLoop(e);
}
public final Ext extMethodDecl() {
Ext e = extMethodDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extMethodDecl();
e = composeExts(e, e2);
}
return postExtMethodDecl(e);
}
public final Ext extNewArray() {
Ext e = extNewArrayImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extNewArray();
e = composeExts(e, e2);
}
return postExtNewArray(e);
}
public final Ext extNode() {
Ext e = extNodeImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extNode();
e = composeExts(e, e2);
}
return postExtNode(e);
}
public final Ext extNodeList() {
Ext e = extNodeListImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extNode();
e = composeExts(e, e2);
}
return postExtNodeList(e);
}
public final Ext extNew() {
Ext e = extNewImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extNew();
e = composeExts(e, e2);
}
return postExtNew(e);
}
public final Ext extNullLit() {
Ext e = extNullLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extNullLit();
e = composeExts(e, e2);
}
return postExtNullLit(e);
}
public final Ext extNumLit() {
Ext e = extNumLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extNumLit();
e = composeExts(e, e2);
}
return postExtNumLit(e);
}
public final Ext extPackageNode() {
Ext e = extPackageNodeImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extPackageNode();
e = composeExts(e, e2);
}
return postExtPackageNode(e);
}
public final Ext extProcedureDecl() {
Ext e = extProcedureDeclImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extProcedureDecl();
e = composeExts(e, e2);
}
return postExtProcedureDecl(e);
}
public final Ext extReturn() {
Ext e = extReturnImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extReturn();
e = composeExts(e, e2);
}
return postExtReturn(e);
}
public final Ext extSourceCollection() {
Ext e = extSourceCollectionImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extSourceCollection();
e = composeExts(e, e2);
}
return postExtSourceCollection(e);
}
public final Ext extSourceFile() {
Ext e = extSourceFileImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extSourceFile();
e = composeExts(e, e2);
}
return postExtSourceFile(e);
}
public final Ext extSpecial() {
Ext e = extSpecialImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extSpecial();
e = composeExts(e, e2);
}
return postExtSpecial(e);
}
public final Ext extStmt() {
Ext e = extStmtImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extStmt();
e = composeExts(e, e2);
}
return postExtStmt(e);
}
public final Ext extStringLit() {
Ext e = extStringLitImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extStringLit();
e = composeExts(e, e2);
}
return postExtStringLit(e);
}
public final Ext extSwitchBlock() {
Ext e = extSwitchBlockImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extSwitchBlock();
e = composeExts(e, e2);
}
return postExtSwitchBlock(e);
}
public final Ext extSwitchElement() {
Ext e = extSwitchElementImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extSwitchElement();
e = composeExts(e, e2);
}
return postExtSwitchElement(e);
}
public final Ext extSwitch() {
Ext e = extSwitchImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extSwitch();
e = composeExts(e, e2);
}
return postExtSwitch(e);
}
public final Ext extSynchronized() {
Ext e = extSynchronizedImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extSynchronized();
e = composeExts(e, e2);
}
return postExtSynchronized(e);
}
public final Ext extTerm() {
Ext e = extTermImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extTerm();
e = composeExts(e, e2);
}
return postExtTerm(e);
}
public final Ext extThrow() {
Ext e = extThrowImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extThrow();
e = composeExts(e, e2);
}
return postExtThrow(e);
}
public final Ext extTry() {
Ext e = extTryImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extTry();
e = composeExts(e, e2);
}
return postExtTry(e);
}
public final Ext extTypeNode() {
Ext e = extTypeNodeImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extTypeNode();
e = composeExts(e, e2);
}
return postExtTypeNode(e);
}
public final Ext extUnary() {
Ext e = extUnaryImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extUnary();
e = composeExts(e, e2);
}
return postExtUnary(e);
}
public final Ext extWhile() {
Ext e = extWhileImpl();
if (nextExtFactory != null) {
Ext e2 = nextExtFactory.extWhile();
e = composeExts(e, e2);
}
return postExtWhile(e);
}
// ********************************************
// Impl methods
// ********************************************
/**
* Create the <code>Ext</code> object for a <code>FlagsNode</code> AST node.
* @return the <code>Ext</code> object for a <code>FlagsNode</code> AST node.
*/
protected Ext extFlagsNodeImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Id</code> AST node.
* @return the <code>Ext</code> object for a <code>Id</code> AST node.
*/
protected Ext extIdImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>AmbAssign</code> AST node.
* @return the <code>Ext</code> object for a <code>AmbAssign</code> AST node.
*/
protected Ext extAmbAssignImpl() {
return extAssignImpl();
}
/**
* Create the <code>Ext</code> object for a <code>AmbExpr</code> AST node.
* @return the <code>Ext</code> object for a <code>AmbExpr</code> AST node.
*/
protected Ext extAmbExprImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>AmbPrefix</code> AST node.
* @return the <code>Ext</code> object for a <code>AmbPrefix</code> AST node.
*/
protected Ext extAmbPrefixImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>AmbReceiver</code> AST node.
* @return the <code>Ext</code> object for a <code>AmbReceiver</code> AST node.
*/
protected Ext extAmbReceiverImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>AmbTypeNode</code> AST node.
* @return the <code>Ext</code> object for a <code>AmbTypeNode</code> AST node.
*/
protected Ext extAmbTypeNodeImpl() {
return extTypeNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ArrayAccess</code> AST node.
* @return the <code>Ext</code> object for a <code>ArrayAccess</code> AST node.
*/
protected Ext extArrayAccessImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ArrayInit</code> AST node.
* @return the <code>Ext</code> object for a <code>ArrayInit</code> AST node.
*/
protected Ext extArrayInitImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ArrayTypeNode</code> AST node.
* @return the <code>Ext</code> object for a <code>ArrayTypeNode</code> AST node.
*/
protected Ext extArrayTypeNodeImpl() {
return extTypeNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Assert</code> AST node.
* @return the <code>Ext</code> object for a <code>Assert</code> AST node.
*/
protected Ext extAssertImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Assign</code> AST node.
* @return the <code>Ext</code> object for a <code>Assign</code> AST node.
*/
protected Ext extAssignImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>LocalAssign</code> AST node.
* @return the <code>Ext</code> object for a <code>LocalAssign</code> AST node.
*/
protected Ext extLocalAssignImpl() {
return extAssignImpl();
}
/**
* Create the <code>Ext</code> object for a <code>FieldAssign</code> AST node.
* @return the <code>Ext</code> object for a <code>FieldAssign</code> AST node.
*/
protected Ext extFieldAssignImpl() {
return extAssignImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ArrayAccessAssign</code> AST node.
* @return the <code>Ext</code> object for a <code>ArrayAccessAssign</code> AST node.
*/
protected Ext extArrayAccessAssignImpl() {
return extAssignImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Binary</code> AST node.
* @return the <code>Ext</code> object for a <code>Binary</code> AST node.
*/
protected Ext extBinaryImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Block</code> AST node.
* @return the <code>Ext</code> object for a <code>Block</code> AST node.
*/
protected Ext extBlockImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>BooleanLit</code> AST node.
* @return the <code>Ext</code> object for a <code>BooleanLit</code> AST node.
*/
protected Ext extBooleanLitImpl() {
return extLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Branch</code> AST node.
* @return the <code>Ext</code> object for a <code>Branch</code> AST node.
*/
protected Ext extBranchImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Call</code> AST node.
* @return the <code>Ext</code> object for a <code>Call</code> AST node.
*/
protected Ext extCallImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>CanonicalTypeNode</code> AST node.
* @return the <code>Ext</code> object for a <code>CanonicalTypeNode</code> AST node.
*/
protected Ext extCanonicalTypeNodeImpl() {
return extTypeNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Case</code> AST node.
* @return the <code>Ext</code> object for a <code>Case</code> AST node.
*/
protected Ext extCaseImpl() {
return extSwitchElementImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Cast</code> AST node.
* @return the <code>Ext</code> object for a <code>Cast</code> AST node.
*/
protected Ext extCastImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Catch</code> AST node.
* @return the <code>Ext</code> object for a <code>Catch</code> AST node.
*/
protected Ext extCatchImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>CharLit</code> AST node.
* @return the <code>Ext</code> object for a <code>CharLit</code> AST node.
*/
protected Ext extCharLitImpl() {
return extNumLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ClassBody</code> AST node.
* @return the <code>Ext</code> object for a <code>ClassBody</code> AST node.
*/
protected Ext extClassBodyImpl() {
return extTermImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ClassDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>ClassDecl</code> AST node.
*/
protected Ext extClassDeclImpl() {
return extTermImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ClassLit</code> AST node.
* @return the <code>Ext</code> object for a <code>ClassLit</code> AST node.
*/
protected Ext extClassLitImpl() {
return extLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ClassMember</code> AST node.
* @return the <code>Ext</code> object for a <code>ClassMember</code> AST node.
*/
protected Ext extClassMemberImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>CodeDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>CodeDecl</code> AST node.
*/
protected Ext extCodeDeclImpl() {
return extClassMemberImpl();
}
/**
* Create the <code>Ext</code> object for a <code>CompoundStmt</code> AST node.
* @return the <code>Ext</code> object for a <code>CompoundStmt</code> AST node.
*/
protected Ext extCompoundStmtImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Conditional</code> AST node.
* @return the <code>Ext</code> object for a <code>Conditional</code> AST node.
*/
protected Ext extConditionalImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ConstructorCall</code> AST node.
* @return the <code>Ext</code> object for a <code>ConstructorCall</code> AST node.
*/
protected Ext extConstructorCallImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ConstructorDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>ConstructorDecl</code> AST node.
*/
protected Ext extConstructorDeclImpl() {
return extProcedureDeclImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Do</code> AST node.
* @return the <code>Ext</code> object for a <code>Do</code> AST node.
*/
protected Ext extDoImpl() {
return extLoopImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Empty</code> AST node.
* @return the <code>Ext</code> object for a <code>Empty</code> AST node.
*/
protected Ext extEmptyImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Eval</code> AST node.
* @return the <code>Ext</code> object for a <code>Eval</code> AST node.
*/
protected Ext extEvalImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Expr</code> AST node.
* @return the <code>Ext</code> object for a <code>Expr</code> AST node.
*/
protected Ext extExprImpl() {
return extTermImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Field</code> AST node.
* @return the <code>Ext</code> object for a <code>Field</code> AST node.
*/
protected Ext extFieldImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>FieldDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>FieldDecl</code> AST node.
*/
protected Ext extFieldDeclImpl() {
return extClassMemberImpl();
}
/**
* Create the <code>Ext</code> object for a <code>FloatLit</code> AST node.
* @return the <code>Ext</code> object for a <code>FloatLit</code> AST node.
*/
protected Ext extFloatLitImpl() {
return extLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>For</code> AST node.
* @return the <code>Ext</code> object for a <code>For</code> AST node.
*/
protected Ext extForImpl() {
return extLoopImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Formal</code> AST node.
* @return the <code>Ext</code> object for a <code>Formal</code> AST node.
*/
protected Ext extFormalImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>If</code> AST node.
* @return the <code>Ext</code> object for a <code>If</code> AST node.
*/
protected Ext extIfImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Import</code> AST node.
* @return the <code>Ext</code> object for a <code>Import</code> AST node.
*/
protected Ext extImportImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Initializer</code> AST node.
* @return the <code>Ext</code> object for a <code>Initializer</code> AST node.
*/
protected Ext extInitializerImpl() {
return extCodeDeclImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Instanceof</code> AST node.
* @return the <code>Ext</code> object for a <code>Instanceof</code> AST node.
*/
protected Ext extInstanceofImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>IntLit</code> AST node.
* @return the <code>Ext</code> object for a <code>IntLit</code> AST node.
*/
protected Ext extIntLitImpl() {
return extNumLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Labeled</code> AST node.
* @return the <code>Ext</code> object for a <code>Labeled</code> AST node.
*/
protected Ext extLabeledImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Lit</code> AST node.
* @return the <code>Ext</code> object for a <code>Lit</code> AST node.
*/
protected Ext extLitImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Local</code> AST node.
* @return the <code>Ext</code> object for a <code>Local</code> AST node.
*/
protected Ext extLocalImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>LocalClassDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>LocalClassDecl</code> AST node.
*/
protected Ext extLocalClassDeclImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>LocalDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>LocalDecl</code> AST node.
*/
protected Ext extLocalDeclImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Loop</code> AST node.
* @return the <code>Ext</code> object for a <code>Loop</code> AST node.
*/
protected Ext extLoopImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>MethodDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>MethodDecl</code> AST node.
*/
protected Ext extMethodDeclImpl() {
return extProcedureDeclImpl();
}
/**
* Create the <code>Ext</code> object for a <code>NewArray</code> AST node.
* @return the <code>Ext</code> object for a <code>NewArray</code> AST node.
*/
protected Ext extNewArrayImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Node</code> AST node.
* @return the <code>Ext</code> object for a <code>Node</code> AST node.
*/
protected Ext extNodeImpl() {
return null;
}
/**
* Create the <code>Ext</code> object for a <code>NodeList</code> AST node.
* @return the <code>Ext</code> object for a <code>NodeList</code> AST node.
*/
protected Ext extNodeListImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>New</code> AST node.
* @return the <code>Ext</code> object for a <code>New</code> AST node.
*/
protected Ext extNewImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>NullLit</code> AST node.
* @return the <code>Ext</code> object for a <code>NullLit</code> AST node.
*/
protected Ext extNullLitImpl() {
return extLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>NumLit</code> AST node.
* @return the <code>Ext</code> object for a <code>NumLit</code> AST node.
*/
protected Ext extNumLitImpl() {
return extLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>PackageNode</code> AST node.
* @return the <code>Ext</code> object for a <code>PackageNode</code> AST node.
*/
protected Ext extPackageNodeImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>ProcedureDecl</code> AST node.
* @return the <code>Ext</code> object for a <code>ProcedureDecl</code> AST node.
*/
protected Ext extProcedureDeclImpl() {
return extCodeDeclImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Return</code> AST node.
* @return the <code>Ext</code> object for a <code>Return</code> AST node.
*/
protected Ext extReturnImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>SourceCollection</code> AST node.
* @return the <code>Ext</code> object for a <code>SourceCollection</code> AST node.
*/
protected Ext extSourceCollectionImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>SourceFile</code> AST node.
* @return the <code>Ext</code> object for a <code>SourceFile</code> AST node.
*/
protected Ext extSourceFileImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Special</code> AST node.
* @return the <code>Ext</code> object for a <code>Special</code> AST node.
*/
protected Ext extSpecialImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Stmt</code> AST node.
* @return the <code>Ext</code> object for a <code>Stmt</code> AST node.
*/
protected Ext extStmtImpl() {
return extTermImpl();
}
/**
* Create the <code>Ext</code> object for a <code>StringLit</code> AST node.
* @return the <code>Ext</code> object for a <code>StringLit</code> AST node.
*/
protected Ext extStringLitImpl() {
return extLitImpl();
}
/**
* Create the <code>Ext</code> object for a <code>SwitchBlock</code> AST node.
* @return the <code>Ext</code> object for a <code>SwitchBlock</code> AST node.
*/
protected Ext extSwitchBlockImpl() {
return extSwitchElementImpl();
}
/**
* Create the <code>Ext</code> object for a <code>SwitchElement</code> AST node.
* @return the <code>Ext</code> object for a <code>SwitchElement</code> AST node.
*/
protected Ext extSwitchElementImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Switch</code> AST node.
* @return the <code>Ext</code> object for a <code>Switch</code> AST node.
*/
protected Ext extSwitchImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Synchronized</code> AST node.
* @return the <code>Ext</code> object for a <code>Synchronized</code> AST node.
*/
protected Ext extSynchronizedImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Term</code> AST node.
* @return the <code>Ext</code> object for a <code>Term</code> AST node.
*/
protected Ext extTermImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Throw</code> AST node.
* @return the <code>Ext</code> object for a <code>Throw</code> AST node.
*/
protected Ext extThrowImpl() {
return extStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Try</code> AST node.
* @return the <code>Ext</code> object for a <code>Try</code> AST node.
*/
protected Ext extTryImpl() {
return extCompoundStmtImpl();
}
/**
* Create the <code>Ext</code> object for a <code>TypeNode</code> AST node.
* @return the <code>Ext</code> object for a <code>TypeNode</code> AST node.
*/
protected Ext extTypeNodeImpl() {
return extNodeImpl();
}
/**
* Create the <code>Ext</code> object for a <code>Unary</code> AST node.
* @return the <code>Ext</code> object for a <code>Unary</code> AST node.
*/
protected Ext extUnaryImpl() {
return extExprImpl();
}
/**
* Create the <code>Ext</code> object for a <code>While</code> AST node.
* @return the <code>Ext</code> object for a <code>While</code> AST node.
*/
protected Ext extWhileImpl() {
return extLoopImpl();
}
// ********************************************
// Post methods
// ********************************************
protected Ext postExtFlagsNode(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtId(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtAmbAssign(Ext ext) {
return postExtAssign(ext);
}
protected Ext postExtAmbExpr(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtAmbPrefix(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtAmbReceiver(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtAmbTypeNode(Ext ext) {
return postExtTypeNode(ext);
}
protected Ext postExtArrayAccess(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtArrayInit(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtArrayTypeNode(Ext ext) {
return postExtTypeNode(ext);
}
protected Ext postExtAssert(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtAssign(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtLocalAssign(Ext ext) {
return postExtAssign(ext);
}
protected Ext postExtFieldAssign(Ext ext) {
return postExtAssign(ext);
}
protected Ext postExtArrayAccessAssign(Ext ext) {
return postExtAssign(ext);
}
protected Ext postExtBinary(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtBlock(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtBooleanLit(Ext ext) {
return postExtLit(ext);
}
protected Ext postExtBranch(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtCall(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtCanonicalTypeNode(Ext ext) {
return postExtTypeNode(ext);
}
protected Ext postExtCase(Ext ext) {
return postExtSwitchElement(ext);
}
protected Ext postExtCast(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtCatch(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtCharLit(Ext ext) {
return postExtNumLit(ext);
}
protected Ext postExtClassBody(Ext ext) {
return postExtTerm(ext);
}
protected Ext postExtClassDecl(Ext ext) {
return postExtTerm(ext);
}
protected Ext postExtClassLit(Ext ext) {
return postExtLit(ext);
}
protected Ext postExtClassMember(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtCodeDecl(Ext ext) {
return postExtClassMember(ext);
}
protected Ext postExtCompoundStmt(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtConditional(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtConstructorCall(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtConstructorDecl(Ext ext) {
return postExtProcedureDecl(ext);
}
protected Ext postExtDo(Ext ext) {
return postExtLoop(ext);
}
protected Ext postExtEmpty(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtEval(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtExpr(Ext ext) {
return postExtTerm(ext);
}
protected Ext postExtField(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtFieldDecl(Ext ext) {
return postExtClassMember(ext);
}
protected Ext postExtFloatLit(Ext ext) {
return postExtLit(ext);
}
protected Ext postExtFor(Ext ext) {
return postExtLoop(ext);
}
protected Ext postExtFormal(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtIf(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtImport(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtInitializer(Ext ext) {
return postExtCodeDecl(ext);
}
protected Ext postExtInstanceof(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtIntLit(Ext ext) {
return postExtNumLit(ext);
}
protected Ext postExtLabeled(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtLit(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtLocal(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtLocalClassDecl(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtLocalDecl(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtLoop(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtMethodDecl(Ext ext) {
return postExtProcedureDecl(ext);
}
protected Ext postExtNewArray(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtNode(Ext ext) {
return ext;
}
protected Ext postExtNodeList(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtNew(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtNullLit(Ext ext) {
return postExtLit(ext);
}
protected Ext postExtNumLit(Ext ext) {
return postExtLit(ext);
}
protected Ext postExtPackageNode(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtProcedureDecl(Ext ext) {
return postExtCodeDecl(ext);
}
protected Ext postExtReturn(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtSourceCollection(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtSourceFile(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtSpecial(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtStmt(Ext ext) {
return postExtTerm(ext);
}
protected Ext postExtStringLit(Ext ext) {
return postExtLit(ext);
}
protected Ext postExtSwitchBlock(Ext ext) {
return postExtSwitchElement(ext);
}
protected Ext postExtSwitchElement(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtSwitch(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtSynchronized(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtTerm(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtThrow(Ext ext) {
return postExtStmt(ext);
}
protected Ext postExtTry(Ext ext) {
return postExtCompoundStmt(ext);
}
protected Ext postExtTypeNode(Ext ext) {
return postExtNode(ext);
}
protected Ext postExtUnary(Ext ext) {
return postExtExpr(ext);
}
protected Ext postExtWhile(Ext ext) {
return postExtLoop(ext);
}
}