| 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 |