зеркало из https://github.com/mozilla/gecko-dev.git
Bug 775289 - Remove generateNativeAccessors branching from Paris binding codegen. (r=peterv)
This commit is contained in:
Родитель
429e3ddab2
Коммит
c0dee00d6e
|
@ -40,11 +40,7 @@ def main():
|
|||
o = OptionParser(usage=usagestring)
|
||||
o.add_option("--verbose-errors", action='store_true', default=False,
|
||||
help="When an error happens, display the Python traceback.")
|
||||
o.add_option("--use-jsop-accessors", action='store_true', default=False,
|
||||
dest='useJSOPAccessors',
|
||||
help="Use JSPropertyOps instead of JSNatives for getters and setters")
|
||||
(options, args) = o.parse_args()
|
||||
Codegen.generateNativeAccessors = not options.useJSOPAccessors
|
||||
|
||||
if len(args) != 4 or (args[0] != "header" and args[0] != "cpp"):
|
||||
o.error(usagestring)
|
||||
|
|
|
@ -956,12 +956,7 @@ class AttrDefiner(PropertyDefiner):
|
|||
return ""
|
||||
|
||||
def flags(attr):
|
||||
flags = "JSPROP_SHARED | JSPROP_ENUMERATE"
|
||||
if generateNativeAccessors:
|
||||
flags = "JSPROP_NATIVE_ACCESSORS | " + flags
|
||||
elif attr.readonly:
|
||||
return "JSPROP_READONLY | " + flags
|
||||
return flags
|
||||
return "JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_NATIVE_ACCESSORS"
|
||||
|
||||
def getter(attr):
|
||||
return ("{(JSPropertyOp)get_%(name)s, &%(name)s_getterinfo}"
|
||||
|
@ -3156,39 +3151,15 @@ class CGMethodCall(CGThing):
|
|||
def define(self):
|
||||
return self.cgRoot.define()
|
||||
|
||||
class CGGetterSetterCall(CGPerSignatureCall):
|
||||
"""
|
||||
A class to generate a native object getter or setter call for a
|
||||
particular IDL getter or setter.
|
||||
"""
|
||||
def __init__(self, returnType, arguments, nativeMethodName, descriptor,
|
||||
attr, getter=False, setter=False):
|
||||
assert bool(getter) != bool(setter)
|
||||
CGPerSignatureCall.__init__(self, returnType, [], arguments,
|
||||
nativeMethodName, False, descriptor, attr,
|
||||
getter=getter, setter=setter)
|
||||
def getArgv(self):
|
||||
if generateNativeAccessors:
|
||||
return CGPerSignatureCall.getArgv(self)
|
||||
return "vp"
|
||||
|
||||
class CGGetterCall(CGGetterSetterCall):
|
||||
class CGGetterCall(CGPerSignatureCall):
|
||||
"""
|
||||
A class to generate a native object getter call for a particular IDL
|
||||
getter.
|
||||
"""
|
||||
def __init__(self, returnType, nativeMethodName, descriptor, attr):
|
||||
CGGetterSetterCall.__init__(self, returnType, [], nativeMethodName,
|
||||
descriptor, attr, getter=True)
|
||||
def getArgc(self):
|
||||
if generateNativeAccessors:
|
||||
return CGGetterSetterCall.getArgc()
|
||||
return "0"
|
||||
def getArgvDecl(self):
|
||||
if generateNativeAccessors:
|
||||
return CGPerSignatureCall.getArgvDecl(self)
|
||||
# We just get our stuff from vp
|
||||
return ""
|
||||
CGPerSignatureCall.__init__(self, returnType, [], [],
|
||||
nativeMethodName, False, descriptor,
|
||||
attr, getter=True)
|
||||
|
||||
class FakeArgument():
|
||||
def __init__(self, type):
|
||||
|
@ -3197,14 +3168,14 @@ class FakeArgument():
|
|||
self.variadic = False
|
||||
self.defaultValue = None
|
||||
|
||||
class CGSetterCall(CGGetterSetterCall):
|
||||
class CGSetterCall(CGPerSignatureCall):
|
||||
"""
|
||||
A class to generate a native object setter call for a particular IDL
|
||||
setter.
|
||||
"""
|
||||
def __init__(self, argType, nativeMethodName, descriptor, attr):
|
||||
CGGetterSetterCall.__init__(self, None, [FakeArgument(argType)],
|
||||
nativeMethodName, descriptor, attr,
|
||||
CGPerSignatureCall.__init__(self, None, [], [FakeArgument(argType)],
|
||||
nativeMethodName, False, descriptor, attr,
|
||||
setter=True)
|
||||
def wrap_return_value(self):
|
||||
# We have no return value
|
||||
|
@ -3302,20 +3273,10 @@ class CGNativeGetter(CGAbstractBindingMethod):
|
|||
def __init__(self, descriptor, attr):
|
||||
self.attr = attr
|
||||
name = 'get_' + attr.identifier.name
|
||||
if generateNativeAccessors:
|
||||
args = [Argument('JSContext*', 'cx'), Argument('unsigned', 'argc'),
|
||||
Argument('JS::Value*', 'vp')]
|
||||
else:
|
||||
args = [Argument('JSContext*', 'cx'), Argument('JSHandleObject', 'obj'),
|
||||
Argument('JSHandleId', 'id'), Argument('JS::Value*', 'vp')]
|
||||
CGAbstractBindingMethod.__init__(self, descriptor, name, args)
|
||||
|
||||
def getThis(self):
|
||||
if generateNativeAccessors:
|
||||
return CGAbstractBindingMethod.getThis(self)
|
||||
return CGIndenter(
|
||||
CGGeneric("%s* self;" % self.descriptor.nativeType))
|
||||
|
||||
def generate_code(self):
|
||||
return CGIndenter(CGGeneric(
|
||||
"return specialized_get_%s(cx, obj, self, vp);" %
|
||||
|
@ -3349,39 +3310,21 @@ class CGNativeSetter(CGAbstractBindingMethod):
|
|||
self.attr = attr
|
||||
baseName = attr.identifier.name
|
||||
name = 'set_' + attr.identifier.name
|
||||
if generateNativeAccessors:
|
||||
args = [Argument('JSContext*', 'cx'), Argument('unsigned', 'argc'),
|
||||
Argument('JS::Value*', 'vp')]
|
||||
else:
|
||||
args = [Argument('JSContext*', 'cx'), Argument('JSHandleObject', 'obj'),
|
||||
Argument('JSHandleId', 'id'), Argument('JSBool', 'strict'),
|
||||
Argument('JS::Value*', 'vp')]
|
||||
CGAbstractBindingMethod.__init__(self, descriptor, name, args)
|
||||
|
||||
def getThis(self):
|
||||
if generateNativeAccessors:
|
||||
return CGAbstractBindingMethod.getThis(self)
|
||||
return CGIndenter(
|
||||
CGGeneric("%s* self;" % self.descriptor.nativeType))
|
||||
|
||||
def generate_code(self):
|
||||
if generateNativeAccessors:
|
||||
argv = ("JS::Value* argv = JS_ARGV(cx, vp);\n"
|
||||
"jsval undef = JS::UndefinedValue();\n"
|
||||
return CGIndenter(CGGeneric(
|
||||
("JS::Value* argv = JS_ARGV(cx, vp);\n"
|
||||
"JS::Value undef = JS::UndefinedValue();\n"
|
||||
"if (argc == 0) {\n"
|
||||
" argv = &undef;\n"
|
||||
"}\n")
|
||||
retval = "*vp = JSVAL_VOID;\n"
|
||||
else:
|
||||
argv = "JS::Value* argv = vp;\n"
|
||||
retval = ""
|
||||
|
||||
return CGIndenter(CGGeneric(
|
||||
argv +
|
||||
("if (!specialized_set_%s(cx, obj, self, argv)) {\n"
|
||||
"}\n"
|
||||
"if (!specialized_set_%s(cx, obj, self, argv)) {\n"
|
||||
" return false;\n"
|
||||
"}\n" % self.attr.identifier.name) +
|
||||
retval +
|
||||
"*vp = JSVAL_VOID;\n"
|
||||
"return true;"))
|
||||
|
||||
class CGSpecializedSetter(CGAbstractStaticMethod):
|
||||
|
@ -3394,13 +3337,8 @@ class CGSpecializedSetter(CGAbstractStaticMethod):
|
|||
name = 'specialized_set_' + attr.identifier.name
|
||||
args = [ Argument('JSContext*', 'cx'),
|
||||
Argument('JSHandleObject', 'obj'),
|
||||
Argument('%s*' % descriptor.nativeType, 'self') ]
|
||||
# Our last argument is named differently depending on whether we're
|
||||
# in the native accessors case or not
|
||||
if generateNativeAccessors:
|
||||
args.append(Argument('JS::Value*', 'argv'))
|
||||
else:
|
||||
args.append(Argument('JS::Value*', 'vp'))
|
||||
Argument('%s*' % descriptor.nativeType, 'self'),
|
||||
Argument('JS::Value*', 'argv')]
|
||||
CGAbstractStaticMethod.__init__(self, descriptor, name, "bool", args)
|
||||
|
||||
def definition_body(self):
|
||||
|
|
|
@ -39,11 +39,7 @@ def main():
|
|||
help="Directory in which to cache lex/parse tables.")
|
||||
o.add_option("--verbose-errors", action='store_true', default=False,
|
||||
help="When an error happens, display the Python traceback.")
|
||||
o.add_option("--use-jsop-accessors", action='store_true', default=False,
|
||||
dest='useJSOPAccessors',
|
||||
help="Use JSPropertyOps instead of JSNatives for getters and setters")
|
||||
(options, args) = o.parse_args()
|
||||
Codegen.generateNativeAccessors = not options.useJSOPAccessors
|
||||
|
||||
if len(args) < 2:
|
||||
o.error(usageString)
|
||||
|
|
|
@ -16,15 +16,6 @@ EXPORT_LIBRARY = 1
|
|||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
# Define USE_JSOP_ACCESSORS to a nonempty string like "yes" to use them
|
||||
USE_JSOP_ACCESSORS =
|
||||
ifdef USE_JSOP_ACCESSORS
|
||||
DEFINES += -DUSE_JSOP_ACCESSORS
|
||||
ACCESSOR_OPT = --use-jsop-accessors
|
||||
else
|
||||
ACCESSOR_OPT =
|
||||
endif
|
||||
|
||||
# Need this to find all our DOM source files.
|
||||
include $(topsrcdir)/dom/dom-config.mk
|
||||
|
||||
|
@ -106,7 +97,7 @@ $(binding_header_files): %Binding.h: $(bindinggen_dependencies) \
|
|||
$(NULL)
|
||||
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
|
||||
$(PLY_INCLUDE) -I$(srcdir)/parser \
|
||||
$(srcdir)/BindingGen.py $(ACCESSOR_OPT) header \
|
||||
$(srcdir)/BindingGen.py header \
|
||||
$(srcdir)/Bindings.conf $*Binding \
|
||||
$*.webidl
|
||||
|
||||
|
@ -115,7 +106,7 @@ $(binding_cpp_files): %Binding.cpp: $(bindinggen_dependencies) \
|
|||
$(NULL)
|
||||
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
|
||||
$(PLY_INCLUDE) -I$(srcdir)/parser \
|
||||
$(srcdir)/BindingGen.py $(ACCESSOR_OPT) cpp \
|
||||
$(srcdir)/BindingGen.py cpp \
|
||||
$(srcdir)/Bindings.conf $*Binding \
|
||||
$*.webidl
|
||||
|
||||
|
@ -141,7 +132,7 @@ ParserResults.pkl: $(globalgen_dependencies) \
|
|||
$(all_webidl_files)
|
||||
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(topsrcdir)/config/pythonpath.py \
|
||||
$(PLY_INCLUDE) -I$(srcdir)/parser \
|
||||
$(srcdir)/GlobalGen.py $(ACCESSOR_OPT) $(srcdir)/Bindings.conf . \
|
||||
$(srcdir)/GlobalGen.py $(srcdir)/Bindings.conf . \
|
||||
--cachedir=$(CACHE_DIR) \
|
||||
$(all_webidl_files)
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче