[macruby-changes] [1972] MacRuby/branches/experimental/vm.cpp

source_changes at macosforge.org source_changes at macosforge.org
Thu Jul 2 12:28:49 PDT 2009


Revision: 1972
          http://trac.macosforge.org/projects/ruby/changeset/1972
Author:   lsansonetti at apple.com
Date:     2009-07-02 12:28:47 -0700 (Thu, 02 Jul 2009)
Log Message:
-----------
AOT compiler: properly catch exceptions

Modified Paths:
--------------
    MacRuby/branches/experimental/vm.cpp

Modified: MacRuby/branches/experimental/vm.cpp
===================================================================
--- MacRuby/branches/experimental/vm.cpp	2009-07-02 19:08:08 UTC (rev 1971)
+++ MacRuby/branches/experimental/vm.cpp	2009-07-02 19:28:47 UTC (rev 1972)
@@ -4065,14 +4065,18 @@
 
     // Compile main function.
     std::string main_path(tmpdir);
-    main_path.append("main.c");
+    main_path.append("main.cpp");
     std::ofstream main_file(main_path.c_str());
     std::string main_content(
-"extern void ruby_sysinit(int *, char ***);\n"
-"extern void ruby_init(void);\n"
-"extern void ruby_set_argv(int, char **);\n"
-"extern void *rb_vm_top_self(void);\n"
-"extern void *rb_main(void *, void *);\n"
+"extern \"C\" {\n"
+"    void ruby_sysinit(int *, char ***);\n"
+"    void ruby_init(void);\n"
+"    void ruby_set_argv(int, char **);\n"
+"    void *rb_vm_top_self(void);\n"
+"    void rb_vm_print_current_exception(void);\n"
+"    void rb_exit(int);\n"
+"    void *rb_main(void *, void *);\n"
+"}\n"
 "\n"
 "int main(int argc, char **argv)\n"
 "{\n"
@@ -4082,14 +4086,20 @@
 "    }\n"
 "    ruby_init();\n"
 "    ruby_set_argv(argc, argv);\n"
-"    rb_main(rb_vm_top_self(), 0);\n"
-"    return 1;\n"
+"    try {\n"
+"	rb_main(rb_vm_top_self(), 0);\n"
+"    }\n"
+"    catch (...) {\n"
+"	rb_vm_print_current_exception();\n"
+"	rb_exit(1);\n"
+"    }\n"
+"    rb_exit(0);\n"
 "}\n"
 );
     main_file.write(main_content.c_str(), main_content.size());
     main_file.close();
     gcc_line.clear();
-    gcc_line.append("gcc ");
+    gcc_line.append("g++ ");
     gcc_line.append(main_path);
     gcc_line.append(" -c -arch x86_64 -o ");
     std::string main_o_path(tmpdir);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090702/371dac54/attachment.html>


More information about the macruby-changes mailing list