[svn:parrot] r37965 - branches/packfile_revamp/src/pmc

bacek at svn.parrot.org bacek at svn.parrot.org
Tue Apr 7 21:38:41 UTC 2009


Author: bacek
Date: Tue Apr  7 21:38:41 2009
New Revision: 37965
URL: https://trac.parrot.org/parrot/changeset/37965

Log:
Made get_string_native/set_string_native shortcuts for pack/unpack

Modified:
   branches/packfile_revamp/src/pmc/packfile.pmc

Modified: branches/packfile_revamp/src/pmc/packfile.pmc
==============================================================================
--- branches/packfile_revamp/src/pmc/packfile.pmc	Tue Apr  7 21:38:02 2009	(r37964)
+++ branches/packfile_revamp/src/pmc/packfile.pmc	Tue Apr  7 21:38:41 2009	(r37965)
@@ -57,43 +57,29 @@
 
 =item C<STRING *get_string()>
 
-Return raw serialized PBC file data.
+Shortcut for self.pack.
 
 =cut
 
 */
     VTABLE STRING *get_string() {
-        PackFile *pf = PMC_data_typed(SELF, PackFile *);
-        opcode_t length = PackFile_pack_size(interp, pf) * sizeof (opcode_t);
-        opcode_t *ptr = (opcode_t*)mem_sys_allocate(length);
-        STRING *str;
-        PackFile_pack(interp, pf, ptr);
-        str = Parrot_str_new_init(interp, (const char*)ptr, length,
-                PARROT_FIXED_8_ENCODING, PARROT_BINARY_CHARSET, 0);
-        mem_sys_free(ptr);
-        return str;
+        STRING * ret;
+        (STRING *ret) = PCCINVOKE(INTERP, SELF, "pack");
+        return ret;
     }
 
 /*
 
 =item C<void set_string_native(STRING *str)>
 
-Parse raw serialized PBC file data into the Packfile data structure.
+Shortcut for self.unpack.
 
 =cut
 
 Implementation note: taken from the bottom end of Parrot_pbc_read().
 */
     VTABLE void set_string_native(STRING *str) {
-        PackFile *pf = PMC_data_typed(SELF, PackFile *);
-        const opcode_t *ptr = (const opcode_t*)Parrot_string_cstring(interp, str);
-        int length = Parrot_str_byte_length(interp, str);
-        if (!PackFile_unpack(interp, pf, ptr, length))
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
-                                        "Can't unpack packfile.");
-
-        /* Set :main routine */
-        do_sub_pragmas(interp, pf->cur_cs, PBC_PBC, NULL);
+        PCCINVOKE(INTERP, SELF, "unpack", STRING *str);
     }
 
 
@@ -275,6 +261,49 @@
         SELF.set_integer_keyed_str(s, val);
     }
 
+/*
+
+=item C<STRING * pack()>
+
+Return raw serialized PBC file data.
+
+=cut
+
+*/
+
+    METHOD STRING *pack() {
+        PackFile *pf = PMC_data_typed(SELF, PackFile *);
+        opcode_t length = PackFile_pack_size(interp, pf) * sizeof (opcode_t);
+        opcode_t *ptr = (opcode_t*)mem_sys_allocate(length);
+        STRING *str;
+        PackFile_pack(interp, pf, ptr);
+        str = Parrot_str_new_init(interp, (const char*)ptr, length,
+                PARROT_FIXED_8_ENCODING, PARROT_BINARY_CHARSET, 0);
+        mem_sys_free(ptr);
+        RETURN(STRING *str);
+    }
+
+/*
+
+=item C<STRING * unpack()>
+
+Parse raw serialized PBC file data into the Packfile data structure.
+
+=cut
+
+*/
+    
+    METHOD void unpack(STRING *str) {
+        PackFile *pf = PMC_data_typed(SELF, PackFile *);
+        const opcode_t *ptr = (const opcode_t*)Parrot_string_cstring(interp, str);
+        int length = Parrot_str_byte_length(interp, str);
+        if (!PackFile_unpack(interp, pf, ptr, length))
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE,
+                                        "Can't unpack packfile.");
+
+        /* Set :main routine */
+        do_sub_pragmas(interp, pf->cur_cs, PBC_PBC, NULL);
+    }
 
 /*
 


More information about the parrot-commits mailing list