summaryrefslogtreecommitdiff
path: root/ext/url/lib.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-12-15 16:26:10 +0100
committerGitHub <noreply@github.com>2022-12-15 15:26:10 +0000
commit585ec1218f8cdc191f2e733beb2e6c7a230ac85c (patch)
tree8a0e5d88f2390890121a6083a39c833af21ea5d1 /ext/url/lib.rs
parent0d4e4af7acf82c1365999a7281910daa05f0e982 (diff)
Revert "feat(ops): Fast zero copy string arguments (#16777)" (#17063)
This reverts commit 9b2b8df927ac23cfa99016a684179f2a3198ba2e. Closes https://github.com/dsherret/ts-morph/issues/1372 Closes https://github.com/denoland/deno/issues/16979
Diffstat (limited to 'ext/url/lib.rs')
-rw-r--r--ext/url/lib.rs19
1 files changed, 10 insertions, 9 deletions
diff --git a/ext/url/lib.rs b/ext/url/lib.rs
index 01014ccd3..ac668207f 100644
--- a/ext/url/lib.rs
+++ b/ext/url/lib.rs
@@ -41,11 +41,11 @@ pub fn init() -> Extension {
#[op]
pub fn op_url_parse_with_base(
state: &mut OpState,
- href: &str,
- base_href: &str,
- buf: &mut [u32],
+ href: String,
+ base_href: String,
+ buf: &mut [u8],
) -> u32 {
- let base_url = match Url::parse(base_href) {
+ let base_url = match Url::parse(&base_href) {
Ok(url) => url,
Err(_) => return ParseStatus::Err as u32,
};
@@ -67,8 +67,8 @@ pub fn op_url_get_serialization(state: &mut OpState) -> String {
}
/// Parse `href` without a `base_url`. Fills the out `buf` with URL components.
-#[op(fast)]
-pub fn op_url_parse(state: &mut OpState, href: &str, buf: &mut [u32]) -> u32 {
+#[op]
+pub fn op_url_parse(state: &mut OpState, href: String, buf: &mut [u8]) -> u32 {
parse_url(state, href, None, buf)
}
@@ -99,14 +99,15 @@ pub fn op_url_parse(state: &mut OpState, href: &str, buf: &mut [u32]) -> u32 {
#[inline]
fn parse_url(
state: &mut OpState,
- href: &str,
+ href: String,
base_href: Option<&Url>,
- buf: &mut [u32],
+ buf: &mut [u8],
) -> u32 {
- match Url::options().base_url(base_href).parse(href) {
+ match Url::options().base_url(base_href).parse(&href) {
Ok(url) => {
let inner_url = quirks::internal_components(&url);
+ let buf: &mut [u32] = as_u32_slice(buf);
buf[0] = inner_url.scheme_end;
buf[1] = inner_url.username_end;
buf[2] = inner_url.host_start;