[svn:parrot] r49742 - in branches/gsoc_nci: config/gen/libffi src/pmc

plobsing at svn.parrot.org plobsing at svn.parrot.org
Sun Oct 31 01:24:40 UTC 2010


Author: plobsing
Date: Sun Oct 31 01:24:40 2010
New Revision: 49742
URL: https://trac.parrot.org/parrot/changeset/49742

Log:
add string nci argument translation and simplify nci.mark()

Modified:
   branches/gsoc_nci/config/gen/libffi/nci-ffi.pmc.in
   branches/gsoc_nci/src/pmc/nci.pmc

Modified: branches/gsoc_nci/config/gen/libffi/nci-ffi.pmc.in
==============================================================================
--- branches/gsoc_nci/config/gen/libffi/nci-ffi.pmc.in	Sat Oct 30 23:37:17 2010	(r49741)
+++ branches/gsoc_nci/config/gen/libffi/nci-ffi.pmc.in	Sun Oct 31 01:24:40 2010	(r49742)
@@ -267,16 +267,15 @@
 
 */
     VTABLE void mark() {
-        if (PARROT_NCI(SELF)) {
-            Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
+        Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
 
-            Parrot_gc_mark_PMC_alive(interp, nci_info->fb_info);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->sig_str);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_return_signature);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->long_signature);
-            Parrot_gc_mark_PMC_alive(interp, nci_info->multi_sig);
-        }
+        Parrot_gc_mark_PMC_alive(interp, nci_info->fb_info);
+        Parrot_gc_mark_PMC_alive(interp, nci_info->signature);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->sig_str);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_return_signature);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->long_signature);
+        Parrot_gc_mark_PMC_alive(interp, nci_info->multi_sig);
     }
 
 /*
@@ -476,6 +475,10 @@
                     values[i] = &interp;
                     j_offset++;
                     break;
+                  case enum_nci_sig_string:
+                    translation_pointers[i] = *(STRING**)pcc_val[i - j_offset];
+                    values[i] = &translation_pointers[i];
+                    break;
                   case enum_nci_sig_cstring:
                     if (STRING_IS_NULL(*(STRING**)pcc_val[i - j_offset])) {
                         translation_pointers[i] = (char*) NULL;

Modified: branches/gsoc_nci/src/pmc/nci.pmc
==============================================================================
--- branches/gsoc_nci/src/pmc/nci.pmc	Sat Oct 30 23:37:17 2010	(r49741)
+++ branches/gsoc_nci/src/pmc/nci.pmc	Sun Oct 31 01:24:40 2010	(r49742)
@@ -267,16 +267,15 @@
 
 */
     VTABLE void mark() {
-        if (PARROT_NCI(SELF)) {
-            Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
+        Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
 
-            Parrot_gc_mark_PMC_alive(interp, nci_info->fb_info);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->sig_str);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_return_signature);
-            Parrot_gc_mark_STRING_alive(interp, nci_info->long_signature);
-            Parrot_gc_mark_PMC_alive(interp, nci_info->multi_sig);
-        }
+        Parrot_gc_mark_PMC_alive(interp, nci_info->fb_info);
+        Parrot_gc_mark_PMC_alive(interp, nci_info->signature);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->sig_str);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_return_signature);
+        Parrot_gc_mark_STRING_alive(interp, nci_info->long_signature);
+        Parrot_gc_mark_PMC_alive(interp, nci_info->multi_sig);
     }
 
 /*
@@ -476,6 +475,10 @@
                     values[i] = &interp;
                     j_offset++;
                     break;
+                  case enum_nci_sig_string:
+                    translation_pointers[i] = *(STRING**)pcc_val[i - j_offset];
+                    values[i] = &translation_pointers[i];
+                    break;
                   case enum_nci_sig_cstring:
                     if (STRING_IS_NULL(*(STRING**)pcc_val[i - j_offset])) {
                         translation_pointers[i] = (char*) NULL;


More information about the parrot-commits mailing list