Revision: 1208 http://trac.macosforge.org/projects/ruby/changeset/1208 Author: lsansonetti@apple.com Date: 2009-03-27 12:17:09 -0700 (Fri, 27 Mar 2009) Log Message: ----------- implemented the compiler side of 'undef' Modified Paths: -------------- MacRuby/branches/experimental/roxor.cpp Modified: MacRuby/branches/experimental/roxor.cpp =================================================================== --- MacRuby/branches/experimental/roxor.cpp 2009-03-27 19:01:45 UTC (rev 1207) +++ MacRuby/branches/experimental/roxor.cpp 2009-03-27 19:17:09 UTC (rev 1208) @@ -214,6 +214,7 @@ Function *getIvarFunc; Function *setIvarFunc; Function *definedFunc; + Function *undefFunc; Function *aliasFunc; Function *valiasFunc; Function *newHashFunc; @@ -550,6 +551,7 @@ getIvarFunc = NULL; setIvarFunc = NULL; definedFunc = NULL; + undefFunc = NULL; aliasFunc = NULL; valiasFunc = NULL; newHashFunc = NULL; @@ -3725,6 +3727,29 @@ } break; + case NODE_UNDEF: + { + if (undefFunc == NULL) { + // VALUE rb_vm_undef(VALUE klass, ID name); + undefFunc = + cast<Function>(module->getOrInsertFunction( + "rb_vm_undef", + Type::VoidTy, RubyObjTy, IntTy, NULL)); + } + + assert(node->u2.node != NULL); + ID name = node->u2.node->u1.id; + + std::vector<Value *> params; + params.push_back(compile_current_class()); + params.push_back(ConstantInt::get(IntTy, name)); + + compile_protected_call(undefFunc, params); + + return nilVal; + } + break; + case NODE_TRUE: return trueVal; @@ -4538,6 +4563,17 @@ } extern "C" +void +rb_vm_undef(VALUE klass, ID name) +{ + if (GET_VM()->current_class != NULL) { + klass = (VALUE)GET_VM()->current_class; + } + + rb_undef(klass, name); +} + +extern "C" VALUE rb_vm_defined(VALUE self, int type, VALUE what, VALUE what2) {
participants (1)
-
source_changes@macosforge.org