@@ -2043,15 +2043,17 @@ napi_status napi_create_reference(napi_env env,
2043
2043
napi_value value,
2044
2044
uint32_t initial_refcount,
2045
2045
napi_ref* result) {
2046
- NAPI_PREAMBLE (env);
2046
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2047
+ // JS exceptions.
2048
+ CHECK_ENV (env);
2047
2049
CHECK_ARG (env, value);
2048
2050
CHECK_ARG (env, result);
2049
2051
2050
2052
v8impl::Reference* reference = v8impl::Reference::New (
2051
2053
env, v8impl::V8LocalValueFromJsValue (value), initial_refcount, false );
2052
2054
2053
2055
*result = reinterpret_cast <napi_ref>(reference);
2054
- return GET_RETURN_STATUS (env);
2056
+ return napi_clear_last_error (env);
2055
2057
}
2056
2058
2057
2059
// Deletes a reference. The referenced value is released, and may be GC'd unless
@@ -2073,7 +2075,9 @@ napi_status napi_delete_reference(napi_env env, napi_ref ref) {
2073
2075
// Calling this when the refcount is 0 and the object is unavailable
2074
2076
// results in an error.
2075
2077
napi_status napi_reference_ref (napi_env env, napi_ref ref, uint32_t * result) {
2076
- NAPI_PREAMBLE (env);
2078
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2079
+ // JS exceptions.
2080
+ CHECK_ENV (env);
2077
2081
CHECK_ARG (env, ref);
2078
2082
2079
2083
v8impl::Reference* reference = reinterpret_cast <v8impl::Reference*>(ref);
@@ -2083,15 +2087,17 @@ napi_status napi_reference_ref(napi_env env, napi_ref ref, uint32_t* result) {
2083
2087
*result = count;
2084
2088
}
2085
2089
2086
- return GET_RETURN_STATUS (env);
2090
+ return napi_clear_last_error (env);
2087
2091
}
2088
2092
2089
2093
// Decrements the reference count, optionally returning the resulting count. If
2090
2094
// the result is 0 the reference is now weak and the object may be GC'd at any
2091
2095
// time if there are no other references. Calling this when the refcount is
2092
2096
// already 0 results in an error.
2093
2097
napi_status napi_reference_unref (napi_env env, napi_ref ref, uint32_t * result) {
2094
- NAPI_PREAMBLE (env);
2098
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2099
+ // JS exceptions.
2100
+ CHECK_ENV (env);
2095
2101
CHECK_ARG (env, ref);
2096
2102
2097
2103
v8impl::Reference* reference = reinterpret_cast <v8impl::Reference*>(ref);
@@ -2106,7 +2112,7 @@ napi_status napi_reference_unref(napi_env env, napi_ref ref, uint32_t* result) {
2106
2112
*result = count;
2107
2113
}
2108
2114
2109
- return GET_RETURN_STATUS (env);
2115
+ return napi_clear_last_error (env);
2110
2116
}
2111
2117
2112
2118
// Attempts to get a referenced value. If the reference is weak, the value might
@@ -2115,59 +2121,71 @@ napi_status napi_reference_unref(napi_env env, napi_ref ref, uint32_t* result) {
2115
2121
napi_status napi_get_reference_value (napi_env env,
2116
2122
napi_ref ref,
2117
2123
napi_value* result) {
2118
- NAPI_PREAMBLE (env);
2124
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2125
+ // JS exceptions.
2126
+ CHECK_ENV (env);
2119
2127
CHECK_ARG (env, ref);
2120
2128
CHECK_ARG (env, result);
2121
2129
2122
2130
v8impl::Reference* reference = reinterpret_cast <v8impl::Reference*>(ref);
2123
2131
*result = v8impl::JsValueFromV8LocalValue (reference->Get ());
2124
2132
2125
- return GET_RETURN_STATUS (env);
2133
+ return napi_clear_last_error (env);
2126
2134
}
2127
2135
2128
2136
napi_status napi_open_handle_scope (napi_env env, napi_handle_scope* result) {
2129
- NAPI_PREAMBLE (env);
2137
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2138
+ // JS exceptions.
2139
+ CHECK_ENV (env);
2130
2140
CHECK_ARG (env, result);
2131
2141
2132
2142
*result = v8impl::JsHandleScopeFromV8HandleScope (
2133
2143
new v8impl::HandleScopeWrapper (env->isolate ));
2134
- return GET_RETURN_STATUS (env);
2144
+ return napi_clear_last_error (env);
2135
2145
}
2136
2146
2137
2147
napi_status napi_close_handle_scope (napi_env env, napi_handle_scope scope) {
2138
- NAPI_PREAMBLE (env);
2148
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2149
+ // JS exceptions.
2150
+ CHECK_ENV (env);
2139
2151
CHECK_ARG (env, scope);
2140
2152
2141
2153
delete v8impl::V8HandleScopeFromJsHandleScope (scope);
2142
- return GET_RETURN_STATUS (env);
2154
+ return napi_clear_last_error (env);
2143
2155
}
2144
2156
2145
2157
napi_status napi_open_escapable_handle_scope (
2146
2158
napi_env env,
2147
2159
napi_escapable_handle_scope* result) {
2148
- NAPI_PREAMBLE (env);
2160
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2161
+ // JS exceptions.
2162
+ CHECK_ENV (env);
2149
2163
CHECK_ARG (env, result);
2150
2164
2151
2165
*result = v8impl::JsEscapableHandleScopeFromV8EscapableHandleScope (
2152
2166
new v8impl::EscapableHandleScopeWrapper (env->isolate ));
2153
- return GET_RETURN_STATUS (env);
2167
+ return napi_clear_last_error (env);
2154
2168
}
2155
2169
2156
2170
napi_status napi_close_escapable_handle_scope (
2157
2171
napi_env env,
2158
2172
napi_escapable_handle_scope scope) {
2159
- NAPI_PREAMBLE (env);
2173
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2174
+ // JS exceptions.
2175
+ CHECK_ENV (env);
2160
2176
CHECK_ARG (env, scope);
2161
2177
2162
2178
delete v8impl::V8EscapableHandleScopeFromJsEscapableHandleScope (scope);
2163
- return GET_RETURN_STATUS (env);
2179
+ return napi_clear_last_error (env);
2164
2180
}
2165
2181
2166
2182
napi_status napi_escape_handle (napi_env env,
2167
2183
napi_escapable_handle_scope scope,
2168
2184
napi_value escapee,
2169
2185
napi_value* result) {
2170
- NAPI_PREAMBLE (env);
2186
+ // Omit NAPI_PREAMBLE and GET_RETURN_STATUS because V8 calls here cannot throw
2187
+ // JS exceptions.
2188
+ CHECK_ENV (env);
2171
2189
CHECK_ARG (env, scope);
2172
2190
CHECK_ARG (env, escapee);
2173
2191
CHECK_ARG (env, result);
@@ -2176,7 +2194,7 @@ napi_status napi_escape_handle(napi_env env,
2176
2194
v8impl::V8EscapableHandleScopeFromJsEscapableHandleScope (scope);
2177
2195
*result = v8impl::JsValueFromV8LocalValue (
2178
2196
s->Escape (v8impl::V8LocalValueFromJsValue (escapee)));
2179
- return GET_RETURN_STATUS (env);
2197
+ return napi_clear_last_error (env);
2180
2198
}
2181
2199
2182
2200
napi_status napi_new_instance (napi_env env,
@@ -2386,7 +2404,6 @@ napi_status napi_create_buffer(napi_env env,
2386
2404
void ** data,
2387
2405
napi_value* result) {
2388
2406
NAPI_PREAMBLE (env);
2389
- CHECK_ARG (env, data);
2390
2407
CHECK_ARG (env, result);
2391
2408
2392
2409
auto maybe = node::Buffer::New (env->isolate , length);
@@ -2396,7 +2413,10 @@ napi_status napi_create_buffer(napi_env env,
2396
2413
v8::Local<v8::Object> buffer = maybe.ToLocalChecked ();
2397
2414
2398
2415
*result = v8impl::JsValueFromV8LocalValue (buffer);
2399
- *data = node::Buffer::Data (buffer);
2416
+
2417
+ if (data != nullptr ) {
2418
+ *data = node::Buffer::Data (buffer);
2419
+ }
2400
2420
2401
2421
return GET_RETURN_STATUS (env);
2402
2422
}
0 commit comments