[macruby-changes] [1298] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Thu Apr 2 23:24:41 PDT 2009


Revision: 1298
          http://trac.macosforge.org/projects/ruby/changeset/1298
Author:   lsansonetti at apple.com
Date:     2009-04-02 23:24:41 -0700 (Thu, 02 Apr 2009)
Log Message:
-----------
moved the VM exception handler to main()

Modified Paths:
--------------
    MacRuby/branches/experimental/include/ruby/ruby.h
    MacRuby/branches/experimental/roxor.cpp

Added Paths:
-----------
    MacRuby/branches/experimental/main.cpp

Removed Paths:
-------------
    MacRuby/branches/experimental/main.c

Modified: MacRuby/branches/experimental/include/ruby/ruby.h
===================================================================
--- MacRuby/branches/experimental/include/ruby/ruby.h	2009-04-03 05:44:40 UTC (rev 1297)
+++ MacRuby/branches/experimental/include/ruby/ruby.h	2009-04-03 06:24:41 UTC (rev 1298)
@@ -1255,13 +1255,6 @@
 static char *dln_libs_to_be_linked[] = { EXTLIB, 0 };
 #endif
 
-#if (defined(__APPLE__) || defined(__NeXT__)) && defined(__MACH__) && !defined(WITH_OBJC)
-/* to link startup code with ObjC support */
-#define RUBY_GLOBAL_SETUP static void objcdummyfunction(void) {objc_msgSend(NULL,NULL);}
-#else
-#define RUBY_GLOBAL_SETUP
-#endif
-
 void ruby_sysinit(int *, char ***);
 
 #define RUBY_VM 1 /* YARV */

Deleted: MacRuby/branches/experimental/main.c
===================================================================
--- MacRuby/branches/experimental/main.c	2009-04-03 05:44:40 UTC (rev 1297)
+++ MacRuby/branches/experimental/main.c	2009-04-03 06:24:41 UTC (rev 1298)
@@ -1,35 +0,0 @@
-/**********************************************************************
-
-  main.c -
-
-  $Author: nobu $
-  created at: Fri Aug 19 13:19:58 JST 1994
-
-  Copyright (C) 1993-2007 Yukihiro Matsumoto
-
-**********************************************************************/
-
-#undef RUBY_EXPORT
-#include "ruby.h"
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-RUBY_GLOBAL_SETUP
-
-int
-main(int argc, char **argv, char **envp)
-{
-#ifdef RUBY_DEBUG_ENV
-    ruby_set_debug_option(getenv("RUBY_DEBUG"));
-#endif
-#ifdef HAVE_LOCALE_H
-    setlocale(LC_CTYPE, "");
-#endif
-
-    ruby_sysinit(&argc, &argv);
-    {
-	ruby_init();
-	rb_exit(ruby_run_node(ruby_options(argc, argv)));
-    }
-}

Copied: MacRuby/branches/experimental/main.cpp (from rev 1288, MacRuby/branches/experimental/main.c)
===================================================================
--- MacRuby/branches/experimental/main.cpp	                        (rev 0)
+++ MacRuby/branches/experimental/main.cpp	2009-04-03 06:24:41 UTC (rev 1298)
@@ -0,0 +1,32 @@
+/*
+ * This file is covered by the Ruby license. See COPYING for more details.
+ * 
+ * Copyright (C) 2007-2008, Apple Inc. All rights reserved.
+ * Copyright (C) 1993-2007 Yukihiro Matsumoto
+ */
+
+#undef RUBY_EXPORT
+#include "ruby.h"
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+extern "C" void rb_vm_print_current_exception(void);
+
+int
+main(int argc, char **argv, char **envp)
+{
+#ifdef HAVE_LOCALE_H
+    setlocale(LC_CTYPE, "");
+#endif
+
+    try {
+	ruby_sysinit(&argc, &argv);
+	ruby_init();
+	rb_exit(ruby_run_node(ruby_options(argc, argv)));
+    }
+    catch (...) {
+	rb_vm_print_current_exception();
+	exit(1);
+    }
+}

Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp	2009-04-03 05:44:40 UTC (rev 1297)
+++ MacRuby/branches/experimental/roxor.cpp	2009-04-03 06:24:41 UTC (rev 1298)
@@ -4235,8 +4235,10 @@
 		    // VALUE rb_vm_yield_args(int argc, ...)
 		    std::vector<const Type *> types;
 		    types.push_back(Type::Int32Ty);
-		    FunctionType *ft = FunctionType::get(RubyObjTy, types, true);
-		    yieldFunc = cast<Function>(module->getOrInsertFunction("rb_vm_yield_args", ft));
+		    FunctionType *ft =
+			FunctionType::get(RubyObjTy, types, true);
+		    yieldFunc = cast<Function>(module->getOrInsertFunction(
+				"rb_vm_yield_args", ft));
 		}
 
 		std::vector<Value *>params;
@@ -4253,8 +4255,16 @@
 			args = args->nd_next;
 		    }
 		}
+#if 0 // TODO
+		else {
+		    params.push_back(ConstantInt::get(Type::Int32Ty, 1));
+		    params.push_back(splatArgFollowsVal);
+		    params.push_back(compile_node(args->nd_head));
+		}
+#endif
 
-		return CallInst::Create(yieldFunc, params.begin(), params.end(), "", bb);
+		return CallInst::Create(yieldFunc, params.begin(),
+			params.end(), "", bb);
 
 	    }
 	    break;
@@ -6265,15 +6275,16 @@
     printf("rb_vm_debug\n");
 }
 
-// END OF VM primitives
+extern "C"
+void
+rb_vm_print_current_exception(void)
+{
+    VALUE exc = GET_VM()->current_exception;
+    if (exc == Qnil) {
+	printf("uncatched Objective-C/C++ exception...");
+	return;
+    }
 
-#include <llvm/Target/TargetData.h>
-#include <llvm/Target/TargetMachine.h>
-#include <llvm/Target/TargetOptions.h>
-
-static void
-rb_vm_print_exception(VALUE exc)
-{
     static SEL sel_message = 0;
     if (sel_message == 0) {
 	sel_message = sel_registerName("message");
@@ -6284,6 +6295,12 @@
     printf("%s (%s)\n", RSTRING_PTR(message), rb_class2name(*(VALUE *)exc));
 }
 
+// END OF VM primitives
+
+#include <llvm/Target/TargetData.h>
+#include <llvm/Target/TargetMachine.h>
+#include <llvm/Target/TargetOptions.h>
+
 extern "C"
 bool
 rb_vm_parse_in_eval(void)
@@ -6374,19 +6391,7 @@
 	GET_VM()->bindings.pop_back();
     }
 
-    try {
-	return ((VALUE(*)(VALUE, SEL))imp)(GET_VM()->current_top_object, 0);
-    }
-    catch (...) {
-	VALUE exc = GET_VM()->current_exception;
-	if (exc != Qnil) {
-	    rb_vm_print_exception(exc);
-	}
-	else {
-	    printf("uncatched C++/Objective-C exception...\n");
-	}
-	exit(1);
-    }
+    return ((VALUE(*)(VALUE, SEL))imp)(GET_VM()->current_top_object, 0);
 }
 
 extern "C"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090402/d8172f5f/attachment-0001.html>


More information about the macruby-changes mailing list