Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r80648:7134b379b87c
Date: 2015-11-12 15:38 +0100
http://bitbucket.org/pypy/pypy/changeset/7134b379b87c/

Log:    Move this helper function in C, where it can be defined with the
        correct "const"

diff --git a/rpython/memory/gctransform/asmgcroot.py 
b/rpython/memory/gctransform/asmgcroot.py
--- a/rpython/memory/gctransform/asmgcroot.py
+++ b/rpython/memory/gctransform/asmgcroot.py
@@ -633,7 +633,7 @@
     qsort(gcmapstart,
           rffi.cast(rffi.SIZE_T, count),
           rffi.cast(rffi.SIZE_T, arrayitemsize),
-          llhelper(QSORT_CALLBACK_PTR, _compare_gcmap_entries))
+          c_compare_gcmap_entries)
 
 def replace_dead_entries_with_nulls(start, end):
     # replace the dead entries (null value) with a null key.
@@ -661,17 +661,6 @@
     def win32_follow_gcmap_jmp(start, end):
         pass
 
-def _compare_gcmap_entries(addr1, addr2):
-    key1 = addr1.address[0]
-    key2 = addr2.address[0]
-    if key1 < key2:
-        result = -1
-    elif key1 == key2:
-        result = 0
-    else:
-        result = 1
-    return rffi.cast(rffi.INT, result)
-
 # ____________________________________________________________
 
 class ShapeDecompressor:
@@ -821,7 +810,20 @@
 gcrootanchor.next = gcrootanchor
 c_gcrootanchor = Constant(gcrootanchor, ASM_FRAMEDATA_HEAD_PTR)
 
-eci = ExternalCompilationInfo(compile_extra=['-DPYPY_USE_ASMGCC'])
+eci = ExternalCompilationInfo(compile_extra=['-DPYPY_USE_ASMGCC'],
+                              post_include_bits=["""
+static int pypy_compare_gcmap_entries(const void *addr1, const void *addr2)
+{
+    char *key1 = * (char * const *) addr1;
+    char *key2 = * (char * const *) addr2;
+    if (key1 < key2)
+        return -1;
+    else if (key1 == key2)
+        return 0;
+    else
+        return 1;
+}
+"""])
 
 pypy_asm_stackwalk = rffi.llexternal('pypy_asm_stackwalk',
                                      [ASM_CALLBACK_PTR,
@@ -849,6 +851,10 @@
 
 QSORT_CALLBACK_PTR = lltype.Ptr(lltype.FuncType([llmemory.Address,
                                                  llmemory.Address], rffi.INT))
+c_compare_gcmap_entries = rffi.llexternal('pypy_compare_gcmap_entries',
+                                          [llmemory.Address, llmemory.Address],
+                                          rffi.INT, compilation_info=eci,
+                                          _nowrapper=True, sandboxsafe=True)
 qsort = rffi.llexternal('qsort',
                         [llmemory.Address,
                          rffi.SIZE_T,
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to