diff options
-rw-r--r-- | mojo/public/bindings/pylib/generate/mojom.py | 8 | ||||
-rw-r--r-- | mojo/public/bindings/pylib/generate/mojom_data.py | 7 | ||||
-rw-r--r-- | mojo/public/bindings/pylib/parse/mojo_lexer.py | 6 | ||||
-rwxr-xr-x | mojo/public/bindings/pylib/parse/mojo_parser.py | 10 | ||||
-rwxr-xr-x | mojo/public/bindings/pylib/parse/mojo_translate.py | 9 | ||||
-rw-r--r-- | mojo/public/bindings/tests/math_calculator.mojom | 8 | ||||
-rw-r--r-- | mojo/public/bindings/tests/sample_service.mojom | 6 |
7 files changed, 42 insertions, 12 deletions
diff --git a/mojo/public/bindings/pylib/generate/mojom.py b/mojo/public/bindings/pylib/generate/mojom.py index 5d3ee19..893af71 100644 --- a/mojo/public/bindings/pylib/generate/mojom.py +++ b/mojo/public/bindings/pylib/generate/mojom.py @@ -117,12 +117,20 @@ class Method(object): 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(Kind): def __init__(self, name = None, peer = None): diff --git a/mojo/public/bindings/pylib/generate/mojom_data.py b/mojo/public/bindings/pylib/generate/mojom_data.py index b65808e..a903e86 100644 --- a/mojo/public/bindings/pylib/generate/mojom_data.py +++ b/mojo/public/bindings/pylib/generate/mojom_data.py @@ -198,6 +198,9 @@ def MethodToData(method): } if method.ordinal != None: data[istr(2, 'ordinal')] = method.ordinal + if method.response_parameters != None: + data[istr(3, 'response_parameters')] = map( + ParameterToData, method.response_parameters) return data def MethodFromData(module, data, interface): @@ -207,6 +210,10 @@ def MethodFromData(module, data, interface): method.default = data.get('default') method.parameters = map(lambda parameter: ParameterFromData(module, parameter, interface), data['parameters']) + if data.has_key('response_parameters'): + method.response_parameters = map( + lambda parameter: ParameterFromData(kinds, parameter), + data['response_parameters']) return method def InterfaceToData(interface): diff --git a/mojo/public/bindings/pylib/parse/mojo_lexer.py b/mojo/public/bindings/pylib/parse/mojo_lexer.py index e5949a3..7a0fd0d 100644 --- a/mojo/public/bindings/pylib/parse/mojo_lexer.py +++ b/mojo/public/bindings/pylib/parse/mojo_lexer.py @@ -81,6 +81,9 @@ class Lexer(object): # Conditional operator (?) 'CONDOP', + # Request / response + 'RESPONSE', + # Delimeters 'LPAREN', 'RPAREN', # ( ) 'LBRACKET', 'RBRACKET', # [ ] @@ -189,6 +192,9 @@ class Lexer(object): # ? t_CONDOP = r'\?' + # => + t_RESPONSE = r'=>' + # Delimeters t_LPAREN = r'\(' t_RPAREN = r'\)' diff --git a/mojo/public/bindings/pylib/parse/mojo_parser.py b/mojo/public/bindings/pylib/parse/mojo_parser.py index 8af77cb..1104048 100755 --- a/mojo/public/bindings/pylib/parse/mojo_parser.py +++ b/mojo/public/bindings/pylib/parse/mojo_parser.py @@ -130,9 +130,15 @@ class Parser(object): if len(p) > 1: p[0] = ListFromConcat(p[1], p[2]) + def p_response(self, p): + """response : RESPONSE LPAREN parameters RPAREN + | """ + if len(p) > 3: + p[0] = p[3] + def p_method(self, p): - """method : NAME LPAREN parameters RPAREN ordinal SEMI""" - p[0] = ('METHOD', p[1], p[3], p[5]) + """method : NAME ordinal LPAREN parameters RPAREN response SEMI""" + p[0] = ('METHOD', p[1], p[4], p[2], p[6]) def p_parameters(self, p): """parameters : parameter diff --git a/mojo/public/bindings/pylib/parse/mojo_translate.py b/mojo/public/bindings/pylib/parse/mojo_translate.py index 1fe6acd..b21d976 100755 --- a/mojo/public/bindings/pylib/parse/mojo_translate.py +++ b/mojo/public/bindings/pylib/parse/mojo_translate.py @@ -79,9 +79,12 @@ class MojomBuilder(): if methods: for method in methods: if method[0] == 'METHOD': - out.append({'name': method[1], - 'parameters': self.MapParameters(method[2]), - 'ordinal': self.MapOrdinal(method[3])}) + method_dict = {'name': method[1], + 'parameters': self.MapParameters(method[2]), + 'ordinal': self.MapOrdinal(method[3])} + if method[4] != None: + method_dict['response_parameters'] = self.MapParameters(method[4]) + out.append(method_dict) return out diff --git a/mojo/public/bindings/tests/math_calculator.mojom b/mojo/public/bindings/tests/math_calculator.mojom index 3b8cb7f..b38a8e2 100644 --- a/mojo/public/bindings/tests/math_calculator.mojom +++ b/mojo/public/bindings/tests/math_calculator.mojom @@ -6,14 +6,14 @@ module math { [Peer=CalculatorUI] interface Calculator { - Clear() @0; - Add(double value @0) @1; - Multiply(double value @0) @2; + Clear@0(); + Add@1(double value @0); + Multiply@2(double value @0); }; [Peer=Calculator] interface CalculatorUI { - Output(double value @0) @0; + Output@0(double value @0); }; } diff --git a/mojo/public/bindings/tests/sample_service.mojom b/mojo/public/bindings/tests/sample_service.mojom index 2a89e18..e9cdbd4 100644 --- a/mojo/public/bindings/tests/sample_service.mojom +++ b/mojo/public/bindings/tests/sample_service.mojom @@ -52,7 +52,7 @@ struct DefaultsTest { }; interface Port { - PostMessage(string message_text @0) @0; + PostMessage@0(string message_text @0); }; [Peer=ServiceClient] @@ -61,12 +61,12 @@ interface Service { BAZ_REGULAR = 0, BAZ_EXTRA }; - Frobinate(Foo foo @0, BazOptions baz @1, Port port @2) @0; + Frobinate@0(Foo foo @0, BazOptions baz @1, Port port @2); }; [Peer=Service] interface ServiceClient { - DidFrobinate(int32 result @0) @0; + DidFrobinate@0(int32 result @0); }; } |