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

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

Issue 654843005: Mojo JS Bindings: add support for associative arrays (Mojo map type) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Corrected validation for array map values Created 6 years, 2 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
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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 if mojom.IsStructKind(field.kind): 47 if mojom.IsStructKind(field.kind):
48 assert field.default == "default" 48 assert field.default == "default"
49 return "new %s()" % JavaScriptType(field.kind) 49 return "new %s()" % JavaScriptType(field.kind)
50 return ExpressionToText(field.default) 50 return ExpressionToText(field.default)
51 if field.kind in mojom.PRIMITIVES: 51 if field.kind in mojom.PRIMITIVES:
52 return _kind_to_javascript_default_value[field.kind] 52 return _kind_to_javascript_default_value[field.kind]
53 if mojom.IsStructKind(field.kind): 53 if mojom.IsStructKind(field.kind):
54 return "null" 54 return "null"
55 if mojom.IsArrayKind(field.kind): 55 if mojom.IsArrayKind(field.kind):
56 return "null" 56 return "null"
57 if mojom.IsMapKind(field.kind):
58 return "null"
57 if mojom.IsInterfaceKind(field.kind) or \ 59 if mojom.IsInterfaceKind(field.kind) or \
58 mojom.IsInterfaceRequestKind(field.kind): 60 mojom.IsInterfaceRequestKind(field.kind):
59 return _kind_to_javascript_default_value[mojom.MSGPIPE] 61 return _kind_to_javascript_default_value[mojom.MSGPIPE]
60 if mojom.IsEnumKind(field.kind): 62 if mojom.IsEnumKind(field.kind):
61 return "0" 63 return "0"
62 64
63 65
64 def JavaScriptPayloadSize(packed): 66 def JavaScriptPayloadSize(packed):
65 packed_fields = packed.packed_fields 67 packed_fields = packed.packed_fields
66 if not packed_fields: 68 if not packed_fields:
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 102
101 def CodecType(kind): 103 def CodecType(kind):
102 if kind in mojom.PRIMITIVES: 104 if kind in mojom.PRIMITIVES:
103 return _kind_to_codec_type[kind] 105 return _kind_to_codec_type[kind]
104 if mojom.IsStructKind(kind): 106 if mojom.IsStructKind(kind):
105 pointer_type = "NullablePointerTo" if mojom.IsNullableKind(kind) \ 107 pointer_type = "NullablePointerTo" if mojom.IsNullableKind(kind) \
106 else "PointerTo" 108 else "PointerTo"
107 return "new codec.%s(%s)" % (pointer_type, JavaScriptType(kind)) 109 return "new codec.%s(%s)" % (pointer_type, JavaScriptType(kind))
108 if mojom.IsArrayKind(kind): 110 if mojom.IsArrayKind(kind):
109 array_type = "NullableArrayOf" if mojom.IsNullableKind(kind) else "ArrayOf" 111 array_type = "NullableArrayOf" if mojom.IsNullableKind(kind) else "ArrayOf"
112 array_length = "" if kind.length is None else ", %d" % kind.length
110 element_type = "codec.PackedBool" if mojom.IsBoolKind(kind.kind) \ 113 element_type = "codec.PackedBool" if mojom.IsBoolKind(kind.kind) \
111 else CodecType(kind.kind) 114 else CodecType(kind.kind)
112 return "new codec.%s(%s)" % (array_type, element_type) 115 return "new codec.%s(%s%s)" % (array_type, element_type, array_length)
113 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): 116 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
114 return CodecType(mojom.MSGPIPE) 117 return CodecType(mojom.MSGPIPE)
115 if mojom.IsEnumKind(kind): 118 if mojom.IsEnumKind(kind):
116 return _kind_to_codec_type[mojom.INT32] 119 return _kind_to_codec_type[mojom.INT32]
117 return kind 120 return kind
118 121
122 def MapCodecType(kind):
123 return "codec.PackedBool" if mojom.IsBoolKind(kind) else CodecType(kind)
119 124
120 def JavaScriptDecodeSnippet(kind): 125 def JavaScriptDecodeSnippet(kind):
121 if kind in mojom.PRIMITIVES: 126 if kind in mojom.PRIMITIVES:
122 return "decodeStruct(%s)" % CodecType(kind) 127 return "decodeStruct(%s)" % CodecType(kind)
123 if mojom.IsStructKind(kind): 128 if mojom.IsStructKind(kind):
124 return "decodeStructPointer(%s)" % JavaScriptType(kind) 129 return "decodeStructPointer(%s)" % JavaScriptType(kind)
130 if mojom.IsMapKind(kind):
131 return "decodeMapPointer(%s, %s)" % \
132 (MapCodecType(kind.key_kind), MapCodecType(kind.value_kind))
125 if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): 133 if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
126 return "decodeArrayPointer(codec.PackedBool)" 134 return "decodeArrayPointer(codec.PackedBool)"
127 if mojom.IsArrayKind(kind): 135 if mojom.IsArrayKind(kind):
128 return "decodeArrayPointer(%s)" % CodecType(kind.kind) 136 return "decodeArrayPointer(%s)" % CodecType(kind.kind)
129 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): 137 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
130 return JavaScriptDecodeSnippet(mojom.MSGPIPE) 138 return JavaScriptDecodeSnippet(mojom.MSGPIPE)
131 if mojom.IsEnumKind(kind): 139 if mojom.IsEnumKind(kind):
132 return JavaScriptDecodeSnippet(mojom.INT32) 140 return JavaScriptDecodeSnippet(mojom.INT32)
133 141
134 142
135 def JavaScriptEncodeSnippet(kind): 143 def JavaScriptEncodeSnippet(kind):
136 if kind in mojom.PRIMITIVES: 144 if kind in mojom.PRIMITIVES:
137 return "encodeStruct(%s, " % CodecType(kind) 145 return "encodeStruct(%s, " % CodecType(kind)
138 if mojom.IsStructKind(kind): 146 if mojom.IsStructKind(kind):
139 return "encodeStructPointer(%s, " % JavaScriptType(kind) 147 return "encodeStructPointer(%s, " % JavaScriptType(kind)
148 if mojom.IsMapKind(kind):
149 return "encodeMapPointer(%s, %s, " % \
150 (MapCodecType(kind.key_kind), MapCodecType(kind.value_kind))
140 if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): 151 if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
141 return "encodeArrayPointer(codec.PackedBool, "; 152 return "encodeArrayPointer(codec.PackedBool, ";
142 if mojom.IsArrayKind(kind): 153 if mojom.IsArrayKind(kind):
143 return "encodeArrayPointer(%s, " % CodecType(kind.kind) 154 return "encodeArrayPointer(%s, " % CodecType(kind.kind)
144 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): 155 if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
145 return JavaScriptEncodeSnippet(mojom.MSGPIPE) 156 return JavaScriptEncodeSnippet(mojom.MSGPIPE)
146 if mojom.IsEnumKind(kind): 157 if mojom.IsEnumKind(kind):
147 return JavaScriptEncodeSnippet(mojom.INT32) 158 return JavaScriptEncodeSnippet(mojom.INT32)
148 159
149 160
(...skipping 30 matching lines...) Expand all
180 expected_dimension_sizes) 191 expected_dimension_sizes)
181 192
182 193
183 def JavaScriptValidateStructParams(packed_field): 194 def JavaScriptValidateStructParams(packed_field):
184 nullable = JavaScriptNullableParam(packed_field) 195 nullable = JavaScriptNullableParam(packed_field)
185 field_offset = JavaScriptFieldOffset(packed_field) 196 field_offset = JavaScriptFieldOffset(packed_field)
186 struct_type = JavaScriptType(packed_field.field.kind) 197 struct_type = JavaScriptType(packed_field.field.kind)
187 return "%s, %s, %s" % (field_offset, struct_type, nullable) 198 return "%s, %s, %s" % (field_offset, struct_type, nullable)
188 199
189 200
201 def JavaScriptValidateMapParams(packed_field):
202 nullable = JavaScriptNullableParam(packed_field)
203 field_offset = JavaScriptFieldOffset(packed_field)
204 keys_type = MapCodecType(packed_field.field.kind.key_kind)
205 values_kind = packed_field.field.kind.value_kind;
206 values_type = MapCodecType(values_kind)
207 values_nullable = "true" if mojom.IsNullableKind(values_kind) else "false"
208 return "%s, %s, %s, %s, %s" % \
209 (field_offset, nullable, keys_type, values_type, values_nullable)
210
211
190 def JavaScriptValidateStringParams(packed_field): 212 def JavaScriptValidateStringParams(packed_field):
191 nullable = JavaScriptNullableParam(packed_field) 213 nullable = JavaScriptNullableParam(packed_field)
192 return "%s, %s" % (JavaScriptFieldOffset(packed_field), nullable) 214 return "%s, %s" % (JavaScriptFieldOffset(packed_field), nullable)
193 215
194 216
195 def JavaScriptValidateHandleParams(packed_field): 217 def JavaScriptValidateHandleParams(packed_field):
196 nullable = JavaScriptNullableParam(packed_field) 218 nullable = JavaScriptNullableParam(packed_field)
197 field_offset = JavaScriptFieldOffset(packed_field) 219 field_offset = JavaScriptFieldOffset(packed_field)
198 return "%s, %s" % (field_offset, nullable) 220 return "%s, %s" % (field_offset, nullable)
199 221
(...skipping 30 matching lines...) Expand all
230 252
231 def IsArrayPointerField(field): 253 def IsArrayPointerField(field):
232 return mojom.IsArrayKind(field.kind) 254 return mojom.IsArrayKind(field.kind)
233 255
234 def IsStringPointerField(field): 256 def IsStringPointerField(field):
235 return mojom.IsStringKind(field.kind) 257 return mojom.IsStringKind(field.kind)
236 258
237 def IsStructPointerField(field): 259 def IsStructPointerField(field):
238 return mojom.IsStructKind(field.kind) 260 return mojom.IsStructKind(field.kind)
239 261
262 def IsMapPointerField(field):
263 return mojom.IsMapKind(field.kind)
264
240 def IsHandleField(field): 265 def IsHandleField(field):
241 return mojom.IsAnyHandleKind(field.kind) 266 return mojom.IsAnyHandleKind(field.kind)
242 267
243 268
244 class Generator(generator.Generator): 269 class Generator(generator.Generator):
245 270
246 js_filters = { 271 js_filters = {
247 "default_value": JavaScriptDefaultValue, 272 "default_value": JavaScriptDefaultValue,
248 "payload_size": JavaScriptPayloadSize, 273 "payload_size": JavaScriptPayloadSize,
249 "decode_snippet": JavaScriptDecodeSnippet, 274 "decode_snippet": JavaScriptDecodeSnippet,
250 "encode_snippet": JavaScriptEncodeSnippet, 275 "encode_snippet": JavaScriptEncodeSnippet,
251 "expression_to_text": ExpressionToText, 276 "expression_to_text": ExpressionToText,
252 "field_offset": JavaScriptFieldOffset, 277 "field_offset": JavaScriptFieldOffset,
253 "has_callbacks": mojom.HasCallbacks, 278 "has_callbacks": mojom.HasCallbacks,
254 "is_array_pointer_field": IsArrayPointerField, 279 "is_array_pointer_field": IsArrayPointerField,
280 "is_map_pointer_field": IsMapPointerField,
255 "is_struct_pointer_field": IsStructPointerField, 281 "is_struct_pointer_field": IsStructPointerField,
256 "is_string_pointer_field": IsStringPointerField, 282 "is_string_pointer_field": IsStringPointerField,
257 "is_handle_field": IsHandleField, 283 "is_handle_field": IsHandleField,
258 "js_type": JavaScriptType, 284 "js_type": JavaScriptType,
259 "stylize_method": generator.StudlyCapsToCamel, 285 "stylize_method": generator.StudlyCapsToCamel,
260 "validate_array_params": JavaScriptValidateArrayParams, 286 "validate_array_params": JavaScriptValidateArrayParams,
261 "validate_handle_params": JavaScriptValidateHandleParams, 287 "validate_handle_params": JavaScriptValidateHandleParams,
288 "validate_map_params": JavaScriptValidateMapParams,
262 "validate_string_params": JavaScriptValidateStringParams, 289 "validate_string_params": JavaScriptValidateStringParams,
263 "validate_struct_params": JavaScriptValidateStructParams, 290 "validate_struct_params": JavaScriptValidateStructParams,
264 } 291 }
265 292
266 def GetParameters(self): 293 def GetParameters(self):
267 return { 294 return {
268 "namespace": self.module.namespace, 295 "namespace": self.module.namespace,
269 "imports": self.GetImports(), 296 "imports": self.GetImports(),
270 "kinds": self.module.kinds, 297 "kinds": self.module.kinds,
271 "enums": self.module.enums, 298 "enums": self.module.enums,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 return self.module.imports 335 return self.module.imports
309 336
310 def GetImportedInterfaces(self): 337 def GetImportedInterfaces(self):
311 interface_to_import = {}; 338 interface_to_import = {};
312 for each_import in self.module.imports: 339 for each_import in self.module.imports:
313 for each_interface in each_import["module"].interfaces: 340 for each_interface in each_import["module"].interfaces:
314 name = each_interface.name 341 name = each_interface.name
315 interface_to_import[name] = each_import["unique_name"] + "." + name 342 interface_to_import[name] = each_import["unique_name"] + "." + name
316 return interface_to_import; 343 return interface_to_import;
317 344
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698