Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: mojo/public/bindings/pylib/generate/mojom_generator.py

Issue 226263002: Mojo: Move mojo/public/bindings to mojo/public/tools/bindings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Code shared by the various language-specific code generators."""
6
7 import os
8 import mojom
9 import mojom_pack
10 import re
11 from functools import partial
12
13 def GetStructFromMethod(interface, method):
14 """Converts a method's parameters into the fields of a struct."""
15 params_class = "%s_%s_Params" % (interface.name, method.name)
16 struct = mojom.Struct(params_class)
17 for param in method.parameters:
18 struct.AddField(param.name, param.kind, param.ordinal)
19 struct.packed = mojom_pack.PackedStruct(struct)
20 return struct
21
22 def GetResponseStructFromMethod(interface, method):
23 """Converts a method's response_parameters into the fields of a struct."""
24 params_class = "%s_%s_ResponseParams" % (interface.name, method.name)
25 struct = mojom.Struct(params_class)
26 for param in method.response_parameters:
27 struct.AddField(param.name, param.kind, param.ordinal)
28 struct.packed = mojom_pack.PackedStruct(struct)
29 return struct
30
31 def GetStructInfo(exported, struct):
32 struct.packed = mojom_pack.PackedStruct(struct)
33 struct.bytes = mojom_pack.GetByteLayout(struct.packed)
34 struct.exported = exported
35 return struct
36
37 def IsStringKind(kind):
38 return kind.spec == 's'
39
40 def IsEnumKind(kind):
41 return isinstance(kind, mojom.Enum)
42
43 def IsObjectKind(kind):
44 return isinstance(kind, (mojom.Struct, mojom.Array)) or IsStringKind(kind)
45
46 def IsHandleKind(kind):
47 return kind.spec.startswith('h') or isinstance(kind, mojom.Interface)
48
49 def StudlyCapsToCamel(studly):
50 return studly[0].lower() + studly[1:]
51
52 def VerifyTokenType(token, expected):
53 """Used to check that arrays and objects are used correctly as default
54 values. Arrays are tokens that look like ('ARRAY', element0, element1...).
55 See mojom_parser.py for their representation.
56 """
57 if not isinstance(token, tuple):
58 raise Exception("Expected token type '%s'. Invalid token '%s'." %
59 (expected, token))
60 if token[0] != expected:
61 raise Exception("Expected token type '%s'. Got '%s'." %
62 (expected, token[0]))
63
64 def ExpressionMapper(expression, mapper):
65 if isinstance(expression, tuple) and expression[0] == 'EXPRESSION':
66 result = []
67 for each in expression[1]:
68 result.extend(ExpressionMapper(each, mapper))
69 return result
70 return [mapper(expression)]
71
72 class Generator(object):
73 # Pass |output_dir| to emit files to disk. Omit |output_dir| to echo all
74 # files to stdout.
75 def __init__(self, module, output_dir=None):
76 self.module = module
77 self.output_dir = output_dir
78
79 def GetStructsFromMethods(self):
80 result = []
81 for interface in self.module.interfaces:
82 for method in interface.methods:
83 result.append(GetStructFromMethod(interface, method))
84 if method.response_parameters != None:
85 result.append(GetResponseStructFromMethod(interface, method))
86 return map(partial(GetStructInfo, False), result)
87
88 def GetStructs(self):
89 return map(partial(GetStructInfo, True), self.module.structs)
90
91 def Write(self, contents, filename):
92 if self.output_dir is None:
93 print contents
94 return
95 with open(os.path.join(self.output_dir, filename), "w+") as f:
96 f.write(contents)
97
98 def GenerateFiles(self):
99 raise NotImplementedError("Subclasses must override/implement this method")
OLDNEW
« no previous file with comments | « mojo/public/bindings/pylib/generate/mojom_data_tests.py ('k') | mojo/public/bindings/pylib/generate/mojom_pack.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698