* net/loveruby/cflat/compiler/IRGenerator.java: must compile initializer.

* net/loveruby/cflat/compiler/IRGenerator.java: f = &puts generated addr(addr(puts)), so remove redundant AddressNode.
* net/loveruby/cflat/compiler/CodeGenerator.java: now --verbose-asm works.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4151 1b9489fe-b721-0410-924e-b54b9192deb8
This commit is contained in:
Minero Aoki 2009-04-26 08:25:30 +00:00
parent 41e5e61c16
commit f23dd70dd2
3 changed files with 26 additions and 3 deletions

View File

@ -1,3 +1,14 @@
Sun Apr 26 17:24:42 2009 Minero Aoki <aamine@loveruby.net>
* net/loveruby/cflat/compiler/IRGenerator.java: must compile
initializer.
* net/loveruby/cflat/compiler/IRGenerator.java: f = &puts
generated addr(addr(puts)), so remove redundant AddressNode.
* net/loveruby/cflat/compiler/CodeGenerator.java: now
--verbose-asm works.
Sun Apr 26 16:51:02 2009 Minero Aoki <aamine@loveruby.net>
* net/loveruby/cflat/compiler/IRGenerator.java: treat LHS

View File

@ -752,7 +752,12 @@ public class CodeGenerator implements ASTVisitor<Void,Void>, ELFConstants {
// #@@range/compileStmt{
protected void compileStmt(StmtNode node) {
if (options.isVerboseAsm()) {
comment(node.location().numberedLine());
if (node.location() == null) {
comment("(null)");
}
else {
comment(node.location().numberedLine());
}
}
node.accept(this);
}

View File

@ -154,7 +154,7 @@ class IRGenerator implements ASTVisitor<Void, ExprNode> {
public Void visit(BlockNode node) {
for (DefinedVariable var : node.variables()) {
if (var.initializer() != null) {
assign(var.location(), ref(var), var.initializer());
assign(var.location(), ref(var), transform(var.initializer()));
}
}
scopeStack.add(node.scope());
@ -612,7 +612,14 @@ class IRGenerator implements ASTVisitor<Void, ExprNode> {
}
public ExprNode visit(AddressNode node) {
node.setExpr(transform(node.expr()));
ExprNode e = transform(node.expr());
if (node.expr().shouldEvaluatedToAddress()
&& e instanceof AddressNode) {
node.setExpr(((AddressNode)e).expr());
}
else {
node.setExpr(e);
}
return node;
}