| Index: Source/bindings/scripts/v8_types.py
|
| diff --git a/Source/bindings/scripts/v8_types.py b/Source/bindings/scripts/v8_types.py
|
| index 9bc61dc8100d8407131274b1f68092afb4413020..b5170c6f31e5e3e482027d88e1f0204c6fec8252 100644
|
| --- a/Source/bindings/scripts/v8_types.py
|
| +++ b/Source/bindings/scripts/v8_types.py
|
| @@ -715,6 +715,11 @@ def v8_conversion_type(idl_type, extended_attributes):
|
| """
|
| extended_attributes = extended_attributes or {}
|
|
|
| + # Nullable dictionaries need to be handled differently than either
|
| + # non-nullable dictionaries or unions.
|
| + if idl_type.is_dictionary and idl_type.is_nullable:
|
| + return 'NullableDictionary'
|
| +
|
| if idl_type.is_dictionary or idl_type.is_union_type:
|
| return 'DictionaryOrUnion'
|
|
|
| @@ -789,6 +794,8 @@ V8_SET_RETURN_VALUE = {
|
| 'DOMWrapperDefault': 'v8SetReturnValue(info, {cpp_value})',
|
| # Generic dictionary type
|
| 'Dictionary': 'v8SetReturnValue(info, {cpp_value})',
|
| + # Nullable dictionaries
|
| + 'NullableDictionary': 'v8SetReturnValue(info, result.get())',
|
| # Union types or dictionaries
|
| 'DictionaryOrUnion': 'v8SetReturnValue(info, result)',
|
| }
|
| @@ -853,6 +860,15 @@ CPP_VALUE_TO_V8_VALUE = {
|
| # General
|
| 'array': 'toV8({cpp_value}, {creation_context}, {isolate})',
|
| 'DOMWrapper': 'toV8({cpp_value}, {creation_context}, {isolate})',
|
| + # Passing nullable dictionaries isn't a pattern currently used
|
| + # anywhere in the web platform, and more work would be needed in
|
| + # the code generator to distinguish between passing null, and
|
| + # passing an object which happened to not contain any of the
|
| + # dictionary's defined attributes. For now, don't define
|
| + # NullableDictionary here, which will cause an exception to be
|
| + # thrown during code generation if an argument to a method is a
|
| + # nullable dictionary type.
|
| + #
|
| # Union types or dictionaries
|
| 'DictionaryOrUnion': 'toV8({cpp_value}, {creation_context}, {isolate})',
|
| }
|
|
|