diff options
author | Josh Matthews <josh@joshmatthews.net> | 2014-04-21 20:19:32 -0400 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-05-27 20:43:48 +0200 |
commit | 2d6153772cc316be229d68e4d267600da406fcd4 (patch) | |
tree | 660e36fb22e5a842c67719f1593aa800b367a4f1 /src/components/script/dom/bindings/codegen/CodegenRust.py | |
parent | 2717ab65ecae6cf4ab38b6c1b9ea3f02d4913252 (diff) | |
download | servo-2d6153772cc316be229d68e4d267600da406fcd4.tar.gz servo-2d6153772cc316be229d68e4d267600da406fcd4.zip |
Add stubs for inline event handler manipulation.
Diffstat (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index a749bbce65e..9fca81cd287 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -705,17 +705,17 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, "rooting issues") # XXXbz we're going to assume that callback types are always # nullable and always have [TreatNonCallableAsNull] for now. - haveCallable = "${val}.isObject() && JS_ObjectIsCallable(cx, &${val}.toObject())" + haveCallable = "${val}.is_object() && JS_ObjectIsCallable(cx, ${val}.to_object()) != 0" if defaultValue is not None: assert(isinstance(defaultValue, IDLNullValue)) haveCallable = "${haveValue} && " + haveCallable return ( "if (%s) {\n" - " ${declName} = &${val}.toObject();\n" + " ${val}.to_object()\n" "} else {\n" - " ${declName} = NULL;\n" + " ptr::mut_null()\n" "}" % haveCallable, - CGGeneric("JSObject*"), None, needsRooting) + CGGeneric("*mut JSObject"), needsRooting) if type.isAny(): assert not isEnforceRange and not isClamp @@ -1346,6 +1346,14 @@ class CGIfWrapper(CGWrapper): CGWrapper.__init__(self, CGIndenter(child), pre=pre.define(), post="\n}") +class CGTemplatedType(CGWrapper): + def __init__(self, templateName, child, isConst=False, isReference=False): + const = "const " if isConst else "" + pre = "%s%s<" % (const, templateName) + ref = "&" if isReference else "" + post = ">%s" % ref + CGWrapper.__init__(self, child, pre=pre, post=post) + class CGNamespace(CGWrapper): def __init__(self, namespace, child, public=False): pre = "%smod %s {\n" % ("pub " if public else "", namespace) @@ -3128,7 +3136,7 @@ class ClassMember(ClassItem): ClassItem.__init__(self, name, visibility) def declare(self, cgClass): - return '%s: %s,\n' % (self.name, self.type) + return '%s %s: %s,\n' % (self.visibility, self.name, self.type) def define(self, cgClass): if not self.static: @@ -4357,7 +4365,7 @@ class CGNativeMember(ClassMethod): elif type.isAny(): typeDecl, template = "JS::Value", "return ${declName};" elif type.isObject(): - typeDecl, template = "JSObject*", "return ${declName};" + typeDecl, template = "*JSObject", "return ${declName};" elif type.isSpiderMonkeyInterface(): if type.nullable(): returnCode = "return ${declName}.IsNull() ? nullptr : ${declName}.Value().Obj();" @@ -4561,7 +4569,7 @@ class CGNativeMember(ClassMethod): elif optional: # Note: All variadic args claim to be optional, but we can just use # empty arrays to represent them not being present. - decl = CGTemplatedType("Optional", decl) + decl = CGTemplatedType("Option", decl) ref = True return (decl, ref) @@ -4816,6 +4824,7 @@ class CallbackMember(CGNativeMember): def getResultConversion(self): replacements = { "val": "rval", + "declName": "rvalDecl", } if isJSImplementedDescriptor(self.descriptorProvider): |