1 | /* Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 | * for details. All rights reserved. Use of this source code is governed by a |
3 | * BSD-style license that can be found in the LICENSE file. |
4 | */ |
5 | #include <assert.h> |
6 | #include <stdio.h> |
7 | #include <stdlib.h> |
8 | #include <string.h> |
9 | |
10 | #include "include/dart_api.h" |
11 | |
12 | #if defined(ASSERT) |
13 | #error ASSERT already defined! |
14 | #endif |
15 | |
16 | |
17 | /* Native methods. */ |
18 | void IfNull(Dart_NativeArguments arguments) { |
19 | Dart_Handle object = Dart_GetNativeArgument(arguments, 0); |
20 | if (Dart_IsNull(object)) { |
21 | Dart_SetReturnValue(arguments, Dart_GetNativeArgument(arguments, 1)); |
22 | } else { |
23 | Dart_SetReturnValue(arguments, object); |
24 | } |
25 | } |
26 | |
27 | |
28 | void ThrowMeTheBall(Dart_NativeArguments arguments) { |
29 | Dart_Handle object = Dart_GetNativeArgument(arguments, 0); |
30 | Dart_ThrowException(object); |
31 | } |
32 | |
33 | |
34 | /* Native resolver for the extension library. */ |
35 | Dart_NativeFunction ResolveName(Dart_Handle name, |
36 | int argc, |
37 | bool* auto_setup_scope) { |
38 | /* assert(Dart_IsString(name)); */ |
39 | const char* c_name; |
40 | Dart_Handle check_error; |
41 | |
42 | if (auto_setup_scope == NULL) { |
43 | return NULL; |
44 | } |
45 | *auto_setup_scope = 1; |
46 | check_error = Dart_StringToCString(name, &c_name); |
47 | if (Dart_IsError(check_error)) { |
48 | Dart_PropagateError(check_error); |
49 | } |
50 | if ((strcmp("TestExtension_IfNull" , c_name) == 0) && (argc == 2)) { |
51 | return IfNull; |
52 | } |
53 | if ((strcmp("TestExtension_ThrowMeTheBall" , c_name) == 0) && (argc == 1)) { |
54 | return ThrowMeTheBall; |
55 | } |
56 | return NULL; |
57 | } |
58 | |
59 | |
60 | /* Native entry point for the extension library. */ |
61 | DART_EXPORT Dart_Handle test_extension_Init(Dart_Handle parent_library) { |
62 | Dart_Handle result_code; |
63 | if (Dart_IsError(parent_library)) { |
64 | return parent_library; |
65 | } |
66 | |
67 | result_code = Dart_SetNativeResolver(parent_library, ResolveName, NULL); |
68 | if (Dart_IsError(result_code)) { |
69 | return result_code; |
70 | } |
71 | |
72 | return parent_library; |
73 | } |
74 | |