Beispiel #1
0
 def _op_debug(self, opname, arg):
     if isinstance(arg, Constant):
         string_literal = c_string_constant(''.join(arg.value.chars))
         return "%s(%s);" % (opname, string_literal)
     else:
         x = "%s(RPyString_AsCharP(%s));\n" % (opname, self.expr(arg))
         x += "RPyString_FreeCache();"
         return x
Beispiel #2
0
 def _op_debug(self, opname, arg):
     if isinstance(arg, Constant):
         string_literal = c_string_constant(''.join(arg.value.chars))
         return "%s(%s);" % (opname, string_literal)
     else:
         x = "%s(RPyString_AsCharP(%s));\n" % (opname, self.expr(arg))
         x += "RPyString_FreeCache();"
         return x
Beispiel #3
0
 def OP_DEBUG_PRINT(self, op):
     # XXX
     from rpython.rtyper.lltypesystem.rstr import STR
     format = []
     argv = []
     if self.db.reverse_debugger:
         format.append('{%d} ')
         argv.append('(int)getpid()')
     free_line = ""
     for arg in op.args:
         T = arg.concretetype
         if T == Ptr(STR):
             if isinstance(arg, Constant):
                 format.append(''.join(arg.value.chars).replace('%', '%%'))
             else:
                 format.append('%s')
                 argv.append('RPyString_AsCharP(%s)' % self.expr(arg))
                 free_line = "RPyString_FreeCache();"
             continue
         elif T == Signed:
             format.append('%ld')
         elif T == INT:
             format.append('%d')
         elif T == Unsigned:
             format.append('%lu')
         elif T == Float:
             format.append('%f')
         elif isinstance(T, Ptr) or T == Address:
             format.append('%p')
         elif T == Char:
             if isinstance(arg, Constant):
                 format.append(arg.value.replace('%', '%%'))
                 continue
             format.append('%c')
         elif T == Bool:
             format.append('%s')
             argv.append('(%s) ? "True" : "False"' % self.expr(arg))
             continue
         elif T == SignedLongLong:
             if sys.platform == 'win32':
                 format.append('%I64d')
             else:
                 format.append('%lld')
         elif T == UnsignedLongLong:
             if sys.platform == 'win32':
                 format.append('%I64u')
             else:
                 format.append('%llu')
         else:
             raise Exception("don't know how to debug_print %r" % (T, ))
         argv.append(self.expr(arg))
     argv.insert(0, c_string_constant(' '.join(format) + '\n'))
     return (
         "if (PYPY_HAVE_DEBUG_PRINTS) { fprintf(PYPY_DEBUG_FILE, %s); %s}" %
         (', '.join(argv), free_line))
Beispiel #4
0
    def OP_DEBUG_FATALERROR(self, op):
        # XXX
        from rpython.rtyper.lltypesystem.rstr import STR
        msg = op.args[0]
        assert msg.concretetype == Ptr(STR)
        if isinstance(msg, Constant):
            msg = c_string_constant(''.join(msg.value.chars))
        else:
            msg = 'RPyString_AsCharP(%s)' % self.expr(msg)

        return 'fprintf(stderr, "%%s\\n", %s); abort();' % msg
Beispiel #5
0
    def OP_DEBUG_FATALERROR(self, op):
        # XXX
        from rpython.rtyper.lltypesystem.rstr import STR
        msg = op.args[0]
        assert msg.concretetype == Ptr(STR)
        if isinstance(msg, Constant):
            msg = c_string_constant(''.join(msg.value.chars))
        else:
            msg = 'RPyString_AsCharP(%s)' % self.expr(msg)

        return 'fprintf(stderr, "%%s\\n", %s); abort();' % msg
Beispiel #6
0
 def _op_debug(self, macro, op):
     v_cat, v_timestamp = op.args
     if isinstance(v_cat, Constant):
         string_literal = c_string_constant(''.join(v_cat.value.chars))
         return "%s = %s(%s, %s);" % (self.expr(
             op.result), macro, string_literal, self.expr(v_timestamp))
     else:
         x = "%s = %s(RPyString_AsCharP(%s), %s);\n" % (self.expr(
             op.result), macro, self.expr(v_cat), self.expr(v_timestamp))
         x += "RPyString_FreeCache();"
         return x
Beispiel #7
0
 def OP_DEBUG_PRINT(self, op):
     # XXX
     from rpython.rtyper.lltypesystem.rstr import STR
     format = []
     argv = []
     free_line = ""
     for arg in op.args:
         T = arg.concretetype
         if T == Ptr(STR):
             if isinstance(arg, Constant):
                 format.append(''.join(arg.value.chars).replace('%', '%%'))
             else:
                 format.append('%s')
                 argv.append('RPyString_AsCharP(%s)' % self.expr(arg))
                 free_line = "RPyString_FreeCache();"
             continue
         elif T == Signed:
             format.append('%ld')
         elif T == INT:
             format.append('%d')
         elif T == Unsigned:
             format.append('%lu')
         elif T == Float:
             format.append('%f')
         elif isinstance(T, Ptr) or T == Address:
             format.append('%p')
         elif T == Char:
             if isinstance(arg, Constant):
                 format.append(arg.value.replace('%', '%%'))
                 continue
             format.append('%c')
         elif T == Bool:
             format.append('%s')
             argv.append('(%s) ? "True" : "False"' % self.expr(arg))
             continue
         elif T == SignedLongLong:
             if sys.platform == 'win32':
                 format.append('%I64d')
             else:
                 format.append('%lld')
         elif T == UnsignedLongLong:
             if sys.platform == 'win32':
                 format.append('%I64u')
             else:
                 format.append('%llu')
         else:
             raise Exception("don't know how to debug_print %r" % (T,))
         argv.append(self.expr(arg))
     argv.insert(0, c_string_constant(' '.join(format) + '\n'))
     return (
         "if (PYPY_HAVE_DEBUG_PRINTS) { fprintf(PYPY_DEBUG_FILE, %s); %s}"
         % (', '.join(argv), free_line))
Beispiel #8
0
 def OP_DEBUG_ASSERT(self, op):
     return 'RPyAssert(%s, %s);' % (self.expr(op.args[0]),
                                    c_string_constant(op.args[1].value))
Beispiel #9
0
 def OP_DEBUG_ASSERT(self, op):
     return 'RPyAssert(%s, %s);' % (self.expr(
         op.args[0]), c_string_constant(op.args[1].value))
Beispiel #10
0
 def OP_HAVE_DEBUG_PRINTS_FOR(self, op):
     arg = op.args[0]
     assert isinstance(arg, Constant) and isinstance(arg.value, str)
     string_literal = c_string_constant(arg.value)
     return '%s = pypy_have_debug_prints_for(%s);' % (self.expr(
         op.result), string_literal)
Beispiel #11
0
 def OP_HAVE_DEBUG_PRINTS_FOR(self, op):
     arg = op.args[0]
     assert isinstance(arg, Constant) and isinstance(arg.value, str)
     string_literal = c_string_constant(arg.value)
     return '%s = pypy_have_debug_prints_for(%s);' % (
         self.expr(op.result), string_literal)