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

Side by Side Diff: mojo/public/tools/bindings/generators/mojom_js_generator.py

Issue 317073005: Mojom: Add 'default' keyword for initializing structs to non-null value. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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
1 # Copyright 2013 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Generates JavaScript source files from a mojom.Module.""" 5 """Generates JavaScript source files from a mojom.Module."""
6 6
7 import mojom.generate.generator as generator 7 import mojom.generate.generator as generator
8 import mojom.generate.module as mojom 8 import mojom.generate.module as mojom
9 import mojom.generate.pack as pack 9 import mojom.generate.pack as pack
10 from mojom.generate.template_expander import UseJinja 10 from mojom.generate.template_expander import UseJinja
(...skipping 14 matching lines...) Expand all
25 mojom.SHAREDBUFFER: "null", 25 mojom.SHAREDBUFFER: "null",
26 mojom.INT64: "0", 26 mojom.INT64: "0",
27 mojom.UINT64: "0", 27 mojom.UINT64: "0",
28 mojom.DOUBLE: "0", 28 mojom.DOUBLE: "0",
29 mojom.STRING: '""', 29 mojom.STRING: '""',
30 } 30 }
31 31
32 32
33 def JavaScriptDefaultValue(field): 33 def JavaScriptDefaultValue(field):
34 if field.default: 34 if field.default:
35 raise Exception("Default values should've been handled in jinja.") 35 if isinstance(field.kind, mojom.Struct):
36 assert field.default == "default"
37 return "new %s()" % JavascriptType(field.kind)
38 return ExpressionToText(field.default)
36 if field.kind in mojom.PRIMITIVES: 39 if field.kind in mojom.PRIMITIVES:
37 return _kind_to_javascript_default_value[field.kind] 40 return _kind_to_javascript_default_value[field.kind]
38 if isinstance(field.kind, mojom.Struct): 41 if isinstance(field.kind, mojom.Struct):
39 return "null" 42 return "null"
40 if isinstance(field.kind, mojom.Array): 43 if isinstance(field.kind, mojom.Array):
41 return "[]" 44 return "[]"
42 if isinstance(field.kind, mojom.Interface) or \ 45 if isinstance(field.kind, mojom.Interface) or \
43 isinstance(field.kind, mojom.InterfaceRequest): 46 isinstance(field.kind, mojom.InterfaceRequest):
44 return _kind_to_javascript_default_value[mojom.MSGPIPE] 47 return _kind_to_javascript_default_value[mojom.MSGPIPE]
45 if isinstance(field.kind, mojom.Enum): 48 if isinstance(field.kind, mojom.Enum):
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 150
148 151
149 class Generator(generator.Generator): 152 class Generator(generator.Generator):
150 153
151 js_filters = { 154 js_filters = {
152 "default_value": JavaScriptDefaultValue, 155 "default_value": JavaScriptDefaultValue,
153 "payload_size": JavaScriptPayloadSize, 156 "payload_size": JavaScriptPayloadSize,
154 "decode_snippet": JavaScriptDecodeSnippet, 157 "decode_snippet": JavaScriptDecodeSnippet,
155 "encode_snippet": JavaScriptEncodeSnippet, 158 "encode_snippet": JavaScriptEncodeSnippet,
156 "expression_to_text": ExpressionToText, 159 "expression_to_text": ExpressionToText,
157 "is_object_kind": generator.IsObjectKind,
158 "is_string_kind": generator.IsStringKind,
159 "is_array_kind": lambda kind: isinstance(kind, mojom.Array),
160 "js_type": JavascriptType, 160 "js_type": JavascriptType,
161 "stylize_method": generator.StudlyCapsToCamel, 161 "stylize_method": generator.StudlyCapsToCamel,
162 "verify_token_type": generator.VerifyTokenType,
163 } 162 }
164 163
165 @UseJinja("js_templates/module.js.tmpl", filters=js_filters) 164 @UseJinja("js_templates/module.js.tmpl", filters=js_filters)
166 def GenerateJsModule(self): 165 def GenerateJsModule(self):
167 return { 166 return {
168 "imports": self.GetImports(), 167 "imports": self.GetImports(),
169 "kinds": self.module.kinds, 168 "kinds": self.module.kinds,
170 "enums": self.module.enums, 169 "enums": self.module.enums,
171 "module": self.module, 170 "module": self.module,
172 "structs": self.GetStructs() + self.GetStructsFromMethods(), 171 "structs": self.GetStructs() + self.GetStructsFromMethods(),
173 "interfaces": self.module.interfaces, 172 "interfaces": self.module.interfaces,
174 } 173 }
175 174
176 def GenerateFiles(self, args): 175 def GenerateFiles(self, args):
177 self.Write(self.GenerateJsModule(), "%s.js" % self.module.name) 176 self.Write(self.GenerateJsModule(), "%s.js" % self.module.name)
178 177
179 def GetImports(self): 178 def GetImports(self):
180 # Since each import is assigned a variable in JS, they need to have unique 179 # Since each import is assigned a variable in JS, they need to have unique
181 # names. 180 # names.
182 counter = 1 181 counter = 1
183 for each in self.module.imports: 182 for each in self.module.imports:
184 each["unique_name"] = "import" + str(counter) 183 each["unique_name"] = "import" + str(counter)
185 counter += 1 184 counter += 1
186 return self.module.imports 185 return self.module.imports
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698