Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge CGClassConstructHook and CGClassNameConstructHook (fixes #8934) #8991

Merged
merged 1 commit into from Dec 16, 2015
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Merge CGClassConstructHook and CGClassNameConstructHook (fixes #8934)

  • Loading branch information
nox committed Dec 15, 2015
commit 561fdbb150172271c3ab1a0c4344d22ae9127d81
@@ -4722,50 +4722,26 @@ class CGClassConstructHook(CGAbstractExternMethod):
"""
JS-visible constructor for our objects
"""
def __init__(self, descriptor):
args = [Argument('*mut JSContext', 'cx'), Argument('u32', 'argc'), Argument('*mut JSVal', 'vp')]
CGAbstractExternMethod.__init__(self, descriptor, CONSTRUCT_HOOK_NAME,
'bool', args)
self._ctor = self.descriptor.interface.ctor()

def define(self):
if not self._ctor:
return ""
return CGAbstractExternMethod.define(self)

def definition_body(self):
preamble = CGGeneric("""\
let global = global_root_from_object(JS_CALLEE(cx, vp).to_object());
let args = CallArgs::from_vp(vp, argc);
""")
name = self._ctor.identifier.name
nativeName = MakeNativeName(self.descriptor.binaryNameFor(name))
callGenerator = CGMethodCall(["global.r()"], nativeName, True,
self.descriptor, self._ctor)
return CGList([preamble, callGenerator])


class CGClassNameConstructHook(CGAbstractExternMethod):
"""
JS-visible named constructor for our objects
"""
def __init__(self, descriptor, ctor):
def __init__(self, descriptor, constructor=None):
args = [Argument('*mut JSContext', 'cx'), Argument('u32', 'argc'), Argument('*mut JSVal', 'vp')]
self._ctor = ctor
CGAbstractExternMethod.__init__(self, descriptor,
CONSTRUCT_HOOK_NAME + "_" +
self._ctor.identifier.name,
'bool', args)
name = CONSTRUCT_HOOK_NAME
if constructor:
name += "_" + constructor.identifier.name
else:
constructor = descriptor.interface.ctor()
assert constructor
CGAbstractExternMethod.__init__(self, descriptor, name, 'bool', args)
self.constructor = constructor

def definition_body(self):
preamble = CGGeneric("""\
let global = global_root_from_object(JS_CALLEE(cx, vp).to_object());
let args = CallArgs::from_vp(vp, argc);
""")
name = self._ctor.identifier.name
name = self.constructor.identifier.name
nativeName = MakeNativeName(self.descriptor.binaryNameFor(name))
callGenerator = CGMethodCall(["global.r()"], nativeName, True,
self.descriptor, self._ctor)
self.descriptor, self.constructor)
return CGList([preamble, callGenerator])


@@ -4932,9 +4908,10 @@ def __init__(self, descriptor):
cgThings.append(CGClassTraceHook(descriptor))

if descriptor.interface.hasInterfaceObject():
cgThings.append(CGClassConstructHook(descriptor))
if descriptor.interface.ctor():
cgThings.append(CGClassConstructHook(descriptor))
for ctor in descriptor.interface.namedConstructors:
cgThings.append(CGClassNameConstructHook(descriptor, ctor))
cgThings.append(CGClassConstructHook(descriptor, ctor))
cgThings.append(CGInterfaceObjectJSClass(descriptor))

if not descriptor.interface.isCallback():
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.