mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Port some code to Python3
This commit is contained in:
parent
f73370088b
commit
a627dde0d0
24 changed files with 1439 additions and 2341 deletions
|
@ -344,7 +344,7 @@ class CGMethodCall(CGThing):
|
|||
distinguishingArg = "HandleValue::from_raw(args.get(%d))" % distinguishingIndex
|
||||
|
||||
def pickFirstSignature(condition, filterLambda):
|
||||
sigs = filter(filterLambda, possibleSignatures)
|
||||
sigs = list(filter(filterLambda, possibleSignatures))
|
||||
assert len(sigs) < 2
|
||||
if len(sigs) > 0:
|
||||
call = getPerSignatureCall(sigs[0], distinguishingIndex)
|
||||
|
@ -2117,7 +2117,7 @@ class CGImports(CGWrapper):
|
|||
members += [constructor]
|
||||
|
||||
if d.proxy:
|
||||
members += [o for o in d.operations.values() if o]
|
||||
members += [o for o in list(d.operations.values()) if o]
|
||||
|
||||
for m in members:
|
||||
if m.isMethod():
|
||||
|
@ -2557,7 +2557,7 @@ def UnionTypes(descriptors, dictionaries, callbacks, typedefs, config):
|
|||
])
|
||||
|
||||
# Sort unionStructs by key, retrieve value
|
||||
unionStructs = (i[1] for i in sorted(unionStructs.items(), key=operator.itemgetter(0)))
|
||||
unionStructs = (i[1] for i in sorted(list(unionStructs.items()), key=operator.itemgetter(0)))
|
||||
|
||||
return CGImports(CGList(unionStructs, "\n\n"),
|
||||
descriptors=[],
|
||||
|
@ -4455,9 +4455,10 @@ class CGEnum(CGThing):
|
|||
pub enum %s {
|
||||
%s
|
||||
}
|
||||
""" % (ident, ",\n ".join(map(getEnumValueName, enum.values())))
|
||||
""" % (ident, ",\n ".join(map(getEnumValueName, list(enum.values()))))
|
||||
|
||||
pairs = ",\n ".join(['("%s", super::%s::%s)' % (val, ident, getEnumValueName(val)) for val in enum.values()])
|
||||
pairs = ",\n ".join(['("%s", super::%s::%s)' % (val, ident, getEnumValueName(val))
|
||||
for val in list(enum.values())])
|
||||
|
||||
inner = string.Template("""\
|
||||
use crate::dom::bindings::conversions::ConversionResult;
|
||||
|
@ -4640,9 +4641,8 @@ class CGUnionStruct(CGThing):
|
|||
return "Rc"
|
||||
return ""
|
||||
|
||||
templateVars = map(lambda t: (getUnionTypeTemplateVars(t, self.descriptorProvider),
|
||||
getTypeWrapper(t)),
|
||||
self.type.flatMemberTypes)
|
||||
templateVars = [(getUnionTypeTemplateVars(t, self.descriptorProvider),
|
||||
getTypeWrapper(t)) for t in self.type.flatMemberTypes]
|
||||
enumValues = [
|
||||
" %s(%s)," % (v["name"], "%s<%s>" % (wrapper, v["typeName"]) if wrapper else v["typeName"])
|
||||
for (v, wrapper) in templateVars
|
||||
|
@ -4701,7 +4701,7 @@ class CGUnionConversionStruct(CGThing):
|
|||
" Ok(None) => (),\n"
|
||||
"}\n") % (self.type, name, self.type, name)
|
||||
|
||||
interfaceMemberTypes = filter(lambda t: t.isNonCallbackInterface(), memberTypes)
|
||||
interfaceMemberTypes = [t for t in memberTypes if t.isNonCallbackInterface()]
|
||||
if len(interfaceMemberTypes) > 0:
|
||||
typeNames = [get_name(memberType) for memberType in interfaceMemberTypes]
|
||||
interfaceObject = CGList(CGGeneric(get_match(typeName)) for typeName in typeNames)
|
||||
|
@ -4709,7 +4709,7 @@ class CGUnionConversionStruct(CGThing):
|
|||
else:
|
||||
interfaceObject = None
|
||||
|
||||
arrayObjectMemberTypes = filter(lambda t: t.isSequence(), memberTypes)
|
||||
arrayObjectMemberTypes = [t for t in memberTypes if t.isSequence()]
|
||||
if len(arrayObjectMemberTypes) > 0:
|
||||
assert len(arrayObjectMemberTypes) == 1
|
||||
typeName = arrayObjectMemberTypes[0].name
|
||||
|
@ -4718,7 +4718,7 @@ class CGUnionConversionStruct(CGThing):
|
|||
else:
|
||||
arrayObject = None
|
||||
|
||||
callbackMemberTypes = filter(lambda t: t.isCallback() or t.isCallbackInterface(), memberTypes)
|
||||
callbackMemberTypes = [t for t in memberTypes if t.isCallback() or t.isCallbackInterface()]
|
||||
if len(callbackMemberTypes) > 0:
|
||||
assert len(callbackMemberTypes) == 1
|
||||
typeName = callbackMemberTypes[0].name
|
||||
|
@ -4726,7 +4726,7 @@ class CGUnionConversionStruct(CGThing):
|
|||
else:
|
||||
callbackObject = None
|
||||
|
||||
dictionaryMemberTypes = filter(lambda t: t.isDictionary(), memberTypes)
|
||||
dictionaryMemberTypes = [t for t in memberTypes if t.isDictionary()]
|
||||
if len(dictionaryMemberTypes) > 0:
|
||||
assert len(dictionaryMemberTypes) == 1
|
||||
typeName = dictionaryMemberTypes[0].name
|
||||
|
@ -4735,7 +4735,7 @@ class CGUnionConversionStruct(CGThing):
|
|||
else:
|
||||
dictionaryObject = None
|
||||
|
||||
objectMemberTypes = filter(lambda t: t.isObject(), memberTypes)
|
||||
objectMemberTypes = [t for t in memberTypes if t.isObject()]
|
||||
if len(objectMemberTypes) > 0:
|
||||
assert len(objectMemberTypes) == 1
|
||||
typeName = objectMemberTypes[0].name
|
||||
|
@ -4744,7 +4744,7 @@ class CGUnionConversionStruct(CGThing):
|
|||
else:
|
||||
object = None
|
||||
|
||||
mozMapMemberTypes = filter(lambda t: t.isRecord(), memberTypes)
|
||||
mozMapMemberTypes = [t for t in memberTypes if t.isRecord()]
|
||||
if len(mozMapMemberTypes) > 0:
|
||||
assert len(mozMapMemberTypes) == 1
|
||||
typeName = mozMapMemberTypes[0].name
|
||||
|
@ -4790,9 +4790,9 @@ class CGUnionConversionStruct(CGThing):
|
|||
typename = get_name(memberType)
|
||||
return CGGeneric(get_match(typename))
|
||||
other = []
|
||||
stringConversion = map(getStringOrPrimitiveConversion, stringTypes)
|
||||
numericConversion = map(getStringOrPrimitiveConversion, numericTypes)
|
||||
booleanConversion = map(getStringOrPrimitiveConversion, booleanTypes)
|
||||
stringConversion = list(map(getStringOrPrimitiveConversion, stringTypes))
|
||||
numericConversion = list(map(getStringOrPrimitiveConversion, numericTypes))
|
||||
booleanConversion = list(map(getStringOrPrimitiveConversion, booleanTypes))
|
||||
if stringConversion:
|
||||
if booleanConversion:
|
||||
other.append(CGIfWrapper("value.get().is_boolean()", booleanConversion[0]))
|
||||
|
@ -5958,7 +5958,7 @@ class CGInterfaceTrait(CGThing):
|
|||
rettype)
|
||||
|
||||
if descriptor.proxy:
|
||||
for name, operation in descriptor.operations.iteritems():
|
||||
for name, operation in descriptor.operations.items():
|
||||
if not operation or operation.isStringifier():
|
||||
continue
|
||||
|
||||
|
@ -6488,7 +6488,7 @@ class CGDescriptor(CGThing):
|
|||
post='\n')
|
||||
|
||||
if reexports:
|
||||
reexports = ', '.join(map(lambda name: reexportedName(name), reexports))
|
||||
reexports = ', '.join([reexportedName(name) for name in reexports])
|
||||
cgThings = CGList([CGGeneric('pub use self::%s::{%s};' % (toBindingNamespace(descriptor.name), reexports)),
|
||||
cgThings], '\n')
|
||||
|
||||
|
@ -7824,7 +7824,7 @@ impl Clone for TopTypeId {
|
|||
# TypeId enum.
|
||||
return "%s(%sTypeId)" % (name, name) if name in hierarchy else name
|
||||
|
||||
for base, derived in hierarchy.iteritems():
|
||||
for base, derived in hierarchy.items():
|
||||
variants = []
|
||||
if config.getDescriptor(base).concrete:
|
||||
variants.append(CGGeneric(base))
|
||||
|
|
|
@ -73,7 +73,7 @@ class Configuration:
|
|||
def getDescriptors(self, **filters):
|
||||
"""Gets the descriptors that match the given filters."""
|
||||
curr = self.descriptors
|
||||
for key, val in filters.iteritems():
|
||||
for key, val in filters.items():
|
||||
if key == 'webIDLFile':
|
||||
def getter(x):
|
||||
return x.interface.filename()
|
||||
|
@ -104,14 +104,14 @@ class Configuration:
|
|||
else:
|
||||
def getter(x):
|
||||
return getattr(x, key)
|
||||
curr = filter(lambda x: getter(x) == val, curr)
|
||||
curr = [x for x in curr if getter(x) == val]
|
||||
return curr
|
||||
|
||||
def getEnums(self, webIDLFile):
|
||||
return filter(lambda e: e.filename() == webIDLFile, self.enums)
|
||||
return [e for e in self.enums if e.filename() == webIDLFile]
|
||||
|
||||
def getTypedefs(self, webIDLFile):
|
||||
return filter(lambda e: e.filename() == webIDLFile, self.typedefs)
|
||||
return [e for e in self.typedefs if e.filename() == webIDLFile]
|
||||
|
||||
@staticmethod
|
||||
def _filterForFile(items, webIDLFile=""):
|
||||
|
@ -119,7 +119,7 @@ class Configuration:
|
|||
if not webIDLFile:
|
||||
return items
|
||||
|
||||
return filter(lambda x: x.filename() == webIDLFile, items)
|
||||
return [x for x in items if x.filename() == webIDLFile]
|
||||
|
||||
def getDictionaries(self, webIDLFile=""):
|
||||
return self._filterForFile(self.dictionaries, webIDLFile=webIDLFile)
|
||||
|
@ -327,7 +327,7 @@ class Descriptor(DescriptorProvider):
|
|||
if config == '*':
|
||||
iface = self.interface
|
||||
while iface:
|
||||
add('all', map(lambda m: m.name, iface.members), attribute)
|
||||
add('all', [m.name for m in iface.members], attribute)
|
||||
iface = iface.parent
|
||||
else:
|
||||
add('all', [config], attribute)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
""" A WebIDL parser. """
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
from ply import lex, yacc
|
||||
import re
|
||||
import os
|
||||
|
@ -57,7 +57,7 @@ def enum(*names, **kw):
|
|||
|
||||
if "base" not in kw:
|
||||
return Foo(names)
|
||||
return Foo(chain(kw["base"].attrs.keys(), names))
|
||||
return Foo(chain(list(kw["base"].attrs.keys()), names))
|
||||
|
||||
|
||||
class WebIDLError(Exception):
|
||||
|
@ -124,6 +124,9 @@ class BuiltinLocation(object):
|
|||
return (isinstance(other, BuiltinLocation) and
|
||||
self.msg == other.msg)
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self.msg)
|
||||
|
||||
def filename(self):
|
||||
return '<builtin>'
|
||||
|
||||
|
@ -2360,6 +2363,9 @@ class IDLNullableType(IDLParametrizedType):
|
|||
def __eq__(self, other):
|
||||
return isinstance(other, IDLNullableType) and self.inner == other.inner
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self.inner)
|
||||
|
||||
def __str__(self):
|
||||
return self.inner.__str__() + "OrNull"
|
||||
|
||||
|
@ -2522,6 +2528,9 @@ class IDLSequenceType(IDLParametrizedType):
|
|||
def __eq__(self, other):
|
||||
return isinstance(other, IDLSequenceType) and self.inner == other.inner
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self.inner)
|
||||
|
||||
def __str__(self):
|
||||
return self.inner.__str__() + "Sequence"
|
||||
|
||||
|
@ -2933,6 +2942,9 @@ class IDLWrapperType(IDLType):
|
|||
self._identifier == other._identifier and
|
||||
self.builtin == other.builtin)
|
||||
|
||||
def __hash__(self):
|
||||
return hash((self._identifier, self.builtin))
|
||||
|
||||
def __str__(self):
|
||||
return str(self.name) + " (Wrapper)"
|
||||
|
||||
|
@ -3301,6 +3313,12 @@ class IDLBuiltinType(IDLType):
|
|||
return "MaybeShared" + str(self.name)
|
||||
return str(self.name)
|
||||
|
||||
def __eq__(self, other):
|
||||
return other and self.location == other.location and self.name == other.name and self._typeTag == other._typeTag
|
||||
|
||||
def __hash__(self):
|
||||
return hash((self.location, self.name, self._typeTag))
|
||||
|
||||
def prettyName(self):
|
||||
return IDLBuiltinType.PrettyNames[self._typeTag]
|
||||
|
||||
|
@ -3628,7 +3646,7 @@ integerTypeSizes = {
|
|||
|
||||
|
||||
def matchIntegerValueToType(value):
|
||||
for type, extremes in integerTypeSizes.items():
|
||||
for type, extremes in list(integerTypeSizes.items()):
|
||||
(min, max) = extremes
|
||||
if value <= max and value >= min:
|
||||
return BuiltinTypes[type]
|
||||
|
@ -3707,7 +3725,7 @@ class IDLValue(IDLObject):
|
|||
elif self.type.isString() and type.isEnum():
|
||||
# Just keep our string, but make sure it's a valid value for this enum
|
||||
enum = type.unroll().inner
|
||||
if self.value not in enum.values():
|
||||
if self.value not in list(enum.values()):
|
||||
raise WebIDLError("'%s' is not a valid default value for enum %s"
|
||||
% (self.value, enum.identifier.name),
|
||||
[location, enum.location])
|
||||
|
@ -4789,7 +4807,7 @@ class IDLAttribute(IDLInterfaceMember):
|
|||
"CrossOriginWritable",
|
||||
"SetterThrows",
|
||||
]
|
||||
for (key, value) in self._extendedAttrDict.items():
|
||||
for (key, value) in list(self._extendedAttrDict.items()):
|
||||
if key in allowedExtAttrs:
|
||||
if value is not True:
|
||||
raise WebIDLError("[%s] with a value is currently "
|
||||
|
@ -5479,7 +5497,7 @@ class IDLMethod(IDLInterfaceMember, IDLScope):
|
|||
[attr.location])
|
||||
if identifier == "CrossOriginCallable" and self.isStatic():
|
||||
raise WebIDLError("[CrossOriginCallable] is only allowed on non-static "
|
||||
"attributes"
|
||||
"attributes",
|
||||
[attr.location, self.location])
|
||||
elif identifier == "Pure":
|
||||
if not attr.noArguments():
|
||||
|
@ -5721,6 +5739,7 @@ class Tokenizer(object):
|
|||
"FLOATLITERAL",
|
||||
"IDENTIFIER",
|
||||
"STRING",
|
||||
"COMMENTS",
|
||||
"WHITESPACE",
|
||||
"OTHER"
|
||||
]
|
||||
|
@ -5753,8 +5772,12 @@ class Tokenizer(object):
|
|||
t.value = t.value[1:-1]
|
||||
return t
|
||||
|
||||
def t_COMMENTS(self, t):
|
||||
r'(\/\*(.|\n)*?\*\/)|(\/\/.*)'
|
||||
pass
|
||||
|
||||
def t_WHITESPACE(self, t):
|
||||
r'[\t\n\r ]+|[\t\n\r ]*((//[^\n]*|/\*.*?\*/)[\t\n\r ]*)+'
|
||||
r'[\t\n\r ]+'
|
||||
pass
|
||||
|
||||
def t_ELLIPSIS(self, t):
|
||||
|
@ -5840,7 +5863,7 @@ class Tokenizer(object):
|
|||
"async": "ASYNC",
|
||||
}
|
||||
|
||||
tokens.extend(keywords.values())
|
||||
tokens.extend(list(keywords.values()))
|
||||
|
||||
def t_error(self, t):
|
||||
raise WebIDLError("Unrecognized Input",
|
||||
|
@ -5849,23 +5872,21 @@ class Tokenizer(object):
|
|||
lexpos=self.lexer.lexpos,
|
||||
filename=self.filename)])
|
||||
|
||||
def __init__(self, outputdir, lexer=None):
|
||||
def __init__(self, lexer=None):
|
||||
if lexer:
|
||||
self.lexer = lexer
|
||||
else:
|
||||
self.lexer = lex.lex(object=self,
|
||||
outputdir=outputdir,
|
||||
lextab='webidllex',
|
||||
reflags=re.DOTALL)
|
||||
self.lexer = lex.lex(object=self)
|
||||
|
||||
|
||||
class SqueakyCleanLogger(object):
|
||||
errorWhitelist = [
|
||||
# Web IDL defines the WHITESPACE token, but doesn't actually
|
||||
# Web IDL defines the WHITESPACE and COMMENTS token, but doesn't actually
|
||||
# use it ... so far.
|
||||
"Token 'WHITESPACE' defined, but not used",
|
||||
# And that means we have an unused token
|
||||
"There is 1 unused token",
|
||||
"Token 'COMMENTS' defined, but not used",
|
||||
# And that means we have unused tokens
|
||||
"There are 2 unused tokens",
|
||||
# Web IDL defines a OtherOrComma rule that's only used in
|
||||
# ExtendedAttributeInner, which we don't use yet.
|
||||
"Rule 'OtherOrComma' defined, but not used",
|
||||
|
@ -7506,22 +7527,11 @@ class Parser(Tokenizer):
|
|||
raise WebIDLError("invalid syntax", [Location(self.lexer, p.lineno, p.lexpos, self._filename)])
|
||||
|
||||
def __init__(self, outputdir='', lexer=None):
|
||||
Tokenizer.__init__(self, outputdir, lexer)
|
||||
Tokenizer.__init__(self, lexer)
|
||||
|
||||
logger = SqueakyCleanLogger()
|
||||
try:
|
||||
self.parser = yacc.yacc(module=self,
|
||||
outputdir=outputdir,
|
||||
tabmodule='webidlyacc',
|
||||
errorlog=logger,
|
||||
debug=False
|
||||
# Pickling the grammar is a speedup in
|
||||
# some cases (older Python?) but a
|
||||
# significant slowdown in others.
|
||||
# We're not pickling for now, until it
|
||||
# becomes a speedup again.
|
||||
# , picklefile='WebIDLGrammar.pkl'
|
||||
)
|
||||
self.parser = yacc.yacc(module=self, errorlog=logger, debug=False)
|
||||
finally:
|
||||
logger.reportGrammarErrors()
|
||||
|
||||
|
@ -7553,12 +7563,12 @@ class Parser(Tokenizer):
|
|||
return type
|
||||
|
||||
def parse(self, t, filename=None):
|
||||
self.lexer.input(t)
|
||||
self._filename = filename
|
||||
self.lexer.input(t.decode(encoding = 'utf-8'))
|
||||
|
||||
# for tok in iter(self.lexer.token, None):
|
||||
# print tok
|
||||
|
||||
self._filename = filename
|
||||
self._productions.extend(self.parser.parse(lexer=self.lexer, tracking=True))
|
||||
self._filename = None
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ http://www.dabeaz.com/ply/
|
|||
|
||||
Licensed under BSD.
|
||||
|
||||
This directory contains just the code and license from PLY version 3.3;
|
||||
This directory contains just the code and license from PLY version 4.0;
|
||||
the full distribution (see the URL) also contains examples, tests,
|
||||
documentation, and a longer README.
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
# PLY package
|
||||
# Author: David Beazley (dave@dabeaz.com)
|
||||
# https://dabeaz.com/ply/index.html
|
||||
|
||||
__version__ = '4.0'
|
||||
__all__ = ['lex','yacc']
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -52,7 +52,7 @@ def main():
|
|||
module = CGBindingRoot(config, prefix, filename).define()
|
||||
if module:
|
||||
with open(os.path.join(out_dir, prefix + ".rs"), "wb") as f:
|
||||
f.write(module)
|
||||
f.write(module.encode("utf-8"))
|
||||
|
||||
|
||||
def make_dir(path):
|
||||
|
@ -66,7 +66,7 @@ def generate(config, name, filename):
|
|||
root = getattr(GlobalGenRoots, name)(config)
|
||||
code = root.define()
|
||||
with open(filename, "wb") as f:
|
||||
f.write(code)
|
||||
f.write(code.encode("utf-8"))
|
||||
|
||||
|
||||
def add_css_properties_attributes(css_properties_json, parser):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue