[前][次][番号順一覧][スレッド一覧]

ruby-changes:6619

From: suke <ko1@a...>
Date: Sun, 20 Jul 2008 16:05:40 +0900 (JST)
Subject: [ruby-changes:6619] Ruby:r18135 (trunk): * ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect

suke	2008-07-20 16:05:20 +0900 (Sun, 20 Jul 2008)

  New Revision: 18135

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18135

  Log:
    * ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect
      instead of rb_rescue2. [ruby-dev:35595]

  Modified files:
    trunk/ChangeLog
    trunk/ext/win32ole/win32ole.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18134)
+++ ChangeLog	(revision 18135)
@@ -1,3 +1,8 @@
+Sun Jul 20 16:00:37 2008  Masaki Suketa  <masaki.suketa@n...>
+
+	* ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect
+	  instead of rb_rescue2. [ruby-dev:35595]
+
 Sun Jul 20 01:23:24 2008  Masaki Suketa  <masaki.suketa@n...>
 
 	* ext/win32ole/win32ole.c (EVENTSINK_Invoke): little refactoring.
Index: ext/win32ole/win32ole.c
===================================================================
--- ext/win32ole/win32ole.c	(revision 18134)
+++ ext/win32ole/win32ole.c	(revision 18135)
@@ -118,7 +118,7 @@
 
 #define WC2VSTR(x) ole_wc2vstr((x), TRUE)
 
-#define WIN32OLE_VERSION "1.2.6"
+#define WIN32OLE_VERSION "1.2.7"
 
 typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX)
     (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*);
@@ -7522,6 +7522,7 @@
     VALUE arg[2];
     VALUE is_outarg;
     BOOL is_default_handler = FALSE;
+    int state;
 
     PIEVENTSINKOBJ pEV = (PIEVENTSINKOBJ)pEventSink;
     pTypeInfo = pEV->pTypeInfo;
@@ -7571,13 +7572,14 @@
      */
     arg[0] = handler;
     arg[1] = args;
-    result = rb_rescue2(exec_callback, (VALUE)arg,
-	                rescue_callback, Qnil,
-			rb_eException, (VALUE)0);
+    result = rb_protect(exec_callback, (VALUE)arg, &state);
+    if (state != 0) {
+	rescue_callback(Qnil);
+    }
     if(TYPE(result) == T_HASH) {
 	hash2ptr_dispparams(result, pTypeInfo, dispid, pdispparams);
 	result = hash2result(result);
-    }else if (is_outarg == Qtrue && outargv != Qnil) {
+    }else if (is_outarg == Qtrue && TYPE(outargv) == T_ARRAY) {
 	ary2ptr_dispparams(outargv, pdispparams);
     }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]