public void visitConstructor(Constructor aConstructor) { out.print("Constructor("); ++indentLevel; out.println(); printIndent(); out.print("opnames="); if (aConstructor.getOpnames() != null) { out.println("["); ++indentLevel; for (OpName e : aConstructor.getOpnames()) { printIndent(); e.visit(this); } --indentLevel; printIndent(); out.println("]"); } else { out.println("null"); } printIndent(); out.print("operands="); if (aConstructor.getOperands() != null) { out.println("["); ++indentLevel; for (Operand e : aConstructor.getOperands()) { printIndent(); e.visit(this); } --indentLevel; printIndent(); out.println("]"); } else { out.println("null"); } printIndent(); out.print("type="); if (aConstructor.getType() != null) { aConstructor.getType().visit(this); } else { out.println("null"); } printIndent(); out.print("branches="); if (aConstructor.getBranches() != null) { out.println("["); ++indentLevel; for (Branch e : aConstructor.getBranches()) { printIndent(); e.visit(this); } --indentLevel; printIndent(); out.println("]"); } else { out.println("null"); } --indentLevel; printIndent(); out.println(")"); }
/** @see jaskell.compiler.JaskellVisitor#visit(Constructor) */ public Object visit(Constructor a) { Type ret = a.getType(); if (ret != null) return ret; String vname = a.getName(); ConstructorDefinition def = (ConstructorDefinition) a.lookup(vname); if (def == null) // unknown symbol throw new CompilerException("Unknown constructor " + vname); ret = new TypeInstantiator(def.getType()).instance(); a.setType(ret); return ret; }