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