* 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.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3897 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
Minero Aoki 2008-02-11 15:46:32 +00:00
parent 52733c96b8
commit 9c50fd7032
7 changed files with 39 additions and 22 deletions

View File

@ -1,3 +1,24 @@
Tue Feb 12 00:45:47 2008 Minero Aoki <aamine@loveruby.net>
* 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 <aamine@loveruby.net>
* net/loveruby/cflat/type/TypeTable.java: remove deftype methods,

View File

@ -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());
}
// #@@}

View File

@ -32,5 +32,5 @@ abstract public class TypeDefinition extends Node {
return typeNode.type();
}
abstract public void defineIn(TypeTable table);
abstract public Type definingType();
}

View File

@ -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());
}
// #@@}

View File

@ -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());
}
// #@@}

View File

@ -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()));

View File

@ -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);
}