Add trace hooks for all generated derivatives of Node.

This commit is contained in:
Josh Matthews 2013-08-29 15:21:27 -04:00
parent a567eb007d
commit 329f92a41d
5 changed files with 143 additions and 14 deletions

View file

@ -3961,10 +3961,9 @@ class CGAbstractClassHook(CGAbstractExternMethod):
args)
def definition_body_prologue(self):
return "" #XXXjdm we may want to do a proper unwrap here
return """
let this: *%s = &(unwrap::<*rust_box<%s>>(obj).payload);
""" % (self.descriptor.nativeType, self.descriptor.nativeType)
let this: *%s = &(*unwrap::<*rust_box<%s>>(obj)).payload;
""" % (self.descriptor.concreteType, self.descriptor.concreteType)
def definition_body(self):
return self.definition_body_prologue() + self.generate_code()
@ -3990,6 +3989,18 @@ let _: @mut %s = cast::transmute(RUST_JSVAL_TO_PRIVATE(val));
#return clearWrapper + release
return release
class CGClassTraceHook(CGAbstractClassHook):
"""
A hook to trace through our native object; used for GC and CC
"""
def __init__(self, descriptor):
args = [Argument('*mut JSTracer', 'trc'), Argument('*JSObject', 'obj')]
CGAbstractClassHook.__init__(self, descriptor, TRACE_HOOK_NAME, 'void',
args)
def generate_code(self):
return " (*this).trace(%s);" % self.args[0].name
class CGClassConstructHook(CGAbstractExternMethod):
"""
JS-visible constructor for our objects
@ -4154,7 +4165,7 @@ class CGDescriptor(CGThing):
# Only generate a trace hook if the class wants a custom hook.
if (descriptor.customTrace):
#cgThings.append(CGClassTraceHook(descriptor))
cgThings.append(CGClassTraceHook(descriptor))
pass
if descriptor.interface.hasInterfaceObject():