Bug 1021670 - Enable using non-wrapper-cached objects in unions; r=bzbarsky

--HG--
extra : rebase_source : 43353aa015a793d2eb6bed507213ceda2065d99e
This commit is contained in:
Ehsan Akhgari 2014-06-07 11:50:21 -04:00
Родитель fde35aa8b8
Коммит 02cf081e67
1 изменённых файлов: 23 добавлений и 15 удалений

Просмотреть файл

@ -8190,9 +8190,16 @@ class CGUnionStruct(CGThing):
fill("UnionMember<${structType} > m${name}", **vars))
enumValues.append("e" + vars["name"])
toJSValCases.append(
CGCase("e" + vars["name"],
self.getConversionToJS(vars, t)))
skipToJSVal = False
try:
toJSValCases.append(
CGCase("e" + vars["name"],
self.getConversionToJS(vars, t)))
except MethodNotNewObjectError:
# If we can't have a ToJSVal() because one of our members can
# only be returned from [NewObject] methods, then just skip
# generating ToJSVal.
skipToJSVal = True
destructorCases.append(
CGCase("e" + vars["name"],
CGGeneric("Destroy%s();\n" % vars["name"])))
@ -8226,18 +8233,19 @@ class CGUnionStruct(CGThing):
bodyInHeader=not self.ownsMembers,
inline=not self.ownsMembers))
methods.append(
ClassMethod(
"ToJSVal",
"bool",
[
Argument("JSContext*", "cx"),
Argument("JS::Handle<JSObject*>", "scopeObj"),
Argument("JS::MutableHandle<JS::Value>", "rval")
],
body=CGSwitch("mType", toJSValCases,
default=CGGeneric("return false;\n")).define(),
const=True))
if not skipToJSVal:
methods.append(
ClassMethod(
"ToJSVal",
"bool",
[
Argument("JSContext*", "cx"),
Argument("JS::Handle<JSObject*>", "scopeObj"),
Argument("JS::MutableHandle<JS::Value>", "rval")
],
body=CGSwitch("mType", toJSValCases,
default=CGGeneric("return false;\n")).define(),
const=True))
constructors = [ctor]
selfName = CGUnionStruct.unionTypeName(self.type, self.ownsMembers)