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 8c6e2a8a4ccb2fdee43fbd1161d135c69f56eff0..6d94e754b10391b3b73076bf6ca263849cfb59c4 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py |
@@ -85,16 +85,16 @@ _kind_to_codec_type = { |
mojom.DPPIPE: "codec.Handle", |
mojom.MSGPIPE: "codec.Handle", |
mojom.SHAREDBUFFER: "codec.Handle", |
- mojom.NULLABLE_HANDLE: "codec.Handle", |
- mojom.NULLABLE_DCPIPE: "codec.Handle", |
- mojom.NULLABLE_DPPIPE: "codec.Handle", |
- mojom.NULLABLE_MSGPIPE: "codec.Handle", |
- mojom.NULLABLE_SHAREDBUFFER: "codec.Handle", |
+ mojom.NULLABLE_HANDLE: "codec.NullableHandle", |
+ mojom.NULLABLE_DCPIPE: "codec.NullableHandle", |
+ mojom.NULLABLE_DPPIPE: "codec.NullableHandle", |
+ mojom.NULLABLE_MSGPIPE: "codec.NullableHandle", |
+ mojom.NULLABLE_SHAREDBUFFER: "codec.NullableHandle", |
mojom.INT64: "codec.Int64", |
mojom.UINT64: "codec.Uint64", |
mojom.DOUBLE: "codec.Double", |
mojom.STRING: "codec.String", |
- mojom.NULLABLE_STRING: "codec.String", |
+ mojom.NULLABLE_STRING: "codec.NullableString", |
} |
@@ -102,11 +102,14 @@ def CodecType(kind): |
if kind in mojom.PRIMITIVES: |
return _kind_to_codec_type[kind] |
if mojom.IsStructKind(kind): |
- return "new codec.PointerTo(%s)" % JavaScriptType(kind) |
- if mojom.IsAnyArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "new codec.ArrayOf(codec.PackedBool)" |
+ pointer_type = "NullablePointerTo" if mojom.IsNullableKind(kind) \ |
+ else "PointerTo" |
+ return "new codec.%s(%s)" % (pointer_type, JavaScriptType(kind)) |
if mojom.IsAnyArrayKind(kind): |
- return "new codec.ArrayOf(%s)" % CodecType(kind.kind) |
+ array_type = "NullableArrayOf" if mojom.IsNullableKind(kind) else "ArrayOf" |
+ element_type = "codec.PackedBool" if mojom.IsBoolKind(kind.kind) \ |
+ else CodecType(kind.kind) |
+ return "new codec.%s(%s)" % (array_type, element_type) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
return CodecType(mojom.MSGPIPE) |
if mojom.IsEnumKind(kind): |
@@ -147,18 +150,39 @@ def JavaScriptEncodeSnippet(kind): |
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): |
- structType = JavaScriptType(pf.field.kind) |
- return "%s, %s" % (JavaScriptFieldOffset(pf), structType) |
+def JavaScriptNullableParam(packed_field): |
+ return "true" if mojom.IsNullableKind(packed_field.field.kind) else "false" |
+ |
+ |
+def JavaScriptValidateArrayParams(packed_field): |
+ nullable = JavaScriptNullableParam(packed_field) |
+ field_offset = JavaScriptFieldOffset(packed_field) |
+ element_kind = packed_field.field.kind.kind |
+ element_size = pack.PackedField.GetSizeForKind(element_kind) |
+ element_count = generator.ExpectedArraySize(packed_field.field.kind) |
+ element_type = "codec.PackedBool" if mojom.IsBoolKind(element_kind) \ |
+ else CodecType(element_kind) |
+ return "%s, %s, %s, %s, %s" % \ |
+ (field_offset, element_size, element_count, element_type, nullable) |
+ |
+ |
+def JavaScriptValidateStructParams(packed_field): |
+ nullable = JavaScriptNullableParam(packed_field) |
+ field_offset = JavaScriptFieldOffset(packed_field) |
+ struct_type = JavaScriptType(packed_field.field.kind) |
+ return "%s, %s, %s" % (field_offset, struct_type, nullable) |
+ |
+ |
+def JavaScriptValidateStringParams(packed_field): |
+ nullable = JavaScriptNullableParam(packed_field) |
+ return "%s, %s" % (JavaScriptFieldOffset(packed_field), nullable) |
+ |
+ |
+def JavaScriptValidateHandleParams(packed_field): |
+ nullable = JavaScriptNullableParam(packed_field) |
+ field_offset = JavaScriptFieldOffset(packed_field) |
+ return "%s, %s" % (field_offset, nullable) |
def TranslateConstants(token): |
@@ -211,6 +235,8 @@ class Generator(generator.Generator): |
"js_type": JavaScriptType, |
"stylize_method": generator.StudlyCapsToCamel, |
"validate_array_params": JavaScriptValidateArrayParams, |
+ "validate_handle_params": JavaScriptValidateHandleParams, |
+ "validate_string_params": JavaScriptValidateStringParams, |
"validate_struct_params": JavaScriptValidateStructParams, |
} |