| Index: mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/module.py b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| deleted file mode 100644
|
| index 8e52924f27d22cd2615559c29542691301384950..0000000000000000000000000000000000000000
|
| --- a/mojo/public/tools/bindings/pylib/mojom/generate/module.py
|
| +++ /dev/null
|
| @@ -1,500 +0,0 @@
|
| -# Copyright 2013 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -# This module's classes provide an interface to mojo modules. Modules are
|
| -# collections of interfaces and structs to be used by mojo ipc clients and
|
| -# servers.
|
| -#
|
| -# A simple interface would be created this way:
|
| -# module = mojom.generate.module.Module('Foo')
|
| -# interface = module.AddInterface('Bar')
|
| -# method = interface.AddMethod('Tat', 0)
|
| -# method.AddParameter('baz', 0, mojom.INT32)
|
| -
|
| -
|
| -class Kind(object):
|
| - def __init__(self, spec=None):
|
| - self.spec = spec
|
| - self.parent_kind = None
|
| -
|
| -
|
| -class ReferenceKind(Kind):
|
| - """ReferenceKind represents pointer types and handle types.
|
| - A type is nullable if null (for pointer types) or invalid handle (for handle
|
| - types) is a legal value for the type.
|
| - """
|
| -
|
| - def __init__(self, spec=None, is_nullable=False):
|
| - assert spec is None or is_nullable == spec.startswith('?')
|
| - Kind.__init__(self, spec)
|
| - self.is_nullable = is_nullable
|
| - self.shared_definition = {}
|
| -
|
| - def MakeNullableKind(self):
|
| - assert not self.is_nullable
|
| -
|
| - if self == STRING:
|
| - return NULLABLE_STRING
|
| - if self == HANDLE:
|
| - return NULLABLE_HANDLE
|
| - if self == DCPIPE:
|
| - return NULLABLE_DCPIPE
|
| - if self == DPPIPE:
|
| - return NULLABLE_DPPIPE
|
| - if self == MSGPIPE:
|
| - return NULLABLE_MSGPIPE
|
| - if self == SHAREDBUFFER:
|
| - return NULLABLE_SHAREDBUFFER
|
| -
|
| - nullable_kind = type(self)()
|
| - nullable_kind.shared_definition = self.shared_definition
|
| - if self.spec is not None:
|
| - nullable_kind.spec = '?' + self.spec
|
| - nullable_kind.is_nullable = True
|
| -
|
| - return nullable_kind
|
| -
|
| - @classmethod
|
| - def AddSharedProperty(cls, name):
|
| - """Adds a property |name| to |cls|, which accesses the corresponding item in
|
| - |shared_definition|.
|
| -
|
| - The reason of adding such indirection is to enable sharing definition
|
| - between a reference kind and its nullable variation. For example:
|
| - a = Struct('test_struct_1')
|
| - b = a.MakeNullableKind()
|
| - a.name = 'test_struct_2'
|
| - print b.name # Outputs 'test_struct_2'.
|
| - """
|
| - def Get(self):
|
| - return self.shared_definition[name]
|
| -
|
| - def Set(self, value):
|
| - self.shared_definition[name] = value
|
| -
|
| - setattr(cls, name, property(Get, Set))
|
| -
|
| -
|
| -# Initialize the set of primitive types. These can be accessed by clients.
|
| -BOOL = Kind('b')
|
| -INT8 = Kind('i8')
|
| -INT16 = Kind('i16')
|
| -INT32 = Kind('i32')
|
| -INT64 = Kind('i64')
|
| -UINT8 = Kind('u8')
|
| -UINT16 = Kind('u16')
|
| -UINT32 = Kind('u32')
|
| -UINT64 = Kind('u64')
|
| -FLOAT = Kind('f')
|
| -DOUBLE = Kind('d')
|
| -STRING = ReferenceKind('s')
|
| -HANDLE = ReferenceKind('h')
|
| -DCPIPE = ReferenceKind('h:d:c')
|
| -DPPIPE = ReferenceKind('h:d:p')
|
| -MSGPIPE = ReferenceKind('h:m')
|
| -SHAREDBUFFER = ReferenceKind('h:s')
|
| -NULLABLE_STRING = ReferenceKind('?s', True)
|
| -NULLABLE_HANDLE = ReferenceKind('?h', True)
|
| -NULLABLE_DCPIPE = ReferenceKind('?h:d:c', True)
|
| -NULLABLE_DPPIPE = ReferenceKind('?h:d:p', True)
|
| -NULLABLE_MSGPIPE = ReferenceKind('?h:m', True)
|
| -NULLABLE_SHAREDBUFFER = ReferenceKind('?h:s', True)
|
| -
|
| -
|
| -# Collection of all Primitive types
|
| -PRIMITIVES = (
|
| - BOOL,
|
| - INT8,
|
| - INT16,
|
| - INT32,
|
| - INT64,
|
| - UINT8,
|
| - UINT16,
|
| - UINT32,
|
| - UINT64,
|
| - FLOAT,
|
| - DOUBLE,
|
| - STRING,
|
| - HANDLE,
|
| - DCPIPE,
|
| - DPPIPE,
|
| - MSGPIPE,
|
| - SHAREDBUFFER,
|
| - NULLABLE_STRING,
|
| - NULLABLE_HANDLE,
|
| - NULLABLE_DCPIPE,
|
| - NULLABLE_DPPIPE,
|
| - NULLABLE_MSGPIPE,
|
| - NULLABLE_SHAREDBUFFER
|
| -)
|
| -
|
| -
|
| -class NamedValue(object):
|
| - def __init__(self, module, parent_kind, name):
|
| - self.module = module
|
| - self.namespace = module.namespace
|
| - self.parent_kind = parent_kind
|
| - self.name = name
|
| - self.imported_from = None
|
| -
|
| - def GetSpec(self):
|
| - return (self.namespace + '.' +
|
| - (self.parent_kind and (self.parent_kind.name + '.') or "") +
|
| - self.name)
|
| -
|
| -
|
| -class BuiltinValue(object):
|
| - def __init__(self, value):
|
| - self.value = value
|
| -
|
| -
|
| -class ConstantValue(NamedValue):
|
| - def __init__(self, module, parent_kind, constant):
|
| - NamedValue.__init__(self, module, parent_kind, constant.name)
|
| - self.constant = constant
|
| -
|
| -
|
| -class EnumValue(NamedValue):
|
| - def __init__(self, module, enum, field):
|
| - NamedValue.__init__(self, module, enum.parent_kind, field.name)
|
| - self.enum = enum
|
| -
|
| - def GetSpec(self):
|
| - return (self.namespace + '.' +
|
| - (self.parent_kind and (self.parent_kind.name + '.') or "") +
|
| - self.enum.name + '.' + self.name)
|
| -
|
| -
|
| -class Constant(object):
|
| - def __init__(self, name=None, kind=None, value=None):
|
| - self.name = name
|
| - self.kind = kind
|
| - self.value = value
|
| -
|
| -
|
| -class Field(object):
|
| - def __init__(self, name=None, kind=None, ordinal=None, default=None):
|
| - self.name = name
|
| - self.kind = kind
|
| - self.ordinal = ordinal
|
| - self.default = default
|
| -
|
| -
|
| -class Struct(ReferenceKind):
|
| - ReferenceKind.AddSharedProperty('name')
|
| - ReferenceKind.AddSharedProperty('module')
|
| - ReferenceKind.AddSharedProperty('imported_from')
|
| - ReferenceKind.AddSharedProperty('fields')
|
| -
|
| - def __init__(self, name=None, module=None):
|
| - if name is not None:
|
| - spec = 'x:' + name
|
| - else:
|
| - spec = None
|
| - ReferenceKind.__init__(self, spec)
|
| - self.name = name
|
| - self.module = module
|
| - self.imported_from = None
|
| - self.fields = []
|
| -
|
| - def AddField(self, name, kind, ordinal=None, default=None):
|
| - field = Field(name, kind, ordinal, default)
|
| - self.fields.append(field)
|
| - return field
|
| -
|
| -
|
| -class Union(ReferenceKind):
|
| - ReferenceKind.AddSharedProperty('name')
|
| - ReferenceKind.AddSharedProperty('module')
|
| - ReferenceKind.AddSharedProperty('imported_from')
|
| - ReferenceKind.AddSharedProperty('fields')
|
| -
|
| - def __init__(self, name=None, module=None):
|
| - if name is not None:
|
| - spec = 'x:' + name
|
| - else:
|
| - spec = None
|
| - ReferenceKind.__init__(self, spec)
|
| - self.name = name
|
| - self.module = module
|
| - self.imported_from = None
|
| - self.fields = []
|
| -
|
| - def AddField(self, name, kind, ordinal=None):
|
| - field = Field(name, kind, ordinal, default=None)
|
| - self.fields.append(field)
|
| - return field
|
| -
|
| -
|
| -class Array(ReferenceKind):
|
| - ReferenceKind.AddSharedProperty('kind')
|
| - ReferenceKind.AddSharedProperty('length')
|
| -
|
| - def __init__(self, kind=None, length=None):
|
| - if kind is not None:
|
| - if length is not None:
|
| - spec = 'a%d:%s' % (length, kind.spec)
|
| - else:
|
| - spec = 'a:%s' % kind.spec
|
| -
|
| - ReferenceKind.__init__(self, spec)
|
| - else:
|
| - ReferenceKind.__init__(self)
|
| - self.kind = kind
|
| - self.length = length
|
| -
|
| -
|
| -class Map(ReferenceKind):
|
| - ReferenceKind.AddSharedProperty('key_kind')
|
| - ReferenceKind.AddSharedProperty('value_kind')
|
| -
|
| - def __init__(self, key_kind=None, value_kind=None):
|
| - if (key_kind is not None and value_kind is not None):
|
| - ReferenceKind.__init__(self,
|
| - 'm[' + key_kind.spec + '][' + value_kind.spec +
|
| - ']')
|
| - if IsNullableKind(key_kind):
|
| - raise Exception("Nullable kinds can not be keys in maps.")
|
| - if IsStructKind(key_kind):
|
| - # TODO(erg): It would sometimes be nice if we could key on struct
|
| - # values. However, what happens if the struct has a handle in it? Or
|
| - # non-copyable data like an array?
|
| - raise Exception("Structs can not be keys in maps.")
|
| - if IsAnyHandleKind(key_kind):
|
| - raise Exception("Handles can not be keys in maps.")
|
| - if IsArrayKind(key_kind):
|
| - raise Exception("Arrays can not be keys in maps.")
|
| - else:
|
| - ReferenceKind.__init__(self)
|
| -
|
| - self.key_kind = key_kind
|
| - self.value_kind = value_kind
|
| -
|
| -
|
| -class InterfaceRequest(ReferenceKind):
|
| - ReferenceKind.AddSharedProperty('kind')
|
| -
|
| - def __init__(self, kind=None):
|
| - if kind is not None:
|
| - if not isinstance(kind, Interface):
|
| - raise Exception(
|
| - "Interface request requires %r to be an interface." % kind.spec)
|
| - ReferenceKind.__init__(self, 'r:' + kind.spec)
|
| - else:
|
| - ReferenceKind.__init__(self)
|
| - self.kind = kind
|
| -
|
| -
|
| -class Parameter(object):
|
| - def __init__(self, name=None, kind=None, ordinal=None, default=None):
|
| - self.name = name
|
| - self.ordinal = ordinal
|
| - self.kind = kind
|
| - self.default = default
|
| -
|
| -
|
| -class Method(object):
|
| - def __init__(self, interface, name, ordinal=None):
|
| - self.interface = interface
|
| - self.name = name
|
| - self.ordinal = ordinal
|
| - self.parameters = []
|
| - self.response_parameters = None
|
| -
|
| - def AddParameter(self, name, kind, ordinal=None, default=None):
|
| - parameter = Parameter(name, kind, ordinal, default)
|
| - self.parameters.append(parameter)
|
| - return parameter
|
| -
|
| - def AddResponseParameter(self, name, kind, ordinal=None, default=None):
|
| - if self.response_parameters == None:
|
| - self.response_parameters = []
|
| - parameter = Parameter(name, kind, ordinal, default)
|
| - self.response_parameters.append(parameter)
|
| - return parameter
|
| -
|
| -
|
| -class Interface(ReferenceKind):
|
| - ReferenceKind.AddSharedProperty('module')
|
| - ReferenceKind.AddSharedProperty('name')
|
| - ReferenceKind.AddSharedProperty('imported_from')
|
| - ReferenceKind.AddSharedProperty('client')
|
| - ReferenceKind.AddSharedProperty('methods')
|
| -
|
| - def __init__(self, name=None, client=None, module=None):
|
| - if name is not None:
|
| - spec = 'x:' + name
|
| - else:
|
| - spec = None
|
| - ReferenceKind.__init__(self, spec)
|
| - self.module = module
|
| - self.name = name
|
| - self.imported_from = None
|
| - self.client = client
|
| - self.methods = []
|
| -
|
| - def AddMethod(self, name, ordinal=None):
|
| - method = Method(self, name, ordinal=ordinal)
|
| - self.methods.append(method)
|
| - return method
|
| -
|
| -
|
| -class EnumField(object):
|
| - def __init__(self, name=None, value=None):
|
| - self.name = name
|
| - self.value = value
|
| -
|
| -
|
| -class Enum(Kind):
|
| - def __init__(self, name=None, module=None):
|
| - self.module = module
|
| - self.name = name
|
| - self.imported_from = None
|
| - if name is not None:
|
| - spec = 'x:' + name
|
| - else:
|
| - spec = None
|
| - Kind.__init__(self, spec)
|
| - self.fields = []
|
| -
|
| -
|
| -class Module(object):
|
| - def __init__(self, name=None, namespace=None):
|
| - self.name = name
|
| - self.path = name
|
| - self.namespace = namespace
|
| - self.structs = []
|
| - self.unions = []
|
| - self.interfaces = []
|
| - self.kinds = {}
|
| -
|
| - def AddInterface(self, name):
|
| - interface = Interface(name, module=self)
|
| - self.interfaces.append(interface)
|
| - return interface
|
| -
|
| - def AddStruct(self, name):
|
| - struct = Struct(name, module=self)
|
| - self.structs.append(struct)
|
| - return struct
|
| -
|
| - def AddUnion(self, name):
|
| - union = Union(name, module=self)
|
| - self.unions.append(union)
|
| - return union
|
| -
|
| -
|
| -def IsBoolKind(kind):
|
| - return kind.spec == BOOL.spec
|
| -
|
| -
|
| -def IsFloatKind(kind):
|
| - return kind.spec == FLOAT.spec
|
| -
|
| -
|
| -def IsStringKind(kind):
|
| - return kind.spec == STRING.spec or kind.spec == NULLABLE_STRING.spec
|
| -
|
| -
|
| -def IsHandleKind(kind):
|
| - return kind.spec == HANDLE.spec or kind.spec == NULLABLE_HANDLE.spec
|
| -
|
| -
|
| -def IsDataPipeConsumerKind(kind):
|
| - return kind.spec == DCPIPE.spec or kind.spec == NULLABLE_DCPIPE.spec
|
| -
|
| -
|
| -def IsDataPipeProducerKind(kind):
|
| - return kind.spec == DPPIPE.spec or kind.spec == NULLABLE_DPPIPE.spec
|
| -
|
| -
|
| -def IsMessagePipeKind(kind):
|
| - return kind.spec == MSGPIPE.spec or kind.spec == NULLABLE_MSGPIPE.spec
|
| -
|
| -
|
| -def IsSharedBufferKind(kind):
|
| - return (kind.spec == SHAREDBUFFER.spec or
|
| - kind.spec == NULLABLE_SHAREDBUFFER.spec)
|
| -
|
| -
|
| -def IsStructKind(kind):
|
| - return isinstance(kind, Struct)
|
| -
|
| -
|
| -def IsArrayKind(kind):
|
| - return isinstance(kind, Array)
|
| -
|
| -
|
| -def IsInterfaceKind(kind):
|
| - return isinstance(kind, Interface)
|
| -
|
| -
|
| -def IsInterfaceRequestKind(kind):
|
| - return isinstance(kind, InterfaceRequest)
|
| -
|
| -
|
| -def IsEnumKind(kind):
|
| - return isinstance(kind, Enum)
|
| -
|
| -
|
| -def IsReferenceKind(kind):
|
| - return isinstance(kind, ReferenceKind)
|
| -
|
| -
|
| -def IsNullableKind(kind):
|
| - return IsReferenceKind(kind) and kind.is_nullable
|
| -
|
| -
|
| -def IsMapKind(kind):
|
| - return isinstance(kind, Map)
|
| -
|
| -
|
| -def IsObjectKind(kind):
|
| - return (IsStructKind(kind) or IsArrayKind(kind) or IsStringKind(kind) or
|
| - IsMapKind(kind))
|
| -
|
| -
|
| -def IsNonInterfaceHandleKind(kind):
|
| - return (IsHandleKind(kind) or
|
| - IsDataPipeConsumerKind(kind) or
|
| - IsDataPipeProducerKind(kind) or
|
| - IsMessagePipeKind(kind) or
|
| - IsSharedBufferKind(kind))
|
| -
|
| -
|
| -def IsAnyHandleKind(kind):
|
| - return (IsNonInterfaceHandleKind(kind) or
|
| - IsInterfaceKind(kind) or
|
| - IsInterfaceRequestKind(kind))
|
| -
|
| -
|
| -def IsMoveOnlyKind(kind):
|
| - return IsObjectKind(kind) or IsAnyHandleKind(kind)
|
| -
|
| -
|
| -def IsCloneableKind(kind):
|
| - def ContainsHandles(kind, visited_kinds):
|
| - if kind in visited_kinds:
|
| - # No need to examine the kind again.
|
| - return False
|
| - visited_kinds.add(kind)
|
| - if IsAnyHandleKind(kind):
|
| - return True
|
| - if IsArrayKind(kind):
|
| - return ContainsHandles(kind.kind, visited_kinds)
|
| - if IsStructKind(kind):
|
| - for field in kind.fields:
|
| - if ContainsHandles(field.kind, visited_kinds):
|
| - return True
|
| - return False
|
| -
|
| - return not ContainsHandles(kind, set())
|
| -
|
| -
|
| -def HasCallbacks(interface):
|
| - for method in interface.methods:
|
| - if method.response_parameters != None:
|
| - return True
|
| - return False
|
| -
|
|
|