summaryrefslogtreecommitdiffstats
path: root/mojo/public/bindings/pylib/generate/mojom.py
diff options
context:
space:
mode:
authorviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-25 00:49:41 +0000
committerviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-25 00:49:41 +0000
commitb6c374ad7e3f80aa7c69ee05710d75ddbe216f1e (patch)
tree31db0780e608cdd0d7ac616796f013781fe8acd6 /mojo/public/bindings/pylib/generate/mojom.py
parent1f255d0f4821968037e947d65dec6eb7bf84d8a0 (diff)
downloadchromium_src-b6c374ad7e3f80aa7c69ee05710d75ddbe216f1e.zip
chromium_src-b6c374ad7e3f80aa7c69ee05710d75ddbe216f1e.tar.gz
chromium_src-b6c374ad7e3f80aa7c69ee05710d75ddbe216f1e.tar.bz2
Mojo: mojom: Move generation modules to pylib/generate/.
(This parallels pylib/parse.) Keep the language-specific generators themselves in generators/. Note that running mojom_bindings_generator.py -g generators/cpp_generator.py foo.mojom now works. R=darin@chromium.org Review URL: https://codereview.chromium.org/147423003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@247041 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo/public/bindings/pylib/generate/mojom.py')
-rw-r--r--mojo/public/bindings/pylib/generate/mojom.py151
1 files changed, 151 insertions, 0 deletions
diff --git a/mojo/public/bindings/pylib/generate/mojom.py b/mojo/public/bindings/pylib/generate/mojom.py
new file mode 100644
index 0000000..f253aba
--- /dev/null
+++ b/mojo/public/bindings/pylib/generate/mojom.py
@@ -0,0 +1,151 @@
+# 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.
+
+# mojom'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.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
+
+
+# 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 = Kind('s')
+HANDLE = Kind('h')
+DCPIPE = Kind('h:d:c')
+DPPIPE = Kind('h:d:p')
+MSGPIPE = Kind('h:m')
+
+
+# Collection of all Primitive types
+PRIMITIVES = (
+ BOOL,
+ INT8,
+ INT16,
+ INT32,
+ INT64,
+ UINT8,
+ UINT16,
+ UINT32,
+ UINT64,
+ FLOAT,
+ DOUBLE,
+ STRING,
+ HANDLE,
+ DCPIPE,
+ DPPIPE,
+ MSGPIPE
+)
+
+
+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(Kind):
+ def __init__(self, name = None):
+ self.name = name
+ if name != None:
+ spec = 'x:' + name
+ else:
+ spec = None
+ Kind.__init__(self, spec)
+ self.fields = []
+
+ def AddField(self, name, kind, ordinal = None, default = None):
+ field = Field(name, kind, ordinal, default)
+ self.fields.append(field)
+ return field
+
+
+class Array(Kind):
+ def __init__(self, kind = None):
+ self.kind = kind
+ if kind != None:
+ Kind.__init__(self, 'a:' + kind.spec)
+ else:
+ Kind.__init__(self)
+
+
+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, name = None, ordinal = None):
+ self.name = name
+ self.ordinal = ordinal
+ self.parameters = []
+
+ def AddParameter(self, name, kind, ordinal = None, default = None):
+ parameter = Parameter(name, kind, ordinal, default)
+ self.parameters.append(parameter)
+ return parameter
+
+
+class Interface(object):
+ def __init__(self, name = None, peer = None):
+ self.name = name
+ self.peer = peer
+ self.methods = []
+
+ def AddMethod(self, name, ordinal = None):
+ method = Method(name, 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(object):
+ def __init__(self, name = None):
+ self.name = name
+ self.fields = []
+
+
+class Module(object):
+ def __init__(self, name = None, namespace = None):
+ self.name = name
+ self.namespace = namespace
+ self.structs = []
+ self.interfaces = []
+
+ def AddInterface(self, name):
+ interface = Interface(name);
+ self.interfaces.append(interface)
+ return interface;
+
+ def AddStruct(self, name):
+ struct = Struct(name)
+ self.structs.append(struct)
+ return struct;