mirror of https://github.com/aamine/cbc
* 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:
parent
52733c96b8
commit
9c50fd7032
21
ChangeLog
21
ChangeLog
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
// #@@}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,5 +32,5 @@ abstract public class TypeDefinition extends Node {
|
|||
return typeNode.type();
|
||||
}
|
||||
|
||||
abstract public void defineIn(TypeTable table);
|
||||
abstract public Type definingType();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
// #@@}
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
// #@@}
|
||||
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue