[pypy-commit] pypy vmprof: quick hack to write ints by hand

fijal noreply at buildbot.pypy.org
Mon Jan 26 14:33:43 CET 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: vmprof
Changeset: r75534:22a3080afde4
Date: 2015-01-26 15:33 +0200
http://bitbucket.org/pypy/pypy/changeset/22a3080afde4/

Log:	quick hack to write ints by hand

diff --git a/pypy/module/_vmprof/interp_vmprof.py b/pypy/module/_vmprof/interp_vmprof.py
--- a/pypy/module/_vmprof/interp_vmprof.py
+++ b/pypy/module/_vmprof/interp_vmprof.py
@@ -1,9 +1,10 @@
-import py, os, struct
+import py, os, sys
 from rpython.rtyper.lltypesystem import lltype, rffi, llmemory
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
 from rpython.rtyper.annlowlevel import cast_instance_to_gcref, cast_base_ptr_to_instance
 from rpython.rlib.objectmodel import we_are_translated
-from rpython.rlib import jit, rposix, entrypoint
+from rpython.rlib import jit, rposix, entrypoint, rstruct
+from rpython.rlib.rstring import StringBuilder
 from pypy.interpreter.baseobjspace import W_Root
 from pypy.interpreter.error import oefmt, wrap_oserror, OperationError
 from pypy.interpreter.gateway import unwrap_spec
@@ -107,7 +108,21 @@
 def do_get_virtual_ip(frame):
     return frame.pycode._unique_id
 
-
+def write_long_to_string_builder(l, b):
+    if sys.maxint == 2147483647:
+        b.append(chr(l & 0xff))
+        b.append(chr((l >> 8) & 0xff))
+        b.append(chr((l >> 16) & 0xff))
+        b.append(chr((l >> 24) & 0xff))
+    else:
+        b.append(chr(l & 0xff))
+        b.append(chr((l >> 8) & 0xff))
+        b.append(chr((l >> 16) & 0xff))
+        b.append(chr((l >> 24) & 0xff))
+        b.append(chr((l >> 32) & 0xff))
+        b.append(chr((l >> 40) & 0xff))
+        b.append(chr((l >> 48) & 0xff))
+        b.append(chr((l >> 56) & 0xff))
 
 class VMProf(object):
     def __init__(self):
@@ -145,15 +160,25 @@
             period_usec = 1000000 / 100 #  100hz
         else:
             period_usec = period
-        os.write(fileno, struct.pack("lllll", 0, 3, 0, period_usec, 0))
+        b = StringBuilder()
+        write_long_to_string_builder(0, b)
+        write_long_to_string_builder(3, b)
+        write_long_to_string_builder(0, b)
+        write_long_to_string_builder(period_usec, b)
+        write_long_to_string_builder(0, b)
+        os.write(fileno, b.build())
 
     def register_code(self, space, code):
         if self.fileno == -1:
             raise OperationError(space.w_RuntimeError,
                                  space.wrap("vmprof not running"))
         name = code._get_full_name()
-        s = '\x02' + struct.pack("ll", code._unique_id, len(name)) + name
-        os.write(self.fileno, s)
+        b = StringBuilder()
+        b.append('\x02')
+        write_long_to_string_builder(code._unique_id, b)
+        write_long_to_string_builder(len(name), b)
+        b.append(name)
+        os.write(self.fileno, b.build())
 
     def disable(self, space):
         if not self.is_enabled:


More information about the pypy-commit mailing list