Index: Source/bindings/dart/scripts/templates/interface_h.template |
diff --git a/Source/bindings/dart/scripts/templates/interface_h.template b/Source/bindings/dart/scripts/templates/interface_h.template |
index 353d0883faa9401b9b3ea4f4c69dcc670122f979..8d5f4a233a4c5dd4506e4fb569eb1c57dd665775 100644 |
--- a/Source/bindings/dart/scripts/templates/interface_h.template |
+++ b/Source/bindings/dart/scripts/templates/interface_h.template |
@@ -57,26 +57,42 @@ struct {{dart_class}} { |
return static_cast<{{cpp_class}}*>(value); |
} |
+ // FIXME: This has redundant null checks, and much of this code should |
+ // be moved to a common place to reduce code bloat. |
+ // Convert to native, Dart_Null is an error |
static NativeType* toNative(Dart_Handle handle, Dart_Handle& exception) |
{ |
- DartDOMData* domData = DartDOMData::current(); |
- return DartDOMWrapper::unwrapDartWrapper<{{dart_class}}>(domData, handle, exception); |
+ if (!Dart_IsNull(handle)) { |
+ DartDOMData* domData = DartDOMData::current(); |
+ return DartDOMWrapper::unwrapDartWrapper<{{dart_class}}>(domData, handle, exception); |
+ } else { |
+ exception = Dart_NewStringFromCString("Null value is not a valid {{dart_class}}"); |
+ return 0; |
+ } |
} |
+ // Convert nullable to native, Dart_Null maps to C++ null |
static NativeType* toNativeWithNullCheck(Dart_Handle handle, Dart_Handle& exception) |
{ |
- return Dart_IsNull(handle) ? 0 : toNative(handle, exception); |
+ DartDOMData* domData = DartDOMData::current(); |
+ return DartDOMWrapper::unwrapDartWrapper<{{dart_class}}>(domData, handle, exception); |
} |
+ // Convert to native, Dart_Null is an error |
static NativeType* toNative(Dart_NativeArguments args, int index, Dart_Handle& exception) |
{ |
- return DartDOMWrapper::unwrapDartWrapper<{{dart_class}}>(args, index, exception); |
+ NativeType* result = DartDOMWrapper::unwrapDartWrapper<{{dart_class}}>(args, index, exception); |
+ if (result || exception) { |
+ return result; |
+ } |
+ exception = Dart_NewStringFromCString("Null value is not a valid {{dart_class}}"); |
+ return 0; |
} |
+ // Convert nullable to native, Dart_Null maps to C++ null |
static NativeType* toNativeWithNullCheck(Dart_NativeArguments args, int index, Dart_Handle& exception) |
{ |
- // toNative accounts for Null objects also. |
- return toNative(args, index, exception); |
+ return DartDOMWrapper::unwrapDartWrapper<{{dart_class}}>(args, index, exception); |
} |
static Dart_Handle toDart(NativeType* value) |