# New Ticket Created by  Steve Fink 
# Please include the string:  [perl #16855]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=16855 >


In tracking down a gc bug, I realized that the current throwaway
implementation of the print op could be replaced with a faster
throwaway implementation that avoids doing a string_to_cstring.

Note that both the original and new implementations are still buggy
with respect to supporting different encodings. I don't know if
printf("%s") is any better than fwrite in terms of at least vaguely
paying attention to your locale or whatever. If so, don't apply it.

(all tests pass)

This patch, like the preceding several, are really just the detritus
resulting from me trying to clean up my local copy wrt to CVS. I will
now revert this change in my local code, and get the change back later
if someone bothers to apply the patch.


-- attachment  1 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/36044/29166/2d4445/fwrite-print.patch

Index: core.ops
===================================================================
RCS file: /cvs/public/parrot/core.ops,v
retrieving revision 1.203
diff -p -u -r1.203 core.ops
--- core.ops    23 Aug 2002 17:21:38 -0000      1.203
+++ core.ops    29 Aug 2002 19:51:34 -0000
@@ -240,7 +240,7 @@ inline op print(in NUM) {
 op print(in STR) {
   STRING *s = $1;
   if (s && string_length(s)) {
-    printf("%s", string_to_cstring(interpreter, (s)));
+    fwrite(s->strstart, s->strlen, 1, stdout);
   }
   goto NEXT();
 }
@@ -249,7 +249,7 @@ op print(in PMC) {
   PMC *p = $1;
   STRING *s = (p->vtable->get_string(interpreter, p));
   if (s) {
-    printf("%s", string_to_cstring(interpreter, (s)));
+    fwrite(s->strstart, s->strlen, 1, stdout);
   }
   goto NEXT();
 }
@@ -298,7 +298,7 @@ op print(in INT, in STR) {
     default: file = OPCODE_T2PTR(FILE *, $1);
   }
   if (s && string_length(s)) {
-    fprintf(file, "%s", string_to_cstring(interpreter, (s)));
+    fwrite(s->strstart, s->strlen, 1, stdout);
   }
   goto NEXT();
 }
@@ -317,7 +317,7 @@ op print(in INT, in PMC) {
     default: file = OPCODE_T2PTR(FILE *, $1);
   }
   if (s) {
-    fprintf(file, "%s", string_to_cstring(interpreter, (s)));
+    fwrite(s->strstart, s->strlen, 1, stdout);
   }
   goto NEXT();
 }

Reply via email to