summaryrefslogtreecommitdiff
path: root/ext/web
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-08-06 00:40:17 -0700
committerGitHub <noreply@github.com>2024-08-06 07:40:17 +0000
commit696d528641ed6e03cf64daaee48bcc7c3fc8b89f (patch)
treea4d41276bdbeca39027588a9ec8e2719487c28b5 /ext/web
parentba40347a35d10cffeae83ee95f69f7bc281096dd (diff)
fix(ext/web): make TextDecoderResource use cppgc (#24888)
Fixes https://github.com/denoland/deno/issues/24878
Diffstat (limited to 'ext/web')
-rw-r--r--ext/web/08_text_encoding.js17
-rw-r--r--ext/web/lib.rs27
2 files changed, 15 insertions, 29 deletions
diff --git a/ext/web/08_text_encoding.js b/ext/web/08_text_encoding.js
index 9920a81f8..3163c9628 100644
--- a/ext/web/08_text_encoding.js
+++ b/ext/web/08_text_encoding.js
@@ -56,8 +56,8 @@ class TextDecoder {
/** @type {boolean} */
#utf8SinglePass;
- /** @type {number | null} */
- #rid = null;
+ /** @type {object | null} */
+ #handle = null;
/**
* @param {string} label
@@ -159,7 +159,7 @@ class TextDecoder {
}
// Fast path for single pass encoding.
- if (!stream && this.#rid === null) {
+ if (!stream && this.#handle === null) {
// Fast path for utf8 single pass encoding.
if (this.#utf8SinglePass) {
return op_encoding_decode_utf8(input, this.#ignoreBOM);
@@ -173,18 +173,17 @@ class TextDecoder {
);
}
- if (this.#rid === null) {
- this.#rid = op_encoding_new_decoder(
+ if (this.#handle === null) {
+ this.#handle = op_encoding_new_decoder(
this.#encoding,
this.#fatal,
this.#ignoreBOM,
);
}
- return op_encoding_decode(input, this.#rid, stream);
+ return op_encoding_decode(input, this.#handle, stream);
} finally {
- if (!stream && this.#rid !== null) {
- core.close(this.#rid);
- this.#rid = null;
+ if (!stream && this.#handle !== null) {
+ this.#handle = null;
}
}
}
diff --git a/ext/web/lib.rs b/ext/web/lib.rs
index 89f1197e7..3977379a5 100644
--- a/ext/web/lib.rs
+++ b/ext/web/lib.rs
@@ -13,9 +13,6 @@ use deno_core::op2;
use deno_core::url::Url;
use deno_core::v8;
use deno_core::ByteString;
-use deno_core::OpState;
-use deno_core::Resource;
-use deno_core::ResourceId;
use deno_core::ToJsBuffer;
use deno_core::U16String;
@@ -277,14 +274,13 @@ fn op_encoding_decode_single(
}
}
-#[op2(fast)]
-#[smi]
+#[op2]
+#[cppgc]
fn op_encoding_new_decoder(
- state: &mut OpState,
#[string] label: &str,
fatal: bool,
ignore_bom: bool,
-) -> Result<ResourceId, AnyError> {
+) -> Result<TextDecoderResource, AnyError> {
let encoding = Encoding::for_label(label.as_bytes()).ok_or_else(|| {
range_error(format!(
"The encoding label provided ('{label}') is invalid."
@@ -297,24 +293,19 @@ fn op_encoding_new_decoder(
encoding.new_decoder_with_bom_removal()
};
- let rid = state.resource_table.add(TextDecoderResource {
+ Ok(TextDecoderResource {
decoder: RefCell::new(decoder),
fatal,
- });
-
- Ok(rid)
+ })
}
#[op2]
#[serde]
fn op_encoding_decode(
- state: &mut OpState,
#[anybuffer] data: &[u8],
- #[smi] rid: ResourceId,
+ #[cppgc] resource: &TextDecoderResource,
stream: bool,
) -> Result<U16String, AnyError> {
- let resource = state.resource_table.get::<TextDecoderResource>(rid)?;
-
let mut decoder = resource.decoder.borrow_mut();
let fatal = resource.fatal;
@@ -357,11 +348,7 @@ struct TextDecoderResource {
fatal: bool,
}
-impl Resource for TextDecoderResource {
- fn name(&self) -> Cow<str> {
- "textDecoder".into()
- }
-}
+impl deno_core::GarbageCollected for TextDecoderResource {}
#[op2(fast(op_encoding_encode_into_fast))]
fn op_encoding_encode_into(