package sizzle.compiler; import java.util.ArrayList; import java.util.List; import sizzle.parser.syntaxtree.ArrayType; import sizzle.parser.syntaxtree.Assignment; import sizzle.parser.syntaxtree.Block; import sizzle.parser.syntaxtree.BreakStatement; import sizzle.parser.syntaxtree.BytesLiteral; import sizzle.parser.syntaxtree.Call; import sizzle.parser.syntaxtree.CharLiteral; import sizzle.parser.syntaxtree.Comparison; import sizzle.parser.syntaxtree.Component; import sizzle.parser.syntaxtree.Composite; import sizzle.parser.syntaxtree.Conjunction; import sizzle.parser.syntaxtree.ContinueStatement; import sizzle.parser.syntaxtree.Declaration; import sizzle.parser.syntaxtree.DoStatement; import sizzle.parser.syntaxtree.EmitStatement; import sizzle.parser.syntaxtree.ExprList; import sizzle.parser.syntaxtree.ExprStatement; import sizzle.parser.syntaxtree.Expression; import sizzle.parser.syntaxtree.Factor; import sizzle.parser.syntaxtree.FingerprintLiteral; import sizzle.parser.syntaxtree.FloatingPointLiteral; import sizzle.parser.syntaxtree.ForStatement; import sizzle.parser.syntaxtree.Function; import sizzle.parser.syntaxtree.FunctionType; import sizzle.parser.syntaxtree.Identifier; import sizzle.parser.syntaxtree.IdentifierList; import sizzle.parser.syntaxtree.IfStatement; import sizzle.parser.syntaxtree.Index; import sizzle.parser.syntaxtree.IntegerLiteral; import sizzle.parser.syntaxtree.MapType; import sizzle.parser.syntaxtree.Operand; import sizzle.parser.syntaxtree.OutputType; import sizzle.parser.syntaxtree.Pair; import sizzle.parser.syntaxtree.PairList; import sizzle.parser.syntaxtree.Program; import sizzle.parser.syntaxtree.ProtoFieldDecl; import sizzle.parser.syntaxtree.ProtoMember; import sizzle.parser.syntaxtree.ProtoMemberList; import sizzle.parser.syntaxtree.ProtoTupleType; import sizzle.parser.syntaxtree.Regexp; import sizzle.parser.syntaxtree.RegexpList; import sizzle.parser.syntaxtree.ResultStatement; import sizzle.parser.syntaxtree.ReturnStatement; import sizzle.parser.syntaxtree.Selector; import sizzle.parser.syntaxtree.SimpleExpr; import sizzle.parser.syntaxtree.SimpleMember; import sizzle.parser.syntaxtree.SimpleMemberList; import sizzle.parser.syntaxtree.SimpleTupleType; import sizzle.parser.syntaxtree.Start; import sizzle.parser.syntaxtree.Statement; import sizzle.parser.syntaxtree.StatementExpr; import sizzle.parser.syntaxtree.StaticVarDecl; import sizzle.parser.syntaxtree.StringLiteral; import sizzle.parser.syntaxtree.SwitchStatement; import sizzle.parser.syntaxtree.Term; import sizzle.parser.syntaxtree.TimeLiteral; import sizzle.parser.syntaxtree.TupleType; import sizzle.parser.syntaxtree.Type; import sizzle.parser.syntaxtree.TypeDecl; import sizzle.parser.syntaxtree.VarDecl; import sizzle.parser.syntaxtree.WhenStatement; import sizzle.parser.syntaxtree.WhileStatement; import sizzle.parser.visitor.GJDepthFirst; import sizzle.types.SizzleFunction; import sizzle.types.SizzleType; public class FunctionFindingVisitor extends GJDepthFirst<SizzleFunction, SymbolTable> { private final List<SizzleType> formalParameters; public FunctionFindingVisitor() { this(new ArrayList<SizzleType>()); } public FunctionFindingVisitor(final List<SizzleType> formalParameters) { this.formalParameters = formalParameters; } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Start n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Program n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Declaration n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final TypeDecl n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final StaticVarDecl n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final VarDecl n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Type n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Component n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ArrayType n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final TupleType n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final SimpleTupleType n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final SimpleMemberList n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final SimpleMember n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ProtoTupleType n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ProtoMemberList n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ProtoMember n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ProtoFieldDecl n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final MapType n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final OutputType n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ExprList n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final FunctionType n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Statement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Assignment n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Block n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final BreakStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ContinueStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final DoStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final EmitStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ExprStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ForStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final IfStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ResultStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final ReturnStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final SwitchStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final WhenStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final IdentifierList n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final WhileStatement n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Expression n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Conjunction n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Comparison n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final SimpleExpr n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Term n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Factor n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Selector n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Index n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Call n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final RegexpList n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Regexp n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Operand n, final SymbolTable argu) { return n.f0.accept(this, argu); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Composite n, final SymbolTable argu) { if (n.f1.present()) return n.f1.accept(this, argu); return null; } /** {@inheritDoc} */ @Override public SizzleFunction visit(final PairList n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Pair n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Function n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final StatementExpr n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final Identifier n, final SymbolTable argu) { final String id = n.f0.tokenImage; return argu.getFunction(id, this.formalParameters); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final IntegerLiteral n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final FingerprintLiteral n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final FloatingPointLiteral n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final CharLiteral n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final StringLiteral n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final BytesLiteral n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } /** {@inheritDoc} */ @Override public SizzleFunction visit(final TimeLiteral n, final SymbolTable argu) { throw new RuntimeException("unimplemented"); } }