diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-07 21:24:46 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-07 21:24:46 +0000 |
commit | e8c1efdea8f178a51e6f9dca53d94c23fd5f2193 (patch) | |
tree | 1b252752f3a9260510b21994427ec797dbf13c1d | |
parent | bcc75b8a94f273590d12ec930d6afb7fc3b66036 (diff) | |
download | chromium_src-e8c1efdea8f178a51e6f9dca53d94c23fd5f2193.zip chromium_src-e8c1efdea8f178a51e6f9dca53d94c23fd5f2193.tar.gz chromium_src-e8c1efdea8f178a51e6f9dca53d94c23fd5f2193.tar.bz2 |
Mojo: Make it possible to refer to interfaces as types
This doesn't change anything about the generated code. The generated code
remains as it would be if handle<message_pipe> were used in .mojom files.
BUG=336722
R=davemoore@chromium.org
Review URL: https://codereview.chromium.org/156633004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249785 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | mojo/examples/view_manager/view_manager.mojom | 2 | ||||
-rw-r--r-- | mojo/public/bindings/generators/mojom_cpp_generator.py | 14 | ||||
-rw-r--r-- | mojo/public/bindings/generators/mojom_js_generator.py | 8 | ||||
-rw-r--r-- | mojo/public/bindings/pylib/generate/mojom.py | 7 | ||||
-rw-r--r-- | mojo/public/bindings/pylib/generate/mojom_data.py | 2 | ||||
-rw-r--r-- | mojo/public/bindings/pylib/generate/mojom_generator.py | 2 | ||||
-rw-r--r-- | mojo/public/bindings/pylib/generate/mojom_pack.py | 2 | ||||
-rwxr-xr-x | mojo/public/bindings/pylib/parse/mojo_translate.py | 20 | ||||
-rw-r--r-- | mojo/public/bindings/tests/sample_service.mojom | 10 | ||||
-rw-r--r-- | mojo/services/gles2/command_buffer.mojom | 12 |
10 files changed, 54 insertions, 25 deletions
diff --git a/mojo/examples/view_manager/view_manager.mojom b/mojo/examples/view_manager/view_manager.mojom index 966474f..cdb3c06 100644 --- a/mojo/examples/view_manager/view_manager.mojom +++ b/mojo/examples/view_manager/view_manager.mojom @@ -22,7 +22,7 @@ interface ViewManager { [Peer=ViewManager] interface ViewManagerClient { - void OnViewCreated(handle<message_pipe> view); + void OnViewCreated(View view); }; } diff --git a/mojo/public/bindings/generators/mojom_cpp_generator.py b/mojo/public/bindings/generators/mojom_cpp_generator.py index 3ef092f..7039c18 100644 --- a/mojo/public/bindings/generators/mojom_cpp_generator.py +++ b/mojo/public/bindings/generators/mojom_cpp_generator.py @@ -35,6 +35,8 @@ def GetCppType(kind): return "%s_Data*" % kind.name if isinstance(kind, mojom.Array): return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind) + if isinstance(kind, mojom.Interface): + return GetCppType(mojom.MSGPIPE) if kind.spec == 's': return "mojo::internal::String_Data*" return _kind_to_cpp_type[kind] @@ -44,6 +46,8 @@ def GetCppArrayArgWrapperType(kind): return kind.name if isinstance(kind, mojom.Array): return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind) + if isinstance(kind, mojom.Interface): + return GetCppArrayArgWrapperType(mojom.MSGPIPE) if kind.spec == 's': return "mojo::String" return _kind_to_cpp_type[kind] @@ -53,6 +57,8 @@ def GetCppWrapperType(kind): return kind.name if isinstance(kind, mojom.Array): return "mojo::Array<%s >" % GetCppArrayArgWrapperType(kind.kind) + if isinstance(kind, mojom.Interface): + return GetCppWrapperType(mojom.MSGPIPE) if kind.spec == 's': return "mojo::String" if mojom_generator.IsHandleKind(kind): @@ -64,6 +70,8 @@ def GetCppConstWrapperType(kind): return "const %s&" % kind.name if isinstance(kind, mojom.Array): return "const mojo::Array<%s >&" % GetCppArrayArgWrapperType(kind.kind) + if isinstance(kind, mojom.Interface): + return GetCppConstWrapperType(mojom.MSGPIPE) if kind.spec == 's': return "const mojo::String&" if kind.spec == 'h': @@ -77,14 +85,16 @@ def GetCppConstWrapperType(kind): return _kind_to_cpp_type[kind] def GetCppFieldType(kind): - if mojom_generator.IsHandleKind(kind): - return _kind_to_cpp_type[kind] if isinstance(kind, mojom.Struct): return "mojo::internal::StructPointer<%s_Data>" % kind.name if isinstance(kind, mojom.Array): return "mojo::internal::ArrayPointer<%s>" % GetCppType(kind.kind) + if isinstance(kind, mojom.Interface): + return GetCppFieldType(mojom.MSGPIPE) if kind.spec == 's': return "mojo::internal::StringPointer" + if mojom_generator.IsHandleKind(kind): + return _kind_to_cpp_type[kind] return _kind_to_cpp_type[kind] def IsStructWithHandles(struct): diff --git a/mojo/public/bindings/generators/mojom_js_generator.py b/mojo/public/bindings/generators/mojom_js_generator.py index fdd0288..d99e381 100644 --- a/mojo/public/bindings/generators/mojom_js_generator.py +++ b/mojo/public/bindings/generators/mojom_js_generator.py @@ -40,6 +40,8 @@ def JavaScriptDefaultValue(field): return "null"; if isinstance(field.kind, mojom.Array): return "[]"; + if isinstance(field.kind, mojom.Interface): + return _kind_to_javascript_default_value[mojom.MSGPIPE] def JavaScriptPayloadSize(packed): @@ -79,6 +81,8 @@ def GetJavaScriptType(kind): return "new codec.PointerTo(%s)" % GetJavaScriptType(kind.name) if isinstance(kind, mojom.Array): return "new codec.ArrayOf(%s)" % GetJavaScriptType(kind.kind) + if isinstance(kind, mojom.Interface): + return GetJavaScriptType(mojom.MSGPIPE) return kind @@ -109,6 +113,8 @@ def JavaScriptDecodeSnippet(kind): return "decodeStructPointer(%s)" % GetJavaScriptType(kind.name); if isinstance(kind, mojom.Array): return "decodeArrayPointer(%s)" % GetJavaScriptType(kind.kind); + if isinstance(kind, mojom.Interface): + return JavaScriptDecodeSnippet(mojom.MSGPIPE) _kind_to_javascript_encode_snippet = { @@ -138,6 +144,8 @@ def JavaScriptEncodeSnippet(kind): return "encodeStructPointer(%s, " % GetJavaScriptType(kind.name); if isinstance(kind, mojom.Array): return "encodeArrayPointer(%s, " % GetJavaScriptType(kind.kind); + if isinstance(kind, mojom.Interface): + return JavaScriptEncodeSnippet(mojom.MSGPIPE) class Generator(mojom_generator.Generator): diff --git a/mojo/public/bindings/pylib/generate/mojom.py b/mojo/public/bindings/pylib/generate/mojom.py index f253aba..afa46ff 100644 --- a/mojo/public/bindings/pylib/generate/mojom.py +++ b/mojo/public/bindings/pylib/generate/mojom.py @@ -109,9 +109,14 @@ class Method(object): return parameter -class Interface(object): +class Interface(Kind): def __init__(self, name = None, peer = None): self.name = name + if name != None: + spec = 'x:' + name + else: + spec = None + Kind.__init__(self, spec) self.peer = peer self.methods = [] diff --git a/mojo/public/bindings/pylib/generate/mojom_data.py b/mojo/public/bindings/pylib/generate/mojom_data.py index 9723f58..258693b 100644 --- a/mojo/public/bindings/pylib/generate/mojom_data.py +++ b/mojo/public/bindings/pylib/generate/mojom_data.py @@ -136,7 +136,9 @@ def InterfaceToData(interface): def InterfaceFromData(kinds, data): interface = mojom.Interface() interface.name = data['name'] + interface.spec = 'x:' + interface.name interface.peer = data['peer'] if data.has_key('peer') else None + kinds[interface.spec] = interface interface.methods = map( lambda method: MethodFromData(kinds, method), data['methods']) if data.has_key('enums'): diff --git a/mojo/public/bindings/pylib/generate/mojom_generator.py b/mojo/public/bindings/pylib/generate/mojom_generator.py index e8c0fd5..1bf3b8b 100644 --- a/mojo/public/bindings/pylib/generate/mojom_generator.py +++ b/mojo/public/bindings/pylib/generate/mojom_generator.py @@ -38,7 +38,7 @@ def IsObjectKind(kind): return isinstance(kind, (mojom.Struct, mojom.Array)) or IsStringKind(kind) def IsHandleKind(kind): - return kind.spec.startswith('h') + return kind.spec.startswith('h') or isinstance(kind, mojom.Interface) def CamelToUnderscores(camel): s = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', camel) diff --git a/mojo/public/bindings/pylib/generate/mojom_pack.py b/mojo/public/bindings/pylib/generate/mojom_pack.py index 63b70a7..3007372 100644 --- a/mojo/public/bindings/pylib/generate/mojom_pack.py +++ b/mojo/public/bindings/pylib/generate/mojom_pack.py @@ -33,6 +33,8 @@ class PackedField(object): def GetSizeForKind(cls, kind): if isinstance(kind, mojom.Array) or isinstance(kind, mojom.Struct): return 8 + if isinstance(kind, mojom.Interface): + kind = mojom.MSGPIPE return cls.kind_to_size[kind] def __init__(self, field, ordinal): diff --git a/mojo/public/bindings/pylib/parse/mojo_translate.py b/mojo/public/bindings/pylib/parse/mojo_translate.py index 1dddf2f..71b197d 100755 --- a/mojo/public/bindings/pylib/parse/mojo_translate.py +++ b/mojo/public/bindings/pylib/parse/mojo_translate.py @@ -72,11 +72,12 @@ def MapParameters(parameters): def MapMethods(methods): out = [] - for method in methods: - if method[0] == 'METHOD': - out.append({'name': method[1], - 'parameters': MapParameters(method[2]), - 'ordinal': MapOrdinal(method[3])}) + if methods: + for method in methods: + if method[0] == 'METHOD': + out.append({'name': method[1], + 'parameters': MapParameters(method[2]), + 'ordinal': MapOrdinal(method[3])}) return out @@ -91,10 +92,11 @@ def MapEnumFields(fields): def MapEnums(enums): out = [] - for enum in enums: - if enum[0] == 'ENUM': - out.append({'name': enum[1], - 'fields': MapEnumFields(enum[2])}) + if enums: + for enum in enums: + if enum[0] == 'ENUM': + out.append({'name': enum[1], + 'fields': MapEnumFields(enum[2])}) return out diff --git a/mojo/public/bindings/tests/sample_service.mojom b/mojo/public/bindings/tests/sample_service.mojom index 41cdb10..2161582 100644 --- a/mojo/public/bindings/tests/sample_service.mojom +++ b/mojo/public/bindings/tests/sample_service.mojom @@ -45,13 +45,17 @@ struct DefaultsTest { uint8[] data = [1, 2, 3] @2; }; +interface Port { + void PostMessage(string message_text @0) @0; +}; + [Peer=ServiceClient] interface Service { enum BazOptions { BAZ_REGULAR = 0, BAZ_EXTRA }; - void Frobinate(Foo foo @0, int32 baz @1, handle<message_pipe> port @2) @0; + void Frobinate(Foo foo @0, int32 baz @1, Port port @2) @0; }; [Peer=Service] @@ -59,8 +63,4 @@ interface ServiceClient { void DidFrobinate(int32 result @0) @0; }; -interface Port { - void PostMessage(string message_text @0) @0; -}; - } diff --git a/mojo/services/gles2/command_buffer.mojom b/mojo/services/gles2/command_buffer.mojom index 1193027..e25e3a3 100644 --- a/mojo/services/gles2/command_buffer.mojom +++ b/mojo/services/gles2/command_buffer.mojom @@ -20,9 +20,14 @@ struct ShmHandle { uint64 handle_hack; }; +interface CommandBufferSyncClient { + void DidInitialize(bool success); + void DidMakeProgress(CommandBufferState state); +}; + [Peer=CommandBufferClient] interface CommandBuffer { - void Initialize(handle<message_pipe> sync_client, + void Initialize(CommandBufferSyncClient sync_client, ShmHandle shared_state); void SetGetBuffer(int32 buffer); void Flush(int32 put_offset); @@ -48,10 +53,5 @@ interface CommandBufferClient { void DrawAnimationFrame(); }; -interface CommandBufferSyncClient { - void DidInitialize(bool success); - void DidMakeProgress(CommandBufferState state); -}; - } |