From f23dd70dd29ca75712ce425245c6ef1e9c74b6d5 Mon Sep 17 00:00:00 2001 From: Minero Aoki Date: Sun, 26 Apr 2009 08:25:30 +0000 Subject: [PATCH] * 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 --- ChangeLog | 11 +++++++++++ net/loveruby/cflat/compiler/CodeGenerator.java | 7 ++++++- net/loveruby/cflat/compiler/IRGenerator.java | 11 +++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 41f6a80..54f3614 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Sun Apr 26 17:24:42 2009 Minero Aoki + + * 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 * net/loveruby/cflat/compiler/IRGenerator.java: treat LHS diff --git a/net/loveruby/cflat/compiler/CodeGenerator.java b/net/loveruby/cflat/compiler/CodeGenerator.java index 93f374f..73d8df6 100644 --- a/net/loveruby/cflat/compiler/CodeGenerator.java +++ b/net/loveruby/cflat/compiler/CodeGenerator.java @@ -752,7 +752,12 @@ public class CodeGenerator implements ASTVisitor, 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); } diff --git a/net/loveruby/cflat/compiler/IRGenerator.java b/net/loveruby/cflat/compiler/IRGenerator.java index d53f0b3..8dfaf34 100644 --- a/net/loveruby/cflat/compiler/IRGenerator.java +++ b/net/loveruby/cflat/compiler/IRGenerator.java @@ -154,7 +154,7 @@ class IRGenerator implements ASTVisitor { 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 { } 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; }