Skip to content

Commit 8c51121

Browse files
committed
perf(napi/parser, linter/plugins): raw transfer deserialize Span fields as i32s (#21135)
Continuation of #21132. Get span `start` and `end` from the `Int32Array` view of the buffer, instead of the `Uint32Array`view. This allows V8 to statically see that they are SMIs, and skip type checks.
1 parent bc1bcdd commit 8c51121

22 files changed

Lines changed: 3836 additions & 3792 deletions

File tree

apps/oxlint/src-js/generated/deserialize.js

Lines changed: 371 additions & 373 deletions
Large diffs are not rendered by default.

crates/oxc_ast/src/serialize/js.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ impl ESTree for CatchParameterConverter<'_, '_> {
185185
typeAnnotation: null,
186186
value: null,
187187
}),
188-
start: start = DESER[u32]( POS_OFFSET<FormalParameterRest>.rest.span.start ),
189-
end: end = DESER[u32]( POS_OFFSET<FormalParameterRest>.rest.span.end ),
188+
start: start = DESER[i32]( POS_OFFSET<FormalParameterRest>.rest.span.start ),
189+
end: end = DESER[i32]( POS_OFFSET<FormalParameterRest>.rest.span.end ),
190190
...(RANGE && { range: [start, end] }),
191191
...(PARENT && { parent: previousParent }),
192192
};
@@ -273,8 +273,8 @@ impl ESTree for FormalParameterRest<'_> {
273273
right: null,
274274
optional,
275275
typeAnnotation: null,
276-
start: start = DESER[u32]( POS_OFFSET.span.start ),
277-
end: end = DESER[u32]( POS_OFFSET.span.end ),
276+
start: start = DESER[i32]( POS_OFFSET.span.start ),
277+
end: end = DESER[i32]( POS_OFFSET.span.end ),
278278
...(RANGE && { range: [start, end] }),
279279
...(PARENT && { parent: previousParent }),
280280
};
@@ -305,8 +305,8 @@ impl ESTree for FormalParameterRest<'_> {
305305
param.end = typeAnnotation.end;
306306
if (RANGE) param.range[1] = typeAnnotation.end;
307307
} else if (optional) {
308-
param.end = DESER[u32]( POS_OFFSET.span.end );
309-
if (RANGE) param.range[1] = DESER[u32]( POS_OFFSET.span.end );
308+
param.end = DESER[i32]( POS_OFFSET.span.end );
309+
if (RANGE) param.range[1] = DESER[i32]( POS_OFFSET.span.end );
310310
}
311311
if (PARENT) parent = previousParent;
312312
}
@@ -320,8 +320,8 @@ impl ESTree for FormalParameterRest<'_> {
320320
parameter: null,
321321
readonly,
322322
static: false,
323-
start: start = DESER[u32]( POS_OFFSET.span.start ),
324-
end: end = DESER[u32]( POS_OFFSET.span.end ),
323+
start: start = DESER[i32]( POS_OFFSET.span.start ),
324+
end: end = DESER[i32]( POS_OFFSET.span.end ),
325325
...(RANGE && { range: [start, end] }),
326326
...(PARENT && { parent: previousParent }),
327327
};
@@ -369,7 +369,7 @@ impl ESTree for FormalParameterRest<'_> {
369369
param.parameter.end = paramTypeAnnotation.end;
370370
if (RANGE) param.parameter.range[1] = paramTypeAnnotation.end;
371371
} else if (paramOptional) {
372-
const paramEnd = DESER[u32]( POS_OFFSET.span.end );
372+
const paramEnd = DESER[i32]( POS_OFFSET.span.end );
373373
const pattern = param.parameter;
374374
param.parameter.end = paramEnd;
375375
if (RANGE) param.parameter.range[1] = paramEnd;
@@ -384,8 +384,8 @@ impl ESTree for FormalParameterRest<'_> {
384384
type: 'AssignmentPattern',
385385
left: null,
386386
right: null,
387-
start: start = DESER[u32]( POS_OFFSET.span.start ),
388-
end: end = DESER[u32]( POS_OFFSET.span.end ),
387+
start: start = DESER[i32]( POS_OFFSET.span.start ),
388+
end: end = DESER[i32]( POS_OFFSET.span.end ),
389389
...(RANGE && { range: [start, end] }),
390390
...(PARENT && { parent: previousParent }),
391391
};
@@ -767,8 +767,8 @@ impl ESTree for AssignmentTargetPropertyIdentifierInit<'_> {
767767
node = parent = {
768768
type: 'ParenthesizedExpression',
769769
expression: null,
770-
start: start = DESER[u32]( POS_OFFSET.span.start ),
771-
end: end = DESER[u32]( POS_OFFSET.span.end ),
770+
start: start = DESER[i32]( POS_OFFSET.span.start ),
771+
end: end = DESER[i32]( POS_OFFSET.span.end ),
772772
...(RANGE && { range: [start, end] }),
773773
...(PARENT && { parent }),
774774
};

crates/oxc_ast/src/serialize/literal.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ impl ESTree for RegExpFlagsConverter<'_> {
197197
#[ast_meta]
198198
#[estree(raw_deser = r#"
199199
const tail = DESER[bool](POS_OFFSET.tail),
200-
start = IS_TS ? DESER[u32](POS_OFFSET.span.start) - 1 : DESER[u32](POS_OFFSET.span.start),
201-
end = IS_TS ? DESER[u32](POS_OFFSET.span.end) + 2 - tail : DESER[u32](POS_OFFSET.span.end),
200+
start = IS_TS ? DESER[i32](POS_OFFSET.span.start) - 1 : DESER[i32](POS_OFFSET.span.start),
201+
end = IS_TS ? DESER[i32](POS_OFFSET.span.end) + 2 - tail : DESER[i32](POS_OFFSET.span.end),
202202
value = DESER[TemplateElementValue](POS_OFFSET.value);
203203
if (value.cooked !== null && DESER[bool](POS_OFFSET.lone_surrogates)) {
204204
value.cooked = value.cooked

crates/oxc_ast/src/serialize/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ impl Program<'_> {
121121
/// `Program` span start is 0 (not 5).
122122
#[ast_meta]
123123
#[estree(raw_deser = "
124-
const start = IS_TS ? 0 : DESER[u32](POS_OFFSET.span.start),
125-
end = DESER[u32](POS_OFFSET.span.end);
124+
const start = IS_TS ? 0 : DESER[i32](POS_OFFSET.span.start),
125+
end = DESER[i32](POS_OFFSET.span.end);
126126
127127
const program = parent = {
128128
type: 'Program',

crates/oxc_ast/src/serialize/ts.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ impl ESTree for ExpressionStatementDirective<'_, '_> {
5252
#[ast_meta]
5353
#[estree(raw_deser = "
5454
const kind = DESER[TSModuleDeclarationKind](POS_OFFSET.kind),
55-
start = DESER[u32](POS_OFFSET.span.start),
56-
end = DESER[u32](POS_OFFSET.span.end),
55+
start = DESER[i32](POS_OFFSET.span.start),
56+
end = DESER[i32](POS_OFFSET.span.end),
5757
declare = DESER[bool](POS_OFFSET.declare);
5858
5959
let node;
@@ -266,8 +266,8 @@ impl ESTree for TSModuleDeclarationIdParts<'_, '_> {
266266
optional: false,
267267
typeAnnotation: null,
268268
}),
269-
start: keywordStart = DESER[u32](POS_OFFSET.global_span.start),
270-
end: keywordEnd = DESER[u32](POS_OFFSET.global_span.end),
269+
start: keywordStart = DESER[i32](POS_OFFSET.global_span.start),
270+
end: keywordEnd = DESER[i32](POS_OFFSET.global_span.end),
271271
...(RANGE && { range: [keywordStart, keywordEnd] }),
272272
...(PARENT && { parent }),
273273
};
@@ -488,8 +488,8 @@ impl ESTree for TSFunctionTypeParams<'_, '_> {
488488
node = parent = {
489489
type: 'TSParenthesizedType',
490490
typeAnnotation: null,
491-
start: start = DESER[u32]( POS_OFFSET.span.start ),
492-
end: end = DESER[u32]( POS_OFFSET.span.end ),
491+
start: start = DESER[i32]( POS_OFFSET.span.start ),
492+
end: end = DESER[i32]( POS_OFFSET.span.end ),
493493
...(RANGE && { range: [start, end] }),
494494
...(PARENT && { parent }),
495495
};

0 commit comments

Comments
 (0)