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 5b83974d97943ec15a117e877cd978bef32a1c73..7787f7646f5ef0d4c6768690a148e4fca88a8967 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py |
@@ -46,7 +46,7 @@ def JavaScriptDefaultValue(field): |
return _kind_to_javascript_default_value[field.kind] |
if mojom.IsStructKind(field.kind): |
return "null" |
- if mojom.IsArrayKind(field.kind): |
+ if mojom.IsAnyArrayKind(field.kind): |
return "null" |
if mojom.IsInterfaceKind(field.kind) or \ |
mojom.IsInterfaceRequestKind(field.kind): |
@@ -97,9 +97,9 @@ def CodecType(kind): |
return _kind_to_codec_type[kind] |
if mojom.IsStructKind(kind): |
return "new codec.PointerTo(%s)" % CodecType(kind.name) |
- if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "new codec.ArrayOf(new codec.ArrayOf(codec.PackedBool))" |
- if mojom.IsArrayKind(kind): |
+ if mojom.IsAnyArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
+ return "new codec.ArrayOf(codec.PackedBool)" |
+ if mojom.IsAnyArrayKind(kind): |
return "new codec.ArrayOf(%s)" % CodecType(kind.kind) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
return CodecType(mojom.MSGPIPE) |
@@ -113,9 +113,9 @@ def JavaScriptDecodeSnippet(kind): |
return "decodeStruct(%s)" % CodecType(kind) |
if mojom.IsStructKind(kind): |
return "decodeStructPointer(%s)" % CodecType(kind.name) |
- if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "decodeArrayPointer(new codec.ArrayOf(codec.PackedBool))" |
- if mojom.IsArrayKind(kind): |
+ if mojom.IsAnyArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
+ return "decodeArrayPointer(codec.PackedBool)" |
+ if mojom.IsAnyArrayKind(kind): |
return "decodeArrayPointer(%s)" % CodecType(kind.kind) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
return JavaScriptDecodeSnippet(mojom.MSGPIPE) |
@@ -128,8 +128,8 @@ def JavaScriptEncodeSnippet(kind): |
return "encodeStruct(%s, " % CodecType(kind) |
if mojom.IsStructKind(kind): |
return "encodeStructPointer(%s, " % CodecType(kind.name) |
- if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "encodeArrayPointer(new codec.ArrayOf(codec.PackedBool), "; |
+ if mojom.IsAnyArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
+ return "encodeArrayPointer(codec.PackedBool, "; |
if mojom.IsAnyArrayKind(kind): |
return "encodeArrayPointer(%s, " % CodecType(kind.kind) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
@@ -138,6 +138,22 @@ def JavaScriptEncodeSnippet(kind): |
return JavaScriptEncodeSnippet(mojom.INT32) |
+def JavaScriptFieldOffset(packed_field): |
+ return "offset + codec.kStructHeaderSize + %s" % packed_field.offset |
+ |
+def JavaScriptValidateArrayParams(pf): |
+ elementKind = pf.field.kind.kind |
+ elementSize = pack.PackedField.GetSizeForKind(elementKind) |
+ elementCount = generator.ExpectedArraySize(pf.field.kind) |
+ elementType = "codec.PackedBool" if mojom.IsBoolKind(elementKind) \ |
+ else CodecType(elementKind) |
+ return "%s, %s, %s, %s" % \ |
+ (JavaScriptFieldOffset(pf), elementSize, elementCount, elementType) |
+ |
+def JavaScriptValidateStructParams(pf): |
+ return "%s, %s" % (JavaScriptFieldOffset(pf), pf.field.kind.name) |
+ |
+ |
def TranslateConstants(token): |
if isinstance(token, (mojom.EnumValue, mojom.NamedValue)): |
# Both variable and enum constants are constructed like: |
@@ -163,6 +179,18 @@ def JavascriptType(kind): |
return kind.imported_from["unique_name"] + "." + kind.name |
return kind.name |
+def IsArrayPointerField(field): |
+ return mojom.IsAnyArrayKind(field.kind) |
+ |
+def IsStringPointerField(field): |
+ return mojom.IsStringKind(field.kind) |
+ |
+def IsStructPointerField(field): |
+ return mojom.IsStructKind(field.kind) |
+ |
+def IsHandleField(field): |
+ return mojom.IsAnyHandleKind(field.kind) |
+ |
class Generator(generator.Generator): |
@@ -172,8 +200,16 @@ class Generator(generator.Generator): |
"decode_snippet": JavaScriptDecodeSnippet, |
"encode_snippet": JavaScriptEncodeSnippet, |
"expression_to_text": ExpressionToText, |
+ "field_offset": JavaScriptFieldOffset, |
+ "has_callbacks": mojom.HasCallbacks, |
+ "is_array_pointer_field": IsArrayPointerField, |
+ "is_struct_pointer_field": IsStructPointerField, |
+ "is_string_pointer_field": IsStringPointerField, |
+ "is_handle_field": IsHandleField, |
"js_type": JavascriptType, |
"stylize_method": generator.StudlyCapsToCamel, |
+ "validate_array_params": JavaScriptValidateArrayParams, |
+ "validate_struct_params": JavaScriptValidateStructParams, |
} |
@UseJinja("js_templates/module.js.tmpl", filters=js_filters) |