diff --git a/ChangeLog b/ChangeLog index 2b65703..639d0ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +Tue Feb 12 00:45:47 2008 Minero Aoki + + * net/loveruby/cflat/compiler/TypeResolver.java: extract method + #defineTypes again. + + * net/loveruby/cflat/compiler/TypeResolver.java: define types by + TypeTable#put here. Get typeref and type from TypeDefinition + nodes. + + * net/loveruby/cflat/type/TypeTable.java: remove #define. Use + #put instead. + + * net/loveruby/cflat/ast/TypeDefinition.java: remove #defineIn. + Use #definingType instead. + + * net/loveruby/cflat/ast/StructNode.java: ditto. + + * net/loveruby/cflat/ast/UnionNode.java: ditto. + + * net/loveruby/cflat/ast/TypedefNode.java: ditto. + Tue Feb 12 00:35:37 2008 Minero Aoki * net/loveruby/cflat/type/TypeTable.java: remove deftype methods, diff --git a/net/loveruby/cflat/ast/StructNode.java b/net/loveruby/cflat/ast/StructNode.java index 0d78620..349612e 100644 --- a/net/loveruby/cflat/ast/StructNode.java +++ b/net/loveruby/cflat/ast/StructNode.java @@ -15,10 +15,9 @@ public class StructNode extends ComplexTypeDefinition { return true; } - // #@@range/defineIn{ - public void defineIn(TypeTable table) { - Type type = new StructType(name(), members(), location()); - table.put(typeRef(), type); + // #@@range/definingType{ + public Type definingType() { + return new StructType(name(), members(), location()); } // #@@} diff --git a/net/loveruby/cflat/ast/TypeDefinition.java b/net/loveruby/cflat/ast/TypeDefinition.java index b154ccb..fa49553 100644 --- a/net/loveruby/cflat/ast/TypeDefinition.java +++ b/net/loveruby/cflat/ast/TypeDefinition.java @@ -32,5 +32,5 @@ abstract public class TypeDefinition extends Node { return typeNode.type(); } - abstract public void defineIn(TypeTable table); + abstract public Type definingType(); } diff --git a/net/loveruby/cflat/ast/TypedefNode.java b/net/loveruby/cflat/ast/TypedefNode.java index 00b740e..9c778e7 100644 --- a/net/loveruby/cflat/ast/TypedefNode.java +++ b/net/loveruby/cflat/ast/TypedefNode.java @@ -25,10 +25,9 @@ public class TypedefNode extends TypeDefinition { return real.typeRef(); } - // #@@range/defineIn{ - public void defineIn(TypeTable table) { - Type type = new UserType(name(), realTypeNode(), location()); - table.put(typeRef(), type); + // #@@range/definingType{ + public Type definingType() { + return new UserType(name(), realTypeNode(), location()); } // #@@} diff --git a/net/loveruby/cflat/ast/UnionNode.java b/net/loveruby/cflat/ast/UnionNode.java index 7ca706f..5f79e0e 100644 --- a/net/loveruby/cflat/ast/UnionNode.java +++ b/net/loveruby/cflat/ast/UnionNode.java @@ -15,10 +15,9 @@ public class UnionNode extends ComplexTypeDefinition { return true; } - // #@@range/defineIn{ - public void defineIn(TypeTable table) { - Type type = new UnionType(name(), members(), location()); - table.put(typeRef(), type); + // #@@range/definingType{ + public Type definingType() { + return new UnionType(name(), members(), location()); } // #@@} diff --git a/net/loveruby/cflat/compiler/TypeResolver.java b/net/loveruby/cflat/compiler/TypeResolver.java index ff51d09..e63bde4 100644 --- a/net/loveruby/cflat/compiler/TypeResolver.java +++ b/net/loveruby/cflat/compiler/TypeResolver.java @@ -23,16 +23,19 @@ public class TypeResolver extends Visitor { } public void resolveProgram(AST ast) { - Iterator deftypes = ast.types(); - while (deftypes.hasNext()) { - typeTable.define((TypeDefinition)deftypes.next()); - } - + defineTypes(ast.types()); resolveNodeList(ast.types()); resolveNodeList(ast.declarations()); resolveNodeList(ast.entities()); } + private void defineTypes(Iterator deftypes) { + while (deftypes.hasNext()) { + TypeDefinition def = (TypeDefinition)deftypes.next(); + typeTable.put(def.typeRef(), def.definingType()); + } + } + private void bindType(TypeNode n) { if (n.isResolved()) return; n.setType(typeTable.get(n.typeRef())); diff --git a/net/loveruby/cflat/type/TypeTable.java b/net/loveruby/cflat/type/TypeTable.java index 5af1bb6..13ccca9 100644 --- a/net/loveruby/cflat/type/TypeTable.java +++ b/net/loveruby/cflat/type/TypeTable.java @@ -119,10 +119,6 @@ public class TypeTable { return (IntegerType)table.get(IntegerTypeRef.ulongRef()); } - public void define(TypeDefinition t) { - t.defineIn(this); - } - public PointerType pointerTo(Type baseType) { return new PointerType(pointerSize, baseType); }