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
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))
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
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
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))
def OP_DEBUG_ASSERT(self, op): return 'RPyAssert(%s, %s);' % (self.expr(op.args[0]), c_string_constant(op.args[1].value))
def OP_DEBUG_ASSERT(self, op): return 'RPyAssert(%s, %s);' % (self.expr( op.args[0]), c_string_constant(op.args[1].value))
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)
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)