r4903@macbookpro: aamine | 2009-05-24 19:22:57 +0900

* net/loveruby/cflat/compiler/TypeResolver.java: now 3 pathes (define, resolve entities, resolve expr) are not required; just use old 2 pathes (define, resolve).  Old TypeResolver fixed a type of AddressNode, it requires 3 path.  But current implementation fixes a type of AddressNode in DereferenceChecker, we do not need 3 path.
 * net/loveruby/cflat/ast/AST.java: #entities -> #definitions.
 * net/loveruby/cflat/ast/AST.java: new method #entities, it returns #definitions + #declarations.
 * net/loveruby/cflat/compiler/TypeResolver.java: follow it.
 * net/loveruby/cflat/compiler/LocalResolver.java: follow it.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4239 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
Minero Aoki 2009-05-24 10:23:12 +00:00
parent bdfc0de55c
commit bfacf5e6c1
4 changed files with 36 additions and 23 deletions

View File

@ -1,3 +1,21 @@
Sun May 24 19:23:28 2009 Minero Aoki <aamine@loveruby.net>
* net/loveruby/cflat/compiler/TypeResolver.java: now 3 pathes
(define, resolve entities, resolve expr) are not required; just
use old 2 pathes (define, resolve). Old TypeResolver fixed a type
of AddressNode, it requires 3 path. But current implementation
fixes a type of AddressNode in DereferenceChecker, we do not need
3 path.
* net/loveruby/cflat/ast/AST.java: #entities -> #definitions.
* net/loveruby/cflat/ast/AST.java: new method #entities, it
returns #definitions + #declarations.
* net/loveruby/cflat/compiler/TypeResolver.java: follow it.
* net/loveruby/cflat/compiler/LocalResolver.java: follow it.
Sun May 24 11:58:15 2009 Minero Aoki <aamine@loveruby.net>
* net/loveruby/cflat/compiler/IRGenerator.java (If): refactoring:

View File

@ -29,6 +29,16 @@ public class AST extends Node {
return result;
}
public List<Entity> entities() {
List<Entity> result = new ArrayList<Entity>();
result.addAll(declarations.funcdecls);
result.addAll(declarations.vardecls);
result.addAll(declarations.defvars);
result.addAll(declarations.defuns);
result.addAll(declarations.constants);
return result;
}
public List<Entity> declarations() {
List<Entity> result = new ArrayList<Entity>();
result.addAll(declarations.funcdecls);
@ -36,7 +46,7 @@ public class AST extends Node {
return result;
}
public List<Entity> entities() {
public List<Entity> definitions() {
List<Entity> result = new ArrayList<Entity>();
result.addAll(declarations.defvars);
result.addAll(declarations.defuns);

View File

@ -35,7 +35,7 @@ public class LocalResolver extends Visitor {
for (Entity decl : ast.declarations()) {
toplevel.declareEntity(decl);
}
for (Entity ent : ast.entities()) {
for (Entity ent : ast.definitions()) {
toplevel.defineEntity(ent);
}
// #@@}

View File

@ -25,24 +25,9 @@ public class TypeResolver extends Visitor
for (TypeDefinition t : ast.types()) {
t.accept(this);
}
for (Entity d : ast.declarations()) {
d.accept(this);
}
for (Entity e : ast.entities()) {
e.accept(this);
}
for (DefinedVariable var : ast.definedVariables()) {
if (var.hasInitializer()) {
visitExpr(var.initializer());
}
}
for (Constant c : ast.constants()) {
visitExpr(c.value());
}
for (DefinedFunction f : ast.definedFunctions()) {
visitStmt(f.body());
}
// #@@}
}
// #@@}
@ -112,6 +97,9 @@ public class TypeResolver extends Visitor
// #@@range/DefinedVariable{
public Void visit(DefinedVariable var) {
bindType(var.typeNode());
if (var.hasInitializer()) {
visitExpr(var.initializer());
}
return null;
}
// #@@}
@ -123,12 +111,14 @@ public class TypeResolver extends Visitor
public Void visit(Constant c) {
bindType(c.typeNode());
visitExpr(c.value());
return null;
}
// #@@range/DefinedFunction{
public Void visit(DefinedFunction func) {
resolveFunctionHeader(func);
visitStmt(func.body());
return null;
}
// #@@}
@ -155,12 +145,7 @@ public class TypeResolver extends Visitor
public Void visit(BlockNode node) {
for (DefinedVariable var : node.variables()) {
bindType(var.typeNode());
}
for (DefinedVariable var : node.variables()) {
if (var.hasInitializer()) {
visitExpr(var.initializer());
}
var.accept(this);
}
visitStmts(node.stmts());
return null;