mirror of
https://github.com/denoland/deno.git
synced 2024-11-24 15:19:26 -05:00
Revert #[cppgc] &mut T
usage (#24304)
This commit is contained in:
parent
e6756c3e66
commit
fc197a7ac0
2 changed files with 45 additions and 28 deletions
|
@ -1,5 +1,6 @@
|
|||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::collections::HashSet;
|
||||
use std::net::IpAddr;
|
||||
use std::net::Ipv4Addr;
|
||||
|
@ -17,6 +18,12 @@ use ipnetwork::Ipv4Network;
|
|||
use ipnetwork::Ipv6Network;
|
||||
use serde::Serialize;
|
||||
|
||||
pub struct BlockListResource {
|
||||
blocklist: RefCell<BlockList>,
|
||||
}
|
||||
|
||||
impl deno_core::GcResource for BlockListResource {}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct SocketAddressSerialization(String, String);
|
||||
|
||||
|
@ -59,51 +66,52 @@ pub fn op_socket_address_get_serialization(
|
|||
|
||||
#[op2]
|
||||
#[cppgc]
|
||||
pub fn op_blocklist_new() -> BlockList {
|
||||
BlockList::new()
|
||||
pub fn op_blocklist_new() -> BlockListResource {
|
||||
let blocklist = BlockList::new();
|
||||
BlockListResource {
|
||||
blocklist: RefCell::new(blocklist),
|
||||
}
|
||||
}
|
||||
|
||||
#[op2(fast)]
|
||||
pub fn op_blocklist_add_address(
|
||||
#[cppgc] blocklist: &mut BlockList,
|
||||
#[cppgc] wrap: &BlockListResource,
|
||||
#[string] addr: &str,
|
||||
) -> Result<(), AnyError> {
|
||||
blocklist.add_address(addr)
|
||||
wrap.blocklist.borrow_mut().add_address(addr)
|
||||
}
|
||||
|
||||
#[op2(fast)]
|
||||
pub fn op_blocklist_add_range(
|
||||
#[cppgc] blocklist: &mut BlockList,
|
||||
#[cppgc] wrap: &BlockListResource,
|
||||
#[string] start: &str,
|
||||
#[string] end: &str,
|
||||
) -> Result<bool, AnyError> {
|
||||
blocklist.add_range(start, end)
|
||||
wrap.blocklist.borrow_mut().add_range(start, end)
|
||||
}
|
||||
|
||||
#[op2(fast)]
|
||||
pub fn op_blocklist_add_subnet(
|
||||
#[cppgc] blocklist: &mut BlockList,
|
||||
#[cppgc] wrap: &BlockListResource,
|
||||
#[string] addr: &str,
|
||||
#[smi] prefix: u8,
|
||||
) -> Result<(), AnyError> {
|
||||
blocklist.add_subnet(addr, prefix)
|
||||
wrap.blocklist.borrow_mut().add_subnet(addr, prefix)
|
||||
}
|
||||
|
||||
#[op2(fast)]
|
||||
pub fn op_blocklist_check(
|
||||
#[cppgc] blocklist: &BlockList,
|
||||
#[cppgc] wrap: &BlockListResource,
|
||||
#[string] addr: &str,
|
||||
#[string] type_: &str,
|
||||
#[string] r#type: &str,
|
||||
) -> Result<bool, AnyError> {
|
||||
blocklist.check(addr, type_)
|
||||
wrap.blocklist.borrow().check(addr, r#type)
|
||||
}
|
||||
|
||||
struct BlockList {
|
||||
rules: HashSet<IpNetwork>,
|
||||
}
|
||||
|
||||
impl deno_core::GcResource for BlockList {}
|
||||
|
||||
impl BlockList {
|
||||
pub fn new() -> Self {
|
||||
BlockList {
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
use deno_core::error::type_error;
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::op2;
|
||||
use std::borrow::Cow;
|
||||
use std::cell::RefCell;
|
||||
use zlib::*;
|
||||
|
||||
mod alloc;
|
||||
|
@ -228,17 +230,17 @@ impl ZlibInner {
|
|||
}
|
||||
|
||||
struct Zlib {
|
||||
inner: Option<ZlibInner>,
|
||||
}
|
||||
|
||||
impl Zlib {
|
||||
fn as_mut(&mut self) -> Option<&mut ZlibInner> {
|
||||
self.inner.as_mut()
|
||||
}
|
||||
inner: RefCell<Option<ZlibInner>>,
|
||||
}
|
||||
|
||||
impl deno_core::GcResource for Zlib {}
|
||||
|
||||
impl deno_core::Resource for Zlib {
|
||||
fn name(&self) -> Cow<str> {
|
||||
"zlib".into()
|
||||
}
|
||||
}
|
||||
|
||||
#[op2]
|
||||
#[cppgc]
|
||||
pub fn op_zlib_new(#[smi] mode: i32) -> Result<Zlib, AnyError> {
|
||||
|
@ -249,12 +251,15 @@ pub fn op_zlib_new(#[smi] mode: i32) -> Result<Zlib, AnyError> {
|
|||
..Default::default()
|
||||
};
|
||||
|
||||
Ok(Zlib { inner: Some(inner) })
|
||||
Ok(Zlib {
|
||||
inner: RefCell::new(Some(inner)),
|
||||
})
|
||||
}
|
||||
|
||||
#[op2(fast)]
|
||||
pub fn op_zlib_close(#[cppgc] zlib: &mut Zlib) -> Result<(), AnyError> {
|
||||
let zlib = zlib
|
||||
pub fn op_zlib_close(#[cppgc] resource: &Zlib) -> Result<(), AnyError> {
|
||||
let mut resource = resource.inner.borrow_mut();
|
||||
let zlib = resource
|
||||
.as_mut()
|
||||
.ok_or_else(|| type_error("zlib not initialized"))?;
|
||||
|
||||
|
@ -268,7 +273,7 @@ pub fn op_zlib_close(#[cppgc] zlib: &mut Zlib) -> Result<(), AnyError> {
|
|||
#[op2(fast)]
|
||||
#[smi]
|
||||
pub fn op_zlib_write(
|
||||
#[cppgc] zlib: &mut Zlib,
|
||||
#[cppgc] resource: &Zlib,
|
||||
#[smi] flush: i32,
|
||||
#[buffer] input: &[u8],
|
||||
#[smi] in_off: u32,
|
||||
|
@ -278,6 +283,7 @@ pub fn op_zlib_write(
|
|||
#[smi] out_len: u32,
|
||||
#[buffer] result: &mut [u32],
|
||||
) -> Result<i32, AnyError> {
|
||||
let mut zlib = resource.inner.borrow_mut();
|
||||
let zlib = zlib
|
||||
.as_mut()
|
||||
.ok_or_else(|| type_error("zlib not initialized"))?;
|
||||
|
@ -295,13 +301,14 @@ pub fn op_zlib_write(
|
|||
#[op2(fast)]
|
||||
#[smi]
|
||||
pub fn op_zlib_init(
|
||||
#[cppgc] zlib: &mut Zlib,
|
||||
#[cppgc] resource: &Zlib,
|
||||
#[smi] level: i32,
|
||||
#[smi] window_bits: i32,
|
||||
#[smi] mem_level: i32,
|
||||
#[smi] strategy: i32,
|
||||
#[buffer] dictionary: &[u8],
|
||||
) -> Result<i32, AnyError> {
|
||||
let mut zlib = resource.inner.borrow_mut();
|
||||
let zlib = zlib
|
||||
.as_mut()
|
||||
.ok_or_else(|| type_error("zlib not initialized"))?;
|
||||
|
@ -341,7 +348,8 @@ pub fn op_zlib_init(
|
|||
|
||||
#[op2(fast)]
|
||||
#[smi]
|
||||
pub fn op_zlib_reset(#[cppgc] zlib: &mut Zlib) -> Result<i32, AnyError> {
|
||||
pub fn op_zlib_reset(#[cppgc] resource: &Zlib) -> Result<i32, AnyError> {
|
||||
let mut zlib = resource.inner.borrow_mut();
|
||||
let zlib = zlib
|
||||
.as_mut()
|
||||
.ok_or_else(|| type_error("zlib not initialized"))?;
|
||||
|
@ -353,9 +361,10 @@ pub fn op_zlib_reset(#[cppgc] zlib: &mut Zlib) -> Result<i32, AnyError> {
|
|||
|
||||
#[op2(fast)]
|
||||
pub fn op_zlib_close_if_pending(
|
||||
#[cppgc] zlib: &mut Zlib,
|
||||
#[cppgc] resource: &Zlib,
|
||||
) -> Result<(), AnyError> {
|
||||
let pending_close = {
|
||||
let mut zlib = resource.inner.borrow_mut();
|
||||
let zlib = zlib
|
||||
.as_mut()
|
||||
.ok_or_else(|| type_error("zlib not initialized"))?;
|
||||
|
@ -364,7 +373,7 @@ pub fn op_zlib_close_if_pending(
|
|||
zlib.pending_close
|
||||
};
|
||||
if pending_close {
|
||||
if let Some(mut res) = zlib.inner.take() {
|
||||
if let Some(mut res) = resource.inner.borrow_mut().take() {
|
||||
let _ = res.close();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue