[macruby-changes] [2852] MacRuby/trunk/compiler.cpp

source_changes at macosforge.org source_changes at macosforge.org
Mon Oct 19 15:52:18 PDT 2009


Revision: 2852
          http://trac.macosforge.org/projects/ruby/changeset/2852
Author:   lsansonetti at apple.com
Date:     2009-10-19 15:52:16 -0700 (Mon, 19 Oct 2009)
Log Message:
-----------
revert parts of r2839 because it breaks the gcd spec - strange bug implying exception handlers (sorry vincent)

Revision Links:
--------------
    http://trac.macosforge.org/projects/ruby/changeset/2839

Modified Paths:
--------------
    MacRuby/trunk/compiler.cpp

Modified: MacRuby/trunk/compiler.cpp
===================================================================
--- MacRuby/trunk/compiler.cpp	2009-10-19 19:35:08 UTC (rev 2851)
+++ MacRuby/trunk/compiler.cpp	2009-10-19 22:52:16 UTC (rev 2852)
@@ -58,7 +58,6 @@
     return_from_block_ids = 0;
     ensure_pn = NULL;
     current_scope = NULL;
-    class_declaration = false;
 
     dispatcherFunc = NULL;
     fastPlusFunc = NULL;
@@ -2990,8 +2989,7 @@
 	    {
 		rb_vm_arity_t arity = rb_vm_node_arity(node);
 		const int nargs = bb == NULL ? 0 : arity.real;
-		const bool has_dvars = current_block && current_mid == 0 && !class_declaration;
-		class_declaration = false;
+		const bool has_dvars = current_block && current_mid == 0;
 
 		// Get dynamic vars.
 		if (has_dvars && node->nd_tbl != NULL) {
@@ -3025,13 +3023,14 @@
 		FunctionType *ft = FunctionType::get(RubyObjTy, types, false);
 
 		std::string function_name;
-		if (ruby_aot_compile) {
+ 		if (ruby_aot_compile) {
 		    function_name.append(RSTRING_PTR(ruby_aot_init_func));
 		    function_name.append("_ruby_scope");
-		}
-		else {
+ 		}
+ 		else {
 		    function_name.append("__ruby_scope");
-		}
+ 		}
+
 		Function *f = Function::Create(ft, GlobalValue::ExternalLinkage,
 			function_name, module);
 
@@ -3893,6 +3892,11 @@
 		NODE *body = node->nd_body;
 		if (body != NULL) {
 		    assert(nd_type(body) == NODE_SCOPE);
+		    ID *tbl = body->nd_tbl;
+		    if (tbl != NULL) {
+			const int args_count = (int)tbl[0];
+			compile_lvars(&tbl[args_count + 1]);
+		    }
 		    if (body->nd_body != NULL) {	
 			Value *old_self = current_self;
 			current_self = classVal;
@@ -3903,12 +3907,7 @@
 				GlobalValue::InternalLinkage, nilVal, "");
 
 			bool old_current_module = current_module;
-			bool old_current_block_chain = current_block_chain;
-			bool old_dynamic_class = dynamic_class;
 
-			current_block_chain = false;
-			dynamic_class = false;
-
 			std::map<ID, Value *> old_ivar_slots_cache
 			    = ivar_slots_cache;
 			ivar_slots_cache.clear();
@@ -3918,18 +3917,11 @@
 			current_module = nd_type(node) == NODE_MODULE;
 
 			compile_set_current_scope(classVal, publicScope);
+			bool old_dynamic_class = dynamic_class;
+			dynamic_class = false;
 
-			DEBUG_LEVEL_INC();
-			class_declaration = true;
-			Value *val = compile_node(body);
-			Function *f = cast<Function>(val);
-			DEBUG_LEVEL_DEC();
+			Value *val = compile_node(body->nd_body);
 
-			std::vector<Value *> params;
-			params.push_back(classVal);
-			params.push_back(compile_const_pointer(NULL));
-			val = compile_protected_call(f, params);
-
 			dynamic_class = old_dynamic_class;
 			compile_set_current_scope(classVal, defaultScope);
 
@@ -3939,7 +3931,6 @@
 			current_self = old_self;
 			current_opened_class = old_class;
 			current_module = old_current_module;
-			current_block_chain = old_current_block_chain;
 
 			ivar_slots_cache = old_ivar_slots_cache;
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091019/3a0e276c/attachment.html>


More information about the macruby-changes mailing list