[macruby-changes] [1192] MacRuby/branches/experimental/roxor.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Thu Mar 26 18:06:23 PDT 2009
Revision: 1192
http://trac.macosforge.org/projects/ruby/changeset/1192
Author: lsansonetti at apple.com
Date: 2009-03-26 18:06:22 -0700 (Thu, 26 Mar 2009)
Log Message:
-----------
fixed bugs in redo
Modified Paths:
--------------
MacRuby/branches/experimental/roxor.cpp
Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp 2009-03-27 00:24:58 UTC (rev 1191)
+++ MacRuby/branches/experimental/roxor.cpp 2009-03-27 01:06:22 UTC (rev 1192)
@@ -183,6 +183,7 @@
#endif
BasicBlock *bb;
+ BasicBlock *entry_bb;
ID current_mid;
bool current_instance_method;
ID self_id;
@@ -518,6 +519,7 @@
fname = _fname;
bb = NULL;
+ entry_bb = NULL;
begin_bb = NULL;
rescue_bb = NULL;
current_mid = 0;
@@ -2280,9 +2282,10 @@
Function *f = cast<Function>(module->getOrInsertFunction("", ft));
BasicBlock *old_rescue_bb = rescue_bb;
+ BasicBlock *old_entry_bb = entry_bb;
+ BasicBlock *old_bb = bb;
rescue_bb = NULL;
- BasicBlock *old_bb = bb;
- bb = BasicBlock::Create("EntryBlock", f);
+ bb = BasicBlock::Create("MainBlock", f);
std::map<ID, Value *> old_lvars = lvars;
lvars.clear();
@@ -2400,6 +2403,10 @@
Value *val = NULL;
if (node->nd_body != NULL) {
+ entry_bb = BasicBlock::Create("entry_point", f);
+ BranchInst::Create(entry_bb, bb);
+ bb = entry_bb;
+
DEBUG_LEVEL_INC();
val = compile_node(node->nd_body);
DEBUG_LEVEL_DEC();
@@ -2410,6 +2417,7 @@
ReturnInst::Create(val, bb);
bb = old_bb;
+ entry_bb = old_entry_bb;
lvars = old_lvars;
current_self = old_self;
rescue_bb = old_rescue_bb;
@@ -3275,19 +3283,23 @@
if (nd_type(node) == NODE_BREAK) {
if (breakFunc == NULL) {
// void rb_vm_break(VALUE val);
- breakFunc = cast<Function>(module->getOrInsertFunction("rb_vm_break",
+ breakFunc = cast<Function>(
+ module->getOrInsertFunction("rb_vm_break",
Type::VoidTy, RubyObjTy, NULL));
}
std::vector<Value *> params;
params.push_back(val);
- CallInst::Create(breakFunc, params.begin(), params.end(), "", bb);
+ CallInst::Create(breakFunc, params.begin(),
+ params.end(), "", bb);
+ ReturnInst::Create(val, bb);
}
else if (nd_type(node) == NODE_REDO) {
- // TODO
- abort();
+ assert(entry_bb != NULL);
+ BranchInst::Create(entry_bb, bb);
}
-
- ReturnInst::Create(val, bb);
+ else {
+ ReturnInst::Create(val, bb);
+ }
}
compile_dead_branch();
return val;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090326/054d7d28/attachment-0001.html>
More information about the macruby-changes
mailing list