mirror of https://github.com/aamine/cbc
* net/loveruby/cflat/compiler/Visitor.java: make all return types generic.
* net/loveruby/cflat/compiler/TypeChecker.java: ditto. * net/loveruby/cflat/ast/*.java: ditto. git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4132 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
parent
33dcef983b
commit
d514300aef
|
@ -1,3 +1,12 @@
|
||||||
|
Sun Apr 12 15:31:07 2009 Minero Aoki <aamine@loveruby.net>
|
||||||
|
|
||||||
|
* net/loveruby/cflat/compiler/Visitor.java: make all return types
|
||||||
|
generic.
|
||||||
|
|
||||||
|
* net/loveruby/cflat/compiler/TypeChecker.java: ditto.
|
||||||
|
|
||||||
|
* net/loveruby/cflat/ast/*.java: ditto.
|
||||||
|
|
||||||
Mon Apr 6 07:04:30 2009 Minero Aoki <aamine@loveruby.net>
|
Mon Apr 6 07:04:30 2009 Minero Aoki <aamine@loveruby.net>
|
||||||
|
|
||||||
* net/loveruby/cflat/compiler/Compiler.java: call JumpResolver at
|
* net/loveruby/cflat/compiler/Compiler.java: call JumpResolver at
|
||||||
|
|
|
@ -1,50 +1,50 @@
|
||||||
package net.loveruby.cflat.ast;
|
package net.loveruby.cflat.ast;
|
||||||
|
|
||||||
public interface ASTVisitor {
|
public interface ASTVisitor<S, E> {
|
||||||
// Declarations
|
// Declarations
|
||||||
public DefinedVariable visit(DefinedVariable var);
|
public S visit(DefinedVariable var);
|
||||||
public UndefinedVariable visit(UndefinedVariable var);
|
public S visit(UndefinedVariable var);
|
||||||
public DefinedFunction visit(DefinedFunction func);
|
public S visit(DefinedFunction func);
|
||||||
public UndefinedFunction visit(UndefinedFunction func);
|
public S visit(UndefinedFunction func);
|
||||||
public StructNode visit(StructNode struct);
|
public S visit(StructNode struct);
|
||||||
public UnionNode visit(UnionNode union);
|
public S visit(UnionNode union);
|
||||||
public TypedefNode visit(TypedefNode typedef);
|
public S visit(TypedefNode typedef);
|
||||||
|
|
||||||
// Statements
|
// Statements
|
||||||
public BlockNode visit(BlockNode node);
|
public S visit(BlockNode node);
|
||||||
public ExprStmtNode visit(ExprStmtNode node);
|
public S visit(ExprStmtNode node);
|
||||||
public IfNode visit(IfNode node);
|
public S visit(IfNode node);
|
||||||
public SwitchNode visit(SwitchNode node);
|
public S visit(SwitchNode node);
|
||||||
public CaseNode visit(CaseNode node);
|
public S visit(CaseNode node);
|
||||||
public WhileNode visit(WhileNode node);
|
public S visit(WhileNode node);
|
||||||
public DoWhileNode visit(DoWhileNode node);
|
public S visit(DoWhileNode node);
|
||||||
public ForNode visit(ForNode node);
|
public S visit(ForNode node);
|
||||||
public BreakNode visit(BreakNode node);
|
public S visit(BreakNode node);
|
||||||
public ContinueNode visit(ContinueNode node);
|
public S visit(ContinueNode node);
|
||||||
public GotoNode visit(GotoNode node);
|
public S visit(GotoNode node);
|
||||||
public LabelNode visit(LabelNode node);
|
public S visit(LabelNode node);
|
||||||
public ReturnNode visit(ReturnNode node);
|
public S visit(ReturnNode node);
|
||||||
|
|
||||||
// Expressions
|
// Expressions
|
||||||
public AssignNode visit(AssignNode node);
|
public E visit(AssignNode node);
|
||||||
public OpAssignNode visit(OpAssignNode node);
|
public E visit(OpAssignNode node);
|
||||||
public CondExprNode visit(CondExprNode node);
|
public E visit(CondExprNode node);
|
||||||
public LogicalOrNode visit(LogicalOrNode node);
|
public E visit(LogicalOrNode node);
|
||||||
public LogicalAndNode visit(LogicalAndNode node);
|
public E visit(LogicalAndNode node);
|
||||||
public BinaryOpNode visit(BinaryOpNode node);
|
public E visit(BinaryOpNode node);
|
||||||
public UnaryOpNode visit(UnaryOpNode node);
|
public E visit(UnaryOpNode node);
|
||||||
public PrefixOpNode visit(PrefixOpNode node);
|
public E visit(PrefixOpNode node);
|
||||||
public SuffixOpNode visit(SuffixOpNode node);
|
public E visit(SuffixOpNode node);
|
||||||
public ArefNode visit(ArefNode node);
|
public E visit(ArefNode node);
|
||||||
public MemberNode visit(MemberNode node);
|
public E visit(MemberNode node);
|
||||||
public PtrMemberNode visit(PtrMemberNode node);
|
public E visit(PtrMemberNode node);
|
||||||
public FuncallNode visit(FuncallNode node);
|
public E visit(FuncallNode node);
|
||||||
public DereferenceNode visit(DereferenceNode node);
|
public E visit(DereferenceNode node);
|
||||||
public AddressNode visit(AddressNode node);
|
public E visit(AddressNode node);
|
||||||
public CastNode visit(CastNode node);
|
public E visit(CastNode node);
|
||||||
public SizeofExprNode visit(SizeofExprNode node);
|
public E visit(SizeofExprNode node);
|
||||||
public SizeofTypeNode visit(SizeofTypeNode node);
|
public E visit(SizeofTypeNode node);
|
||||||
public VariableNode visit(VariableNode node);
|
public E visit(VariableNode node);
|
||||||
public IntegerLiteralNode visit(IntegerLiteralNode node);
|
public E visit(IntegerLiteralNode node);
|
||||||
public StringLiteralNode visit(StringLiteralNode node);
|
public E visit(StringLiteralNode node);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class AddressNode extends UnaryOpNode {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AddressNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class ArefNode extends ExprNode {
|
||||||
d.printMember("index", index);
|
d.printMember("index", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArefNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ public class AssignNode extends AbstractAssignNode {
|
||||||
super(lhs, rhs);
|
super(lhs, rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssignNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class BinaryOpNode extends ExprNode {
|
||||||
d.printMember("right", right);
|
d.printMember("right", right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BinaryOpNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ public class BlockNode extends StmtNode {
|
||||||
d.printNodeList("stmts", stmts);
|
d.printNodeList("stmts", stmts);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class BreakNode extends StmtNode {
|
||||||
protected void _dump(Dumper d) {
|
protected void _dump(Dumper d) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public BreakNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class CaseNode extends StmtNode {
|
||||||
d.printMember("body", body);
|
d.printMember("body", body);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CaseNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class CastNode extends ExprNode {
|
||||||
d.printMember("expr", expr);
|
d.printMember("expr", expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CastNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class CondExprNode extends ExprNode {
|
||||||
d.printMember("elseExpr", elseExpr);
|
d.printMember("elseExpr", elseExpr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CondExprNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class ContinueNode extends StmtNode {
|
||||||
protected void _dump(Dumper d) {
|
protected void _dump(Dumper d) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContinueNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class DefinedFunction extends Function {
|
||||||
d.printMember("body", body);
|
d.printMember("body", body);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DefinedFunction accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class DefinedVariable extends Variable {
|
||||||
d.printMember("initializer", initializer);
|
d.printMember("initializer", initializer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DefinedVariable accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ public class DereferenceNode extends UnaryOpNode {
|
||||||
public boolean isAssignable() { return true; }
|
public boolean isAssignable() { return true; }
|
||||||
public boolean isConstantAddress() { return false; }
|
public boolean isConstantAddress() { return false; }
|
||||||
|
|
||||||
public DereferenceNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class DoWhileNode extends LoopNode {
|
||||||
d.printMember("cond", cond);
|
d.printMember("cond", cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DoWhileNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,5 +90,5 @@ abstract public class Entity extends Node {
|
||||||
return typeNode.location();
|
return typeNode.location();
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public Entity accept(ASTVisitor visitor);
|
abstract public <S,E> S accept(ASTVisitor<S,E> visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,5 +62,5 @@ abstract public class ExprNode extends Node {
|
||||||
throw new Error("ExprNode#memref called");
|
throw new Error("ExprNode#memref called");
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public ExprNode accept(ASTVisitor visitor);
|
abstract public <S,E> E accept(ASTVisitor<S,E> visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class ExprStmtNode extends StmtNode {
|
||||||
d.printMember("expr", expr);
|
d.printMember("expr", expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExprStmtNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class ForNode extends LoopNode {
|
||||||
d.printMember("body", body);
|
d.printMember("body", body);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ForNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ public class FuncallNode extends ExprNode {
|
||||||
d.printNodeList("arguments", arguments);
|
d.printNodeList("arguments", arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FuncallNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class GotoNode extends StmtNode {
|
||||||
d.printMember("target", target);
|
d.printMember("target", target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GotoNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class IfNode extends StmtNode {
|
||||||
d.printMember("elseBody", elseBody);
|
d.printMember("elseBody", elseBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IfNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class IntegerLiteralNode extends LiteralNode {
|
||||||
d.printMember("value", value);
|
d.printMember("value", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntegerLiteralNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class LabelNode extends StmtNode {
|
||||||
d.printMember("stmt", stmt);
|
d.printMember("stmt", stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LabelNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ public class LogicalAndNode extends BinaryOpNode {
|
||||||
this.endLabel = new Label();
|
this.endLabel = new Label();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LogicalAndNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ public class LogicalOrNode extends BinaryOpNode {
|
||||||
this.endLabel = new Label();
|
this.endLabel = new Label();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LogicalOrNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class MemberNode extends ExprNode {
|
||||||
d.printMember("member", member);
|
d.printMember("member", member);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MemberNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ public class OpAssignNode extends AbstractAssignNode {
|
||||||
return operator;
|
return operator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OpAssignNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ public class PrefixOpNode extends UnaryArithmeticOpNode {
|
||||||
super(op, expr);
|
super(op, expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrefixOpNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ public class PtrMemberNode extends ExprNode {
|
||||||
d.printMember("member", member);
|
d.printMember("member", member);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PtrMemberNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class ReturnNode extends StmtNode {
|
||||||
d.printMember("expr", expr);
|
d.printMember("expr", expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReturnNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class SizeofExprNode extends ExprNode {
|
||||||
d.printMember("expr", expr);
|
d.printMember("expr", expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SizeofExprNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class SizeofTypeNode extends ExprNode {
|
||||||
d.printMember("operand", type);
|
d.printMember("operand", type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SizeofTypeNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,5 +11,5 @@ abstract public class StmtNode extends Node {
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public StmtNode accept(ASTVisitor visitor);
|
abstract public <S,E> S accept(ASTVisitor<S,E> visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class StringLiteralNode extends LiteralNode {
|
||||||
d.printMember("value", value);
|
d.printMember("value", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringLiteralNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ public class StructNode extends CompositeTypeDefinition {
|
||||||
}
|
}
|
||||||
// #@@}
|
// #@@}
|
||||||
|
|
||||||
public StructNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ public class SuffixOpNode extends UnaryArithmeticOpNode {
|
||||||
super(op, expr);
|
super(op, expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SuffixOpNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class SwitchNode extends StmtNode implements BreakableStmt {
|
||||||
d.printNodeList("cases", cases);
|
d.printNodeList("cases", cases);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SwitchNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,5 +33,5 @@ abstract public class TypeDefinition extends Node {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract public Type definingType();
|
abstract public Type definingType();
|
||||||
abstract public TypeDefinition accept(ASTVisitor visitor);
|
abstract public <S,E> S accept(ASTVisitor<S,E> visitor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class TypedefNode extends TypeDefinition {
|
||||||
d.printMember("typeNode", typeNode);
|
d.printMember("typeNode", typeNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TypedefNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class UnaryOpNode extends ExprNode {
|
||||||
d.printMember("expr", expr);
|
d.printMember("expr", expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UnaryOpNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class UndefinedFunction extends Function {
|
||||||
d.printMember("params", params);
|
d.printMember("params", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UndefinedFunction accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class UndefinedVariable extends Variable {
|
||||||
d.printMember("typeNode", typeNode);
|
d.printMember("typeNode", typeNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UndefinedVariable accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ public class UnionNode extends CompositeTypeDefinition {
|
||||||
}
|
}
|
||||||
// #@@}
|
// #@@}
|
||||||
|
|
||||||
public UnionNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ public class VariableNode extends ExprNode {
|
||||||
d.printMember("name", name, isResolved());
|
d.printMember("name", name, isResolved());
|
||||||
}
|
}
|
||||||
|
|
||||||
public VariableNode accept(ASTVisitor visitor) {
|
public <S,E> E accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class WhileNode extends LoopNode {
|
||||||
d.printMember("body", body);
|
d.printMember("body", body);
|
||||||
}
|
}
|
||||||
|
|
||||||
public WhileNode accept(ASTVisitor visitor) {
|
public <S,E> S accept(ASTVisitor<S,E> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import net.loveruby.cflat.type.*;
|
||||||
import net.loveruby.cflat.exception.*;
|
import net.loveruby.cflat.exception.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
class TypeChecker implements ASTVisitor {
|
class TypeChecker implements ASTVisitor<Node, ExprNode> {
|
||||||
protected TypeTable typeTable;
|
protected TypeTable typeTable;
|
||||||
protected ErrorHandler errorHandler;
|
protected ErrorHandler errorHandler;
|
||||||
private DefinedFunction currentFunction;
|
private DefinedFunction currentFunction;
|
||||||
|
|
|
@ -2,7 +2,7 @@ package net.loveruby.cflat.compiler;
|
||||||
import net.loveruby.cflat.ast.*;
|
import net.loveruby.cflat.ast.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
abstract public class Visitor implements ASTVisitor {
|
abstract public class Visitor implements ASTVisitor<Node, ExprNode> {
|
||||||
public Visitor() {
|
public Visitor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,34 +228,34 @@ abstract public class Visitor implements ASTVisitor {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AddressNode visit(AddressNode node) {
|
public ExprNode visit(AddressNode node) {
|
||||||
visitExpr(node.expr());
|
visitExpr(node.expr());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CastNode visit(CastNode node) {
|
public ExprNode visit(CastNode node) {
|
||||||
visitExpr(node.expr());
|
visitExpr(node.expr());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SizeofExprNode visit(SizeofExprNode node) {
|
public ExprNode visit(SizeofExprNode node) {
|
||||||
visitExpr(node.expr());
|
visitExpr(node.expr());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SizeofTypeNode visit(SizeofTypeNode node) {
|
public ExprNode visit(SizeofTypeNode node) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public VariableNode visit(VariableNode node) {
|
public ExprNode visit(VariableNode node) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntegerLiteralNode visit(IntegerLiteralNode node) {
|
public ExprNode visit(IntegerLiteralNode node) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringLiteralNode visit(StringLiteralNode node) {
|
public ExprNode visit(StringLiteralNode node) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue