Bug 1600719. Add some sanity-checking for redundant can_run_script annotations on XPIDL attributes. r=froydnj

Differential Revision: https://phabricator.services.mozilla.com/D55529

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Boris Zbarsky 2019-12-02 19:52:11 +00:00
parent 265915f2fb
commit d9695ff145
2 changed files with 18 additions and 9 deletions

View File

@ -71,10 +71,10 @@ def attributeReturnType(a, getter, macro):
ret = "MOZ_MUST_USE " + ret
# Ideally, we'd set MOZ_CAN_RUN_SCRIPT in the "scriptable and not
# builtinclass" case too, so we'd just have memberCanRunScript() check
# can_explicitly_run_script and call it here. But that would likely require
# a fair amount of Gecko-side annotation work. See bug 1534292.
if (a.explicit_can_run_script or
(a.explicit_getter_can_run_script and getter) or
# explicit_setter_can_run_script/explicit_setter_can_run_script and call it
# here. But that would likely require a fair amount of Gecko-side
# annotation work. See bug 1534292.
if ((a.explicit_getter_can_run_script and getter) or
(a.explicit_setter_can_run_script and not getter)):
ret = "MOZ_CAN_RUN_SCRIPT " + ret
return ret
@ -125,7 +125,7 @@ def methodReturnType(m, macro):
ret = "MOZ_MUST_USE " + ret
# Ideally, we'd set MOZ_CAN_RUN_SCRIPT in the "scriptable and not
# builtinclass" case too, so we'd just have memberCanRunScript() check
# can_explicitly_run_script and call it here. But that would likely require
# explicit_can_run_script and call it here. But that would likely require
# a fair amount of Gecko-side annotation work. See bug 1534292.
if m.explicit_can_run_script:
ret = "MOZ_CAN_RUN_SCRIPT " + ret

View File

@ -980,9 +980,6 @@ class Attribute(object):
must_use = False
binaryname = None
infallible = False
# explicit_can_run_script is true if the attribute is explicitly annotated
# as being able to cause script to run.
explicit_can_run_script = False
# explicit_setter_can_run_script is true if the attribute is explicitly
# annotated as having a setter that can cause script to run.
explicit_setter_can_run_script = False
@ -1025,10 +1022,22 @@ class Attribute(object):
elif name == 'infallible':
self.infallible = True
elif name == 'can_run_script':
self.explicit_can_run_script = True
if (self.explicit_setter_can_run_script or
self.explicit_getter_can_run_script):
raise IDLError("Redundant getter_can_run_script or "
"setter_can_run_script annotation on "
"attribute", aloc)
self.explicit_setter_can_run_script = True
self.explicit_getter_can_run_script = True
elif name == 'setter_can_run_script':
if self.explicit_setter_can_run_script:
raise IDLError("Redundant setter_can_run_script annotation "
"on attribute", aloc)
self.explicit_setter_can_run_script = True
elif name == 'getter_can_run_script':
if self.explicit_getter_can_run_script:
raise IDLError("Redundant getter_can_run_script annotation "
"on attribute", aloc)
self.explicit_getter_can_run_script = True
else:
raise IDLError("Unexpected attribute '%s'" % name, aloc)