Skip to content

Commit

Permalink
Move VLQ out of strings
Browse files Browse the repository at this point in the history
  • Loading branch information
jridgewell committed Jun 27, 2024
1 parent e86a0ff commit ed80f4c
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 19 deletions.
18 changes: 9 additions & 9 deletions src/scopes.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { StringReader, StringWriter, comma, semicolon } from './strings';
import { decodeInteger, encodeInteger } from './vlq';
import { StringReader, StringWriter } from './strings';
import { comma, decodeInteger, encodeInteger, hasMoreVlq, semicolon } from './vlq';

type Line = number;
type Column = number;
Expand Down Expand Up @@ -40,7 +40,7 @@ export function decodeOriginalScopes(input: string): OriginalScope[] {
line = decodeInteger(reader, line);
const column = decodeInteger(reader, 0);

if (!reader.hasMoreVlq(length)) {
if (!hasMoreVlq(reader, length)) {
const last = stack.pop()!;
last[2] = line;
last[3] = column;
Expand All @@ -56,13 +56,13 @@ export function decodeOriginalScopes(input: string): OriginalScope[] {
scopes.push(scope);
stack.push(scope);

if (reader.hasMoreVlq(length)) {
if (hasMoreVlq(reader, length)) {
const vars: Var[] = [];
scope.vars = vars;
do {
const varsIndex = decodeInteger(reader, 0);
vars.push(varsIndex);
} while (reader.hasMoreVlq(length));
} while (hasMoreVlq(reader, length));
}
}

Expand Down Expand Up @@ -146,7 +146,7 @@ export function decodeGeneratedRanges(input: string): GeneratedRange[] {
for (; reader.pos < semi; reader.pos++) {
genColumn = decodeInteger(reader, genColumn);

if (!reader.hasMoreVlq(semi)) {
if (!hasMoreVlq(reader, semi)) {
const range = stack.pop()!;
range[2] = genLine;
range[3] = genColumn;
Expand Down Expand Up @@ -190,7 +190,7 @@ export function decodeGeneratedRanges(input: string): GeneratedRange[] {
range.isScope = true;
}

if (reader.hasMoreVlq(semi)) {
if (hasMoreVlq(reader, semi)) {
const bindings: ExpressionBinding[][] = [];
range.bindings = bindings;
do {
Expand All @@ -211,7 +211,7 @@ export function decodeGeneratedRanges(input: string): GeneratedRange[] {
expressionRanges = [[expressionsCount]];
}
bindings.push(expressionRanges);
} while (reader.hasMoreVlq(semi));
} while (hasMoreVlq(reader, semi));
}

ranges.push(range);
Expand All @@ -220,7 +220,7 @@ export function decodeGeneratedRanges(input: string): GeneratedRange[] {

genLine++;
reader.pos = semi + 1;
} while (reader.pos < input.length);
} while (reader.hasMore());

return ranges;
}
Expand Down
8 changes: 4 additions & 4 deletions src/sourcemap-codec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { decodeInteger, encodeInteger } from './vlq';
import { StringWriter, StringReader, comma, semicolon } from './strings';
import { comma, decodeInteger, encodeInteger, hasMoreVlq, semicolon } from './vlq';
import { StringWriter, StringReader } from './strings';

export {
decodeOriginalScopes,
Expand Down Expand Up @@ -39,12 +39,12 @@ export function decode(mappings: string): SourceMapMappings {
if (genColumn < lastCol) sorted = false;
lastCol = genColumn;

if (reader.hasMoreVlq(semi)) {
if (hasMoreVlq(reader, semi)) {
sourcesIndex = decodeInteger(reader, sourcesIndex);
sourceLine = decodeInteger(reader, sourceLine);
sourceColumn = decodeInteger(reader, sourceColumn);

if (reader.hasMoreVlq(semi)) {
if (hasMoreVlq(reader, semi)) {
namesIndex = decodeInteger(reader, namesIndex);
seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];
} else {
Expand Down
12 changes: 6 additions & 6 deletions src/strings.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
const bufLength = 1024 * 16;
export const comma = ','.charCodeAt(0);
export const semicolon = ';'.charCodeAt(0);

// Provide a fallback for older environments.
const td =
Expand Down Expand Up @@ -55,10 +53,12 @@ export class StringReader {
return this.buffer.charCodeAt(this.pos++);
}

hasMoreVlq(max: number): boolean {
const { buffer, pos } = this;
if (pos >= max) return false;
return buffer.charCodeAt(pos) !== comma;
peek(): number {
return this.buffer.charCodeAt(this.pos);
}

hasMore(): boolean {
return this.pos < this.buffer.length;
}

indexOf(char: string): number {
Expand Down
8 changes: 8 additions & 0 deletions src/vlq.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import type { StringReader, StringWriter } from './strings';

export const comma = ','.charCodeAt(0);
export const semicolon = ';'.charCodeAt(0);

const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
const intToChar = new Uint8Array(64); // 64 possible chars.
const charToInt = new Uint8Array(128); // z is 122 in ASCII
Expand Down Expand Up @@ -45,3 +48,8 @@ export function encodeInteger(builder: StringWriter, num: number, relative: numb

return num;
}

export function hasMoreVlq(reader: StringReader, max: number) {
if (reader.pos >= max) return false;
return reader.peek() !== comma;
}

0 comments on commit ed80f4c

Please sign in to comment.