mirror of https://github.com/aamine/cbc
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:
parent
bdfc0de55c
commit
bfacf5e6c1
18
ChangeLog
18
ChangeLog
|
@ -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>
|
Sun May 24 11:58:15 2009 Minero Aoki <aamine@loveruby.net>
|
||||||
|
|
||||||
* net/loveruby/cflat/compiler/IRGenerator.java (If): refactoring:
|
* net/loveruby/cflat/compiler/IRGenerator.java (If): refactoring:
|
||||||
|
|
|
@ -29,6 +29,16 @@ public class AST extends Node {
|
||||||
return result;
|
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() {
|
public List<Entity> declarations() {
|
||||||
List<Entity> result = new ArrayList<Entity>();
|
List<Entity> result = new ArrayList<Entity>();
|
||||||
result.addAll(declarations.funcdecls);
|
result.addAll(declarations.funcdecls);
|
||||||
|
@ -36,7 +46,7 @@ public class AST extends Node {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Entity> entities() {
|
public List<Entity> definitions() {
|
||||||
List<Entity> result = new ArrayList<Entity>();
|
List<Entity> result = new ArrayList<Entity>();
|
||||||
result.addAll(declarations.defvars);
|
result.addAll(declarations.defvars);
|
||||||
result.addAll(declarations.defuns);
|
result.addAll(declarations.defuns);
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class LocalResolver extends Visitor {
|
||||||
for (Entity decl : ast.declarations()) {
|
for (Entity decl : ast.declarations()) {
|
||||||
toplevel.declareEntity(decl);
|
toplevel.declareEntity(decl);
|
||||||
}
|
}
|
||||||
for (Entity ent : ast.entities()) {
|
for (Entity ent : ast.definitions()) {
|
||||||
toplevel.defineEntity(ent);
|
toplevel.defineEntity(ent);
|
||||||
}
|
}
|
||||||
// #@@}
|
// #@@}
|
||||||
|
|
|
@ -25,24 +25,9 @@ public class TypeResolver extends Visitor
|
||||||
for (TypeDefinition t : ast.types()) {
|
for (TypeDefinition t : ast.types()) {
|
||||||
t.accept(this);
|
t.accept(this);
|
||||||
}
|
}
|
||||||
for (Entity d : ast.declarations()) {
|
|
||||||
d.accept(this);
|
|
||||||
}
|
|
||||||
for (Entity e : ast.entities()) {
|
for (Entity e : ast.entities()) {
|
||||||
e.accept(this);
|
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{
|
// #@@range/DefinedVariable{
|
||||||
public Void visit(DefinedVariable var) {
|
public Void visit(DefinedVariable var) {
|
||||||
bindType(var.typeNode());
|
bindType(var.typeNode());
|
||||||
|
if (var.hasInitializer()) {
|
||||||
|
visitExpr(var.initializer());
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// #@@}
|
// #@@}
|
||||||
|
@ -123,12 +111,14 @@ public class TypeResolver extends Visitor
|
||||||
|
|
||||||
public Void visit(Constant c) {
|
public Void visit(Constant c) {
|
||||||
bindType(c.typeNode());
|
bindType(c.typeNode());
|
||||||
|
visitExpr(c.value());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// #@@range/DefinedFunction{
|
// #@@range/DefinedFunction{
|
||||||
public Void visit(DefinedFunction func) {
|
public Void visit(DefinedFunction func) {
|
||||||
resolveFunctionHeader(func);
|
resolveFunctionHeader(func);
|
||||||
|
visitStmt(func.body());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// #@@}
|
// #@@}
|
||||||
|
@ -155,12 +145,7 @@ public class TypeResolver extends Visitor
|
||||||
|
|
||||||
public Void visit(BlockNode node) {
|
public Void visit(BlockNode node) {
|
||||||
for (DefinedVariable var : node.variables()) {
|
for (DefinedVariable var : node.variables()) {
|
||||||
bindType(var.typeNode());
|
var.accept(this);
|
||||||
}
|
|
||||||
for (DefinedVariable var : node.variables()) {
|
|
||||||
if (var.hasInitializer()) {
|
|
||||||
visitExpr(var.initializer());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
visitStmts(node.stmts());
|
visitStmts(node.stmts());
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in New Issue