Index: mojo/public/tools/bindings/generators/mojom_js_generator.py |
diff --git a/mojo/public/tools/bindings/generators/mojom_js_generator.py b/mojo/public/tools/bindings/generators/mojom_js_generator.py |
index a0c1a6df3387b1d4f3dc096bb2feadf321ad9e20..d1a61470ea000e48bc8e1a987110e9940a31177e 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py |
@@ -54,6 +54,8 @@ def JavaScriptDefaultValue(field): |
return "null" |
if mojom.IsArrayKind(field.kind): |
return "null" |
+ if mojom.IsMapKind(field.kind): |
+ return "null" |
if mojom.IsInterfaceKind(field.kind) or \ |
mojom.IsInterfaceRequestKind(field.kind): |
return _kind_to_javascript_default_value[mojom.MSGPIPE] |
@@ -107,21 +109,27 @@ def CodecType(kind): |
return "new codec.%s(%s)" % (pointer_type, JavaScriptType(kind)) |
if mojom.IsArrayKind(kind): |
array_type = "NullableArrayOf" if mojom.IsNullableKind(kind) else "ArrayOf" |
+ array_length = "" if kind.length is None else ", %d" % kind.length |
element_type = "codec.PackedBool" if mojom.IsBoolKind(kind.kind) \ |
else CodecType(kind.kind) |
- return "new codec.%s(%s)" % (array_type, element_type) |
+ return "new codec.%s(%s%s)" % (array_type, element_type, array_length) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
return CodecType(mojom.MSGPIPE) |
if mojom.IsEnumKind(kind): |
return _kind_to_codec_type[mojom.INT32] |
return kind |
+def MapCodecType(kind): |
+ return "codec.PackedBool" if mojom.IsBoolKind(kind) else CodecType(kind) |
def JavaScriptDecodeSnippet(kind): |
if kind in mojom.PRIMITIVES: |
return "decodeStruct(%s)" % CodecType(kind) |
if mojom.IsStructKind(kind): |
return "decodeStructPointer(%s)" % JavaScriptType(kind) |
+ if mojom.IsMapKind(kind): |
+ return "decodeMapPointer(%s, %s)" % \ |
+ (MapCodecType(kind.key_kind), MapCodecType(kind.value_kind)) |
if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
return "decodeArrayPointer(codec.PackedBool)" |
if mojom.IsArrayKind(kind): |
@@ -137,6 +145,9 @@ def JavaScriptEncodeSnippet(kind): |
return "encodeStruct(%s, " % CodecType(kind) |
if mojom.IsStructKind(kind): |
return "encodeStructPointer(%s, " % JavaScriptType(kind) |
+ if mojom.IsMapKind(kind): |
+ return "encodeMapPointer(%s, %s, " % \ |
+ (MapCodecType(kind.key_kind), MapCodecType(kind.value_kind)) |
if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
return "encodeArrayPointer(codec.PackedBool, "; |
if mojom.IsArrayKind(kind): |
@@ -187,6 +198,17 @@ def JavaScriptValidateStructParams(packed_field): |
return "%s, %s, %s" % (field_offset, struct_type, nullable) |
+def JavaScriptValidateMapParams(packed_field): |
+ nullable = JavaScriptNullableParam(packed_field) |
+ field_offset = JavaScriptFieldOffset(packed_field) |
+ keys_type = MapCodecType(packed_field.field.kind.key_kind) |
+ values_kind = packed_field.field.kind.value_kind; |
+ values_type = MapCodecType(values_kind) |
+ values_nullable = "true" if mojom.IsNullableKind(values_kind) else "false" |
+ return "%s, %s, %s, %s, %s" % \ |
+ (field_offset, nullable, keys_type, values_type, values_nullable) |
+ |
+ |
def JavaScriptValidateStringParams(packed_field): |
nullable = JavaScriptNullableParam(packed_field) |
return "%s, %s" % (JavaScriptFieldOffset(packed_field), nullable) |
@@ -237,6 +259,9 @@ def IsStringPointerField(field): |
def IsStructPointerField(field): |
return mojom.IsStructKind(field.kind) |
+def IsMapPointerField(field): |
+ return mojom.IsMapKind(field.kind) |
+ |
def IsHandleField(field): |
return mojom.IsAnyHandleKind(field.kind) |
@@ -252,6 +277,7 @@ class Generator(generator.Generator): |
"field_offset": JavaScriptFieldOffset, |
"has_callbacks": mojom.HasCallbacks, |
"is_array_pointer_field": IsArrayPointerField, |
+ "is_map_pointer_field": IsMapPointerField, |
"is_struct_pointer_field": IsStructPointerField, |
"is_string_pointer_field": IsStringPointerField, |
"is_handle_field": IsHandleField, |
@@ -259,6 +285,7 @@ class Generator(generator.Generator): |
"stylize_method": generator.StudlyCapsToCamel, |
"validate_array_params": JavaScriptValidateArrayParams, |
"validate_handle_params": JavaScriptValidateHandleParams, |
+ "validate_map_params": JavaScriptValidateMapParams, |
"validate_string_params": JavaScriptValidateStringParams, |
"validate_struct_params": JavaScriptValidateStructParams, |
} |