OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |