diff options
Diffstat (limited to 'cli/napi/js_native_api.rs')
-rw-r--r-- | cli/napi/js_native_api.rs | 122 |
1 files changed, 65 insertions, 57 deletions
diff --git a/cli/napi/js_native_api.rs b/cli/napi/js_native_api.rs index 6270dbe5c..31e021f70 100644 --- a/cli/napi/js_native_api.rs +++ b/cli/napi/js_native_api.rs @@ -23,6 +23,14 @@ macro_rules! check_arg { }; } +macro_rules! check_arg_option { + ($ptr: expr) => { + if $ptr.is_none() { + return Err(Error::InvalidArg); + } + }; +} + /// Returns napi_value that represents a new JavaScript Array. #[napi_sym::napi_sym] fn napi_create_array(env: *mut Env, result: *mut napi_value) -> Result { @@ -30,7 +38,7 @@ fn napi_create_array(env: *mut Env, result: *mut napi_value) -> Result { check_arg!(result); let value = v8::Array::new(&mut env.scope(), 0); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value.into()); + *result = value.into(); Ok(()) } @@ -44,7 +52,7 @@ fn napi_create_array_with_length( check_arg!(result); let value = v8::Array::new(&mut env.scope(), len); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value.into()); + *result = value.into(); Ok(()) } @@ -63,7 +71,7 @@ fn napi_create_arraybuffer( *data = get_array_buffer_ptr(value); } - *result = transmute::<v8::Local<v8::Value>, napi_value>(value.into()); + *result = value.into(); Ok(()) } @@ -77,7 +85,7 @@ fn napi_create_bigint_int64( check_arg!(result); let value = v8::BigInt::new_from_i64(&mut env.scope(), value); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value.into()); + *result = value.into(); Ok(()) } @@ -90,7 +98,7 @@ fn napi_create_bigint_uint64( let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::BigInt::new_from_u64(&mut env.scope(), value).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -110,7 +118,7 @@ fn napi_create_bigint_words( ) .unwrap() .into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -128,7 +136,7 @@ fn napi_create_buffer( } let value = v8::Uint8Array::new(&mut env.scope(), value, 0, len).unwrap(); let value: v8::Local<v8::Value> = value.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -149,7 +157,7 @@ fn napi_create_buffer_copy( } let value = v8::Uint8Array::new(&mut env.scope(), value, 0, len).unwrap(); let value: v8::Local<v8::Value> = value.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -163,7 +171,7 @@ fn napi_coerce_to_bool( let value = transmute::<napi_value, v8::Local<v8::Value>>(value); let coerced = value.to_boolean(&mut env.scope()); let value: v8::Local<v8::Value> = coerced.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -179,7 +187,7 @@ fn napi_coerce_to_number( .to_number(&mut env.scope()) .ok_or(Error::NumberExpected)?; let value: v8::Local<v8::Value> = coerced.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -193,7 +201,7 @@ fn napi_coerce_to_object( let value = transmute::<napi_value, v8::Local<v8::Value>>(value); let coerced = value.to_object(&mut env.scope()).unwrap(); let value: v8::Local<v8::Value> = coerced.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -207,7 +215,7 @@ fn napi_coerce_to_string( let value = transmute::<napi_value, v8::Local<v8::Value>>(value); let coerced = value.to_string(&mut env.scope()).unwrap(); let value: v8::Local<v8::Value> = coerced.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -240,7 +248,7 @@ fn napi_create_dataview( ) .unwrap(); let value: v8::Local<v8::Value> = value.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -253,7 +261,7 @@ fn napi_create_date( let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::Date::new(&mut env.scope(), time).unwrap().into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -266,7 +274,7 @@ fn napi_create_double( let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::Number::new(&mut env.scope(), value).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -285,7 +293,7 @@ fn napi_create_error( let msg = msg.to_string(&mut env.scope()).unwrap(); let error = v8::Exception::error(&mut env.scope(), msg); - *result = transmute::<v8::Local<v8::Value>, napi_value>(error); + *result = error.into(); Ok(()) } @@ -302,7 +310,7 @@ fn napi_create_external( let value: v8::Local<v8::Value> = v8::External::new(&mut env.scope(), value).into(); // TODO: finalization - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -353,7 +361,7 @@ fn napi_create_external_arraybuffer( let ab = v8::ArrayBuffer::with_backing_store(&mut env.scope(), &store.make_shared()); let value: v8::Local<v8::Value> = ab.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -382,7 +390,7 @@ fn napi_create_external_buffer( let value = v8::Uint8Array::new(&mut env.scope(), ab, 0, slice.len()).unwrap(); let value: v8::Local<v8::Value> = value.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -416,7 +424,7 @@ fn napi_create_function( let function = create_function(env_ptr, name, cb, cb_info); let value: v8::Local<v8::Value> = function.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -429,7 +437,7 @@ fn napi_create_int32( let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::Number::new(&mut env.scope(), value as f64).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -442,7 +450,7 @@ fn napi_create_int64( let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::Number::new(&mut env.scope(), value as f64).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -450,7 +458,7 @@ fn napi_create_int64( fn napi_create_object(env: *mut Env, result: *mut napi_value) -> Result { let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let object = v8::Object::new(&mut env.scope()); - *result = transmute::<v8::Local<v8::Value>, napi_value>(object.into()); + *result = object.into(); Ok(()) } @@ -466,7 +474,7 @@ fn napi_create_promise( let mut global_ptr = global.into_raw(); let promise = resolver.get_promise(&mut env.scope()); *deferred = global_ptr.as_mut() as *mut _ as napi_deferred; - *promise_out = transmute::<v8::Local<v8::Value>, napi_value>(promise.into()); + *promise_out = promise.into(); Ok(()) } @@ -486,7 +494,7 @@ fn napi_create_range_error( let msg = msg.to_string(&mut env.scope()).unwrap(); let error = v8::Exception::range_error(&mut env.scope(), msg); - *result = transmute::<v8::Local<v8::Value>, napi_value>(error); + *result = error.into(); Ok(()) } @@ -531,7 +539,7 @@ fn napi_create_string_latin1( ) { Some(v8str) => { let value: v8::Local<v8::Value> = v8str.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); } None => return Err(Error::GenericFailure), } @@ -555,7 +563,7 @@ fn napi_create_string_utf16( ) .unwrap(); let value: v8::Local<v8::Value> = v8str.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -578,7 +586,7 @@ fn napi_create_string_utf8( }; let v8str = v8::String::new(&mut env.scope(), string).unwrap(); let value: v8::Local<v8::Value> = v8str.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -590,7 +598,7 @@ fn napi_create_symbol( result: *mut napi_value, ) -> Result { let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; - let description = match description.is_null() { + let description = match description.is_none() { true => None, false => Some( transmute::<napi_value, v8::Local<v8::Value>>(description) @@ -599,7 +607,7 @@ fn napi_create_symbol( ), }; let sym = v8::Symbol::new(&mut env.scope(), description); - *result = transmute::<v8::Local<v8::Value>, napi_value>(sym.into()); + *result = sym.into(); Ok(()) } @@ -618,7 +626,7 @@ fn napi_create_type_error( let msg = msg.to_string(&mut env.scope()).unwrap(); let error = v8::Exception::type_error(&mut env.scope(), msg); - *result = transmute::<v8::Local<v8::Value>, napi_value>(error); + *result = error.into(); Ok(()) } @@ -695,7 +703,7 @@ fn napi_create_typedarray( return Err(Error::InvalidArg); } }; - *result = transmute::<v8::Local<v8::Value>, napi_value>(typedarray); + *result = typedarray.into(); Ok(()) } @@ -708,7 +716,7 @@ fn napi_create_uint32( let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::Number::new(&mut env.scope(), value as f64).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -723,7 +731,7 @@ fn napi_make_callback( result: *mut napi_value, ) -> Result { let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; - check_arg!(recv); + check_arg_option!(recv); if argc > 0 { check_arg!(argv); } @@ -1172,7 +1180,7 @@ fn napi_define_class( } let value: v8::Local<v8::Value> = tpl.get_function(scope).unwrap().into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1260,11 +1268,11 @@ fn napi_detach_arraybuffer(_env: *mut Env, value: napi_value) -> Result { } #[napi_sym::napi_sym] -fn napi_escape_handle( +fn napi_escape_handle<'s>( _env: *mut Env, _handle_scope: napi_escapable_handle_scope, - escapee: napi_value, - result: *mut napi_value, + escapee: napi_value<'s>, + result: *mut napi_value<'s>, ) -> Result { // TODO *result = escapee; @@ -1286,7 +1294,7 @@ fn napi_get_and_clear_last_exception( // TODO: just return undefined for now we don't cache // exceptions in env. let value: v8::Local<v8::Value> = v8::undefined(&mut env.scope()).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1326,7 +1334,7 @@ fn napi_get_boolean( let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::Boolean::new(&mut env.scope(), value).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1370,7 +1378,7 @@ fn napi_get_cb_info( if !this_arg.is_null() { let mut this = args.this(); - *this_arg = transmute::<v8::Local<v8::Value>, napi_value>(this.into()); + *this_arg = this.into(); } let len = args.length(); @@ -1383,7 +1391,7 @@ fn napi_get_cb_info( let mut v_argv = std::slice::from_raw_parts_mut(argv, v_argc as usize); for i in 0..v_argc { let mut arg = args.get(i); - v_argv[i as usize] = transmute::<v8::Local<v8::Value>, napi_value>(arg); + v_argv[i as usize] = arg.into(); } } @@ -1437,7 +1445,7 @@ fn napi_get_element( let array = v8::Local::<v8::Array>::try_from(object).unwrap(); let value: v8::Local<v8::Value> = array.get_index(&mut env.scope(), index).unwrap(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1448,7 +1456,7 @@ fn napi_get_global(env: *mut Env, result: *mut napi_value) -> Result { let context = &mut env.scope().get_current_context(); let global = context.global(&mut env.scope()); let value: v8::Local<v8::Value> = global.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1493,7 +1501,7 @@ fn napi_get_named_property( .unwrap() .get(&mut env.scope(), name.into()) .unwrap(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1513,7 +1521,7 @@ fn napi_get_null(env: *mut Env, result: *mut napi_value) -> Result { let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::null(&mut env.scope()).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1528,7 +1536,7 @@ fn napi_get_property( let object = transmute::<napi_value, v8::Local<v8::Object>>(object); let key = transmute::<napi_value, v8::Local<v8::Value>>(key); let value: v8::Local<v8::Value> = object.get(&mut env.scope(), key).unwrap(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1546,7 +1554,7 @@ fn napi_get_property_names( .get_property_names(&mut env.scope(), Default::default()) .unwrap(); let value: v8::Local<v8::Value> = array.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1560,7 +1568,7 @@ fn napi_get_prototype( let value = transmute::<napi_value, v8::Local<v8::Value>>(value); let obj = value.to_object(&mut env.scope()).unwrap(); let proto = obj.get_prototype(&mut env.scope()).unwrap(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(proto); + *result = proto.into(); Ok(()) } @@ -1574,7 +1582,7 @@ fn napi_get_reference_value( let _env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value = transmute::<napi_ref, v8::Local<v8::Value>>(reference); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1604,7 +1612,7 @@ fn napi_get_typedarray_info( fn napi_get_undefined(env: *mut Env, result: *mut napi_value) -> Result { let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; let value: v8::Local<v8::Value> = v8::undefined(&mut env.scope()).into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -1704,8 +1712,8 @@ fn napi_instanceof( result: *mut bool, ) -> Result { let env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?; - check_arg!(constructor); - check_arg!(value); + check_arg_option!(constructor); + check_arg_option!(value); let value = transmute::<napi_value, v8::Local<v8::Value>>(value); let constructor = transmute::<napi_value, v8::Local<v8::Value>>(constructor); @@ -1853,7 +1861,7 @@ fn napi_new_instance( transmute(std::slice::from_raw_parts(argv, argc)); let inst = constructor.new_instance(&mut env.scope(), args).unwrap(); let value: v8::Local<v8::Value> = inst.into(); - *result = transmute::<v8::Local<v8::Value>, napi_value>(value); + *result = value.into(); Ok(()) } @@ -2000,7 +2008,7 @@ fn napi_run_script( let rv = script.run(&mut env.scope()); if let Some(rv) = rv { - *result = transmute::<v8::Local<v8::Value>, napi_value>(rv); + *result = rv.into(); } else { return Err(Error::GenericFailure); } @@ -2187,7 +2195,7 @@ fn napi_typeof( value: napi_value, result: *mut napi_valuetype, ) -> Result { - if value.is_null() { + if value.is_none() { *result = napi_undefined; return Ok(()); } @@ -2269,7 +2277,7 @@ fn node_api_create_syntax_error( let msg = msg.to_string(&mut env.scope()).unwrap(); let error = v8::Exception::syntax_error(&mut env.scope(), msg); - *result = transmute::<v8::Local<v8::Value>, napi_value>(error); + *result = error.into(); Ok(()) } |