summaryrefslogtreecommitdiffstats
path: root/mojo
diff options
context:
space:
mode:
Diffstat (limited to 'mojo')
-rw-r--r--mojo/public/bindings/pylib/generate/mojom.py8
-rw-r--r--mojo/public/bindings/pylib/generate/mojom_data.py7
-rw-r--r--mojo/public/bindings/pylib/parse/mojo_lexer.py6
-rwxr-xr-xmojo/public/bindings/pylib/parse/mojo_parser.py10
-rwxr-xr-xmojo/public/bindings/pylib/parse/mojo_translate.py9
-rw-r--r--mojo/public/bindings/tests/math_calculator.mojom8
-rw-r--r--mojo/public/bindings/tests/sample_service.mojom6
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);
};
}