gov.llnl.babel.visitor

Class AddDefaultsVisitor


public class AddDefaultsVisitor
extends Visitor

Iterates over a AST a second time to decorate a primed SymbolTable with all the details about classes, interfaces, and structs Type resolution is largely performed in this stage.
See Also:
SymbolTablePrimer

Field Summary

protected MsgList
d_msgs

Constructor Summary

AddDefaultsVisitor(MsgList msgs)

Method Summary

Object
visitClassType(ClassType node, Object data)
Add defaults at the Class Level.
Object
visitInterfaceType(InterfaceType node, Object data)
Add defaults as the interface level 1.
Object
visitMethod(Method node, Object data)
Method level defaults 1.

Methods inherited from class gov.llnl.babel.visitor.Visitor

visitArgument, visitArgumentList, visitArrayType, visitAssertion, visitAttribute, visitAttributeList, visitBinaryExpr, visitBooleanLiteral, visitCharacterLiteral, visitClassType, visitDComplexLiteral, visitDocComment, visitDoubleLiteral, visitEnsures, visitEnumItem, visitEnumeration, visitExtents, visitFComplexLiteral, visitFixedType, visitFloatLiteral, visitFromClause, visitFuncExpr, visitImportClause, visitIntLiteral, visitInterfaceType, visitInvariants, visitMethod, visitMethodList, visitName, visitNode, visitPackage, visitRArrayType, visitRequireClause, visitRequires, visitSIDLFile, visitScopedID, visitScopedIDList, visitSplicerBlock, visitSplicerImpl, visitSplicerImplList, visitSplicerList, visitStringLiteral, visitStructItem, visitStructType, visitThrowsList, visitUnaryExpr

Field Details

d_msgs

protected MsgList d_msgs

Constructor Details

AddDefaultsVisitor

public AddDefaultsVisitor(MsgList msgs)

Method Details

visitClassType

public Object visitClassType(ClassType node,
                             Object data)
Add defaults at the Class Level. 1. If the class is SIDL_BASECLASS, implement SIDL_BASEINTERFACE 2. If the class doesn't inherit anything, extend SIDL_BASECLASS TBD: - Should defaults be assigned for class-level splicer blocks? What about C's "int ignore;" and F90's "integer :: placeholder"? - If so, then how should the different kind and number of blocks for each language be handled? (For example, C has two splicer blocks --- _data and _includes --- in it's header while, ignoring method-specific blocks, Java has four --- _imports, _data, _load (for static), and _misc.) - What is the most desirable way of handling default comments in splicer blocks given the different comment syntax for each language?
Overrides:
visitClassType in interface Visitor

visitInterfaceType

public Object visitInterfaceType(InterfaceType node,
                                 Object data)
Add defaults as the interface level 1. If it's not SIDL_BASEINTERFACE, and it has no extends, extend SIDL_BASEINTERFACE
Overrides:
visitInterfaceType in interface Visitor

visitMethod

public Object visitMethod(Method node,
                          Object data)
Method level defaults 1. Add implicit Runtime Exception to every throws list 2. Add default splicer block contents --- at least for the method body. TBD: - What about the default splicer block contents for each F90 method's use?
Overrides:
visitMethod in interface Visitor