[svn:parrot] r45341 - branches/avl_string_cache/src/packfile

bacek at svn.parrot.org bacek at svn.parrot.org
Wed Mar 31 06:19:01 UTC 2010


Author: bacek
Date: Wed Mar 31 06:19:01 2010
New Revision: 45341
URL: https://trac.parrot.org/parrot/changeset/45341

Log:
Fetch strings from PBC using new constant string cache.

Modified:
   branches/avl_string_cache/src/packfile/pf_items.c

Modified: branches/avl_string_cache/src/packfile/pf_items.c
==============================================================================
--- branches/avl_string_cache/src/packfile/pf_items.c	Wed Mar 31 06:18:42 2010	(r45340)
+++ branches/avl_string_cache/src/packfile/pf_items.c	Wed Mar 31 06:19:01 2010	(r45341)
@@ -1313,6 +1313,7 @@
     opcode_t  charset_nr = PF_fetch_opcode(pf, cursor);
     size_t    size       = (size_t)PF_fetch_opcode(pf, cursor);
     const int wordsize   = pf ? pf->header->wordsize : sizeof (opcode_t);
+    const CHARSET *charset;
 
     /* don't let PBC mess our internals - only constant or not */
     flags      &= (PObj_constant_FLAG | PObj_private7_FLAG);
@@ -1321,8 +1322,13 @@
     TRACE_PRINTF(("charset_nr=%ld, ", charset_nr));
     TRACE_PRINTF(("size=%ld.\n", size));
 
-    s            = string_make_from_charset(interp, (const char *)*cursor,
-                        size, charset_nr, flags);
+    charset = Parrot_get_charset(interp, charset_nr);
+    if (!charset)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+            "Invalid charset number '%d' specified", charset_nr);
+
+    s = Parrot_str_new_constant_ex(interp, (const char *)*cursor, size,
+            charset->preferred_encoding, charset, flags);
 
     /* print only printable characters */
     TRACE_PRINTF_VAL(("PF_fetch_string(): string is '%s' at 0x%x\n",


More information about the parrot-commits mailing list