summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-07 21:24:46 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-07 21:24:46 +0000
commite8c1efdea8f178a51e6f9dca53d94c23fd5f2193 (patch)
tree1b252752f3a9260510b21994427ec797dbf13c1d
parentbcc75b8a94f273590d12ec930d6afb7fc3b66036 (diff)
downloadchromium_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.mojom2
-rw-r--r--mojo/public/bindings/generators/mojom_cpp_generator.py14
-rw-r--r--mojo/public/bindings/generators/mojom_js_generator.py8
-rw-r--r--mojo/public/bindings/pylib/generate/mojom.py7
-rw-r--r--mojo/public/bindings/pylib/generate/mojom_data.py2
-rw-r--r--mojo/public/bindings/pylib/generate/mojom_generator.py2
-rw-r--r--mojo/public/bindings/pylib/generate/mojom_pack.py2
-rwxr-xr-xmojo/public/bindings/pylib/parse/mojo_translate.py20
-rw-r--r--mojo/public/bindings/tests/sample_service.mojom10
-rw-r--r--mojo/services/gles2/command_buffer.mojom12
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);
-};
-
}