diff options
Diffstat (limited to 'ext/ffi/static.rs')
-rw-r--r-- | ext/ffi/static.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/ext/ffi/static.rs b/ext/ffi/static.rs index 2f32f03fd..ae095d5fc 100644 --- a/ext/ffi/static.rs +++ b/ext/ffi/static.rs @@ -20,10 +20,21 @@ pub fn op_ffi_get_static<'scope>( rid: ResourceId, name: String, static_type: NativeType, + optional: bool, ) -> Result<serde_v8::Value<'scope>, AnyError> { let resource = state.resource_table.get::<DynamicLibraryResource>(rid)?; - let data_ptr = resource.get_static(name)?; + let data_ptr = match resource.get_static(name) { + Ok(data_ptr) => Ok(data_ptr), + Err(err) => { + if optional { + let null: v8::Local<v8::Value> = v8::null(scope).into(); + return Ok(null.into()); + } else { + Err(err) + } + } + }?; Ok(match static_type { NativeType::Void => { |