Line | Branch | Exec | Source |
---|---|---|---|
1 | #include <core.h> | ||
2 | #include <interface.h> | ||
3 | #include <type.h> | ||
4 | |||
5 | /** | ||
6 | * ES callback. Constructor | ||
7 | */ | ||
8 | napi_value | ||
9 | 167 | esConstructor(napi_env env, napi_callback_info cbInfo) { | |
10 | napi_value esBtree, comparator, isConstructor; | ||
11 | |||
12 | 167 | size_t argc = 1; | |
13 | napi_value argv[1]; | ||
14 | |||
15 | // Get es arguments & context | ||
16 |
1/6✓ Branch 0 taken 167 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
167 | NAPI_CALL(env, false, |
17 | napi_get_cb_info(env, cbInfo, &argc, argv, &esBtree, NULL)); | ||
18 | |||
19 |
3/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 165 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
167 | CHECK_ARGC(1, msgTooFewArguments); |
20 | 165 | comparator = argv[0]; | |
21 | |||
22 |
1/6✓ Branch 0 taken 165 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
165 | NAPI_CALL(env, true, |
23 | napi_get_new_target(env, cbInfo, &isConstructor)); | ||
24 | |||
25 |
2/2✓ Branch 0 taken 164 times.
✓ Branch 1 taken 1 times.
|
165 | if (isConstructor) { |
26 | // Check type of first argument. Must be function | ||
27 | napi_valuetype comparatorType; | ||
28 |
1/6✓ Branch 0 taken 164 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
164 | NAPI_CALL(env, false, |
29 | napi_typeof(env, comparator, &comparatorType)); | ||
30 | |||
31 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 163 times.
|
164 | if (comparatorType != napi_function) { |
32 |
1/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | NAPI_CALL(env, false, |
33 | napi_throw_error(env, NULL, "First arg must be comparator qsort() like function")); | ||
34 | |||
35 | 1 | return NULL; | |
36 | } | ||
37 | |||
38 | 163 | BTree_t *bTree = btreeAlloc(env); | |
39 | |||
40 | // Create ref on comparator function. Protect from GC | ||
41 |
1/6✓ Branch 0 taken 163 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
163 | NAPI_CALL(env, false, |
42 | napi_create_reference(env, argv[0], 1, &bTree->comparator)); | ||
43 | |||
44 | // Wrap native data in ES variable for native access again | ||
45 |
1/6✓ Branch 0 taken 163 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
163 | NAPI_CALL(env, false, |
46 | napi_wrap(env, esBtree, bTree, freeNativeBTree, NULL, NULL)); | ||
47 | 163 | } | |
48 | else { | ||
49 | napi_value constructorFunc; | ||
50 | |||
51 |
1/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | NAPI_CALL(env, true, |
52 | napi_get_reference_value(env, btreeConstructorRef, &constructorFunc)); | ||
53 | |||
54 |
1/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1 | NAPI_CALL(env, true, |
55 | napi_new_instance(env, constructorFunc, argc, argv, &esBtree)); | ||
56 | } | ||
57 | |||
58 | 164 | return esBtree; | |
59 | 167 | } | |
60 |