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

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

Issue 474063002: Mojo: add support for {double,float}.{INFINITY,NEGATIVE_INFINITY,NAN} (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 23 matching lines...) Expand all
34 mojom.STRING: '""', 34 mojom.STRING: '""',
35 mojom.NULLABLE_STRING: '""' 35 mojom.NULLABLE_STRING: '""'
36 } 36 }
37 37
38 38
39 def JavaScriptDefaultValue(field): 39 def JavaScriptDefaultValue(field):
40 if field.default: 40 if field.default:
41 if mojom.IsStructKind(field.kind): 41 if mojom.IsStructKind(field.kind):
42 assert field.default == "default" 42 assert field.default == "default"
43 return "new %s()" % JavascriptType(field.kind) 43 return "new %s()" % JavascriptType(field.kind)
44 return ExpressionToText(field.default) 44 return ExpressionToText(field.default, kind=field.kind)
45 if field.kind in mojom.PRIMITIVES: 45 if field.kind in mojom.PRIMITIVES:
46 return _kind_to_javascript_default_value[field.kind] 46 return _kind_to_javascript_default_value[field.kind]
47 if mojom.IsStructKind(field.kind): 47 if mojom.IsStructKind(field.kind):
48 return "null" 48 return "null"
49 if mojom.IsArrayKind(field.kind): 49 if mojom.IsArrayKind(field.kind):
50 return "null" 50 return "null"
51 if mojom.IsInterfaceKind(field.kind) or \ 51 if mojom.IsInterfaceKind(field.kind) or \
52 mojom.IsInterfaceRequestKind(field.kind): 52 mojom.IsInterfaceRequestKind(field.kind):
53 return _kind_to_javascript_default_value[mojom.MSGPIPE] 53 return _kind_to_javascript_default_value[mojom.MSGPIPE]
54 if mojom.IsEnumKind(field.kind): 54 if mojom.IsEnumKind(field.kind):
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): 131 if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
132 return "encodeArrayPointer(new codec.ArrayOf(codec.PackedBool), "; 132 return "encodeArrayPointer(new codec.ArrayOf(codec.PackedBool), ";
133 if mojom.IsAnyArrayKind(kind): 133 if mojom.IsAnyArrayKind(kind):
134 return "encodeArrayPointer(%s, " % CodecType(kind.kind) 134 return "encodeArrayPointer(%s, " % CodecType(kind.kind)
135 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): 135 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
136 return JavaScriptEncodeSnippet(mojom.MSGPIPE) 136 return JavaScriptEncodeSnippet(mojom.MSGPIPE)
137 if mojom.IsEnumKind(kind): 137 if mojom.IsEnumKind(kind):
138 return JavaScriptEncodeSnippet(mojom.INT32) 138 return JavaScriptEncodeSnippet(mojom.INT32)
139 139
140 140
141 def TranslateConstants(token): 141 def TranslateConstants(token, kind=None):
142 if isinstance(token, (mojom.EnumValue, mojom.NamedValue)): 142 if isinstance(token, (mojom.EnumValue, mojom.NamedValue)):
143 # Both variable and enum constants are constructed like: 143 # Both variable and enum constants are constructed like:
144 # NamespaceUid.Struct[.Enum].CONSTANT_NAME 144 # NamespaceUid.Struct[.Enum].CONSTANT_NAME
145 name = [] 145 name = []
146 if token.imported_from: 146 if token.imported_from:
147 name.append(token.imported_from["unique_name"]) 147 name.append(token.imported_from["unique_name"])
148 if token.parent_kind: 148 if token.parent_kind:
149 name.append(token.parent_kind.name) 149 name.append(token.parent_kind.name)
150 if isinstance(token, mojom.EnumValue): 150 if isinstance(token, mojom.EnumValue):
151 name.append(token.enum_name) 151 name.append(token.enum_name)
152 name.append(token.name) 152 name.append(token.name)
153 return ".".join(name) 153 return ".".join(name)
154
155 if kind == mojom.DOUBLE or kind == mojom.FLOAT:
156 if token == "Inf" or token == "+Inf":
157 return "Infinity"
158 if token == "-Inf":
159 return "-Infinity"
160 if token == "NaN":
161 return "NaN"
162
154 return token 163 return token
155 164
156 165
157 def ExpressionToText(value): 166 def ExpressionToText(value, kind=None):
158 return TranslateConstants(value) 167 return TranslateConstants(value, kind)
159 168
160 169
161 def JavascriptType(kind): 170 def JavascriptType(kind):
162 if kind.imported_from: 171 if kind.imported_from:
163 return kind.imported_from["unique_name"] + "." + kind.name 172 return kind.imported_from["unique_name"] + "." + kind.name
164 return kind.name 173 return kind.name
165 174
166 175
167 class Generator(generator.Generator): 176 class Generator(generator.Generator):
168 177
(...skipping 23 matching lines...) Expand all
192 self.Write(self.GenerateJsModule(), "%s.js" % self.module.name) 201 self.Write(self.GenerateJsModule(), "%s.js" % self.module.name)
193 202
194 def GetImports(self): 203 def GetImports(self):
195 # Since each import is assigned a variable in JS, they need to have unique 204 # Since each import is assigned a variable in JS, they need to have unique
196 # names. 205 # names.
197 counter = 1 206 counter = 1
198 for each in self.module.imports: 207 for each in self.module.imports:
199 each["unique_name"] = "import" + str(counter) 208 each["unique_name"] = "import" + str(counter)
200 counter += 1 209 counter += 1
201 return self.module.imports 210 return self.module.imports
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698