X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace.py;h=96a53b37adad90cd6c317a63d91a5bfd15184a8a;hb=fbcf683ea1396da28ec31eeeec24dc64d197ab76;hp=ebbbf44c77a40202f3458c9cd87425a2512e06d0;hpb=c0b0e99209544d26daceff8ca51497e694f2d2fc;p=apitrace diff --git a/retrace.py b/retrace.py index ebbbf44..96a53b3 100644 --- a/retrace.py +++ b/retrace.py @@ -120,6 +120,9 @@ class ValueDeserializer(stdapi.Visitor): def visitIntPointer(self, pointer, lvalue, rvalue): print ' %s = static_cast<%s>((%s).toPointer());' % (lvalue, pointer, rvalue) + def visitObjPointer(self, pointer, lvalue, rvalue): + print ' %s = static_cast<%s>((%s).toPointer());' % (lvalue, pointer, rvalue) + def visitLinearPointer(self, pointer, lvalue, rvalue): print ' %s = static_cast<%s>(retrace::toPointer(%s));' % (lvalue, pointer, rvalue) @@ -204,6 +207,9 @@ class SwizzledValueRegistrator(stdapi.Visitor): def visitIntPointer(self, pointer, lvalue, rvalue): pass + def visitObjPointer(self, pointer, lvalue, rvalue): + print r' _obj_map[(%s).toUIntPtr()] = %s;' % (rvalue, lvalue) + def visitLinearPointer(self, pointer, lvalue, rvalue): assert pointer.size is not None if pointer.size is not None: @@ -281,7 +287,7 @@ class Retracer: def deserializeThisPointer(self, interface): print ' %s *_this;' % (interface.name,) - # FIXME + print ' _this = static_cast<%s *>(_obj_map[call.arg(0).toUIntPtr()]);' % (interface.name,) def deserializeArgs(self, function): print ' retrace::ScopedAllocator _allocator;' @@ -322,6 +328,7 @@ class Retracer: try: self.regiterSwizzledValue(function.type, lvalue, rvalue) except NotImplementedError: + raise print ' // XXX: result' def failFunction(self, function): @@ -383,6 +390,9 @@ class Retracer: handle_names.add(handle.name) print + print 'static std::map _obj_map;' + print + functions = filter(self.filterFunction, api.functions) for function in functions: self.retraceFunction(function)