as-labs 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
- ## [Unreleased]
3
+ ## 2026-04-03 - 0.1.2
4
+
5
+ - Fix branch hint annotation for CLI text output and text-only emission paths
6
+ - Restructure `branch-hinting` AssemblyScript sources under `branch-hinting/assembly`
7
+ - Add feature-specific README and AssemblyScript `tsconfig.json` files
8
+ - Replace the synthetic branch hint benchmark with real `asc`-compiled fixture variants
9
+ - Clean package publish contents and ignore generated benchmark artifacts
10
+
11
+ ## 2026-04-02 - 0.1.1
12
+
13
+ - Add wrapper around binaryen to allow branch hinting
14
+
15
+ ## 2026-04-02 - 0.1.0
4
16
 
5
17
  - Added support for branch hinting
package/README.md CHANGED
@@ -17,7 +17,6 @@
17
17
  - [Debugging](#debugging)
18
18
  - [Architecture](#architecture)
19
19
  - [Contributing](#contributing)
20
- - [Who uses it?](#who-uses-it)
21
20
  - [License](#license)
22
21
  - [Contact](#contact)
23
22
 
@@ -163,10 +162,6 @@ The package is intentionally experimental. Contributions should prefer:
163
162
  - conservative root-transform behavior
164
163
  - tests that validate final wasm output, not just AST rewrites
165
164
 
166
- # Who uses it?
167
-
168
- This package is early and experimental. If you are using it, that likely means you are testing proposal support or custom AssemblyScript workflows before they are ready for a more stable package.
169
-
170
165
  ## License
171
166
 
172
167
  This project is distributed under an open source license. Work on this project is done by passion, but if you want to support it financially, you can do so by making a donation to the project's [GitHub Sponsors](https://github.com/sponsors/JairusSW) page.
@@ -0,0 +1,18 @@
1
+ # branch-hinting
2
+
3
+ AssemblyScript helpers and transform entrypoint for WebAssembly branch hinting.
4
+
5
+ ## Imports
6
+
7
+ ```ts
8
+ import { likely, unlikely } from "as-labs/branch-hinting";
9
+ ```
10
+
11
+ ## Transform
12
+
13
+ ```sh
14
+ asc assembly/index.ts --transform as-labs/branch-hinting -o build/module.wasm
15
+ ```
16
+
17
+ The transform emits the `metadata.code.branch_hint` custom section for direct
18
+ `likely(...)` and `unlikely(...)` statement conditions.
@@ -0,0 +1,9 @@
1
+ @inline
2
+ export function likely(value: bool): bool {
3
+ return value;
4
+ }
5
+
6
+ @inline
7
+ export function unlikely(value: bool): bool {
8
+ return value;
9
+ }
@@ -1,9 +1 @@
1
- @inline
2
- export function likely(value: bool): bool {
3
- return value;
4
- }
5
-
6
- @inline
7
- export function unlikely(value: bool): bool {
8
- return value;
9
- }
1
+ export { likely, unlikely } from "./assembly/index";
@@ -1,4 +1,4 @@
1
- import { decode } from "@webassemblyjs/wasm-parser";
1
+ import binaryen from "assemblyscript/lib/binaryen.js";
2
2
  import {
3
3
  CallExpression,
4
4
  FunctionDeclaration,
@@ -8,46 +8,20 @@ import {
8
8
  NodeKind,
9
9
  ParenthesizedExpression,
10
10
  SourceKind,
11
- getFunctionName,
12
11
  } from "assemblyscript/dist/assemblyscript.js";
13
12
  import type {
14
13
  Expression,
15
14
  Program,
16
15
  Source,
17
16
  } from "assemblyscript/dist/assemblyscript.js";
18
- import type binaryen from "assemblyscript/lib/binaryen.js";
19
17
  import { Transform } from "assemblyscript/dist/transform.js";
20
18
 
21
- const CUSTOM_SECTION_NAME = "metadata.code.branch_hint";
22
-
23
19
  type HintValue = 0 | 1;
24
20
 
25
21
  type HintRecord = {
26
22
  value: HintValue;
27
23
  };
28
24
 
29
- type ResolvedHint = {
30
- offset: number;
31
- value: HintValue;
32
- };
33
-
34
- type FunctionHintGroup = {
35
- functionIndex: number;
36
- hints: ResolvedHint[];
37
- };
38
-
39
- type SectionInfo = {
40
- id: number;
41
- start: number;
42
- payloadOffset: number;
43
- end: number;
44
- };
45
-
46
- type U32 = {
47
- value: number;
48
- nextOffset: number;
49
- };
50
-
51
25
  type BranchHintCall = {
52
26
  value: HintValue;
53
27
  expression: Expression;
@@ -58,12 +32,15 @@ type BinaryWithSourceMap = {
58
32
  sourceMap?: Uint8Array | string | null;
59
33
  };
60
34
 
61
- type BinaryEmitter = (...args: unknown[]) => BinaryWithSourceMap;
35
+ type BinaryEmitterResult = Uint8Array | BinaryWithSourceMap;
36
+ type BinaryEmitter = (...args: unknown[]) => BinaryEmitterResult;
62
37
 
63
38
  type ConditionalStatement = {
64
39
  condition: Expression;
65
40
  };
66
41
 
42
+ const ANNOTATION_NAME = "@metadata.code.branch_hint";
43
+
67
44
  export default class BranchHintTransform extends Transform {
68
45
  private functionHintsByDeclaration = new Map<
69
46
  FunctionDeclaration | MethodDeclaration,
@@ -92,15 +69,42 @@ export default class BranchHintTransform extends Transform {
92
69
  afterCompile(module: binaryen.Module): void {
93
70
  if (this.functionHintsByInternalName.size === 0) return;
94
71
 
72
+ const originalEmitText = module.emitText.bind(module);
73
+ const originalEmitStackIR = (module as binaryen.Module & {
74
+ emitStackIR?: () => string;
75
+ }).emitStackIR?.bind(module);
95
76
  const originalEmitBinary = module.emitBinary.bind(module) as BinaryEmitter;
77
+ const getAnnotatedText = (): string => {
78
+ const text = originalEmitText();
79
+ return annotateModuleText(text, this.functionHintsByInternalName);
80
+ };
81
+
82
+ module.emitText = (() => {
83
+ return getAnnotatedText();
84
+ }) as typeof module.emitText;
85
+
86
+ if (originalEmitStackIR) {
87
+ (module as binaryen.Module & {
88
+ emitStackIR?: () => string;
89
+ }).emitStackIR = () => {
90
+ const text = originalEmitStackIR();
91
+ return annotateModuleText(text, this.functionHintsByInternalName);
92
+ };
93
+ }
94
+
96
95
  module.emitBinary = ((...args: unknown[]) => {
97
- const result = originalEmitBinary(...args);
98
- result.binary = injectBranchHints(
99
- result.binary,
100
- module,
101
- this.functionHintsByInternalName,
102
- );
103
- return result;
96
+ const annotatedText = getAnnotatedText();
97
+ const text = originalEmitText();
98
+ if (annotatedText === text) {
99
+ return originalEmitBinary(...args);
100
+ }
101
+
102
+ const annotatedModule = binaryen.parseText(annotatedText);
103
+ try {
104
+ return (annotatedModule.emitBinary as BinaryEmitter)(...args);
105
+ } finally {
106
+ annotatedModule.dispose();
107
+ }
104
108
  }) as typeof module.emitBinary;
105
109
  }
106
110
 
@@ -266,319 +270,78 @@ function unwrapHint(expression: Expression): BranchHintCall | null {
266
270
  return null;
267
271
  }
268
272
 
269
- function injectBranchHints(
270
- binary: Uint8Array,
271
- module: binaryen.Module,
273
+ function annotateModuleText(
274
+ text: string,
272
275
  functionHintsByInternalName: Map<string, HintRecord[]>,
273
- ): Uint8Array {
274
- const importedFunctionCount = countImportedFunctions(binary);
275
- const functionOrder: string[] = [];
276
- for (let i = 0, n = module.getNumFunctions(); i < n; i++) {
277
- const name = getFunctionName(module.getFunctionByIndex(i));
278
- functionOrder.push(name ?? "");
279
- }
280
-
281
- const conditionalOffsets = collectConditionalOffsets(binary);
282
- const functionHints: FunctionHintGroup[] = [];
283
-
284
- for (let definedIndex = 0; definedIndex < conditionalOffsets.length; definedIndex++) {
285
- const internalName = functionOrder[importedFunctionCount + definedIndex];
286
- const wanted = functionHintsByInternalName.get(internalName);
287
- if (!wanted || wanted.length === 0) continue;
288
-
289
- const available = conditionalOffsets[definedIndex] || [];
290
- const matched: ResolvedHint[] = [];
291
- const count = Math.min(wanted.length, available.length);
292
- for (let i = 0; i < count; i++) {
293
- matched.push({
294
- offset: available[i],
295
- value: wanted[i].value,
296
- });
297
- }
298
- if (matched.length === 0) continue;
299
-
300
- functionHints.push({
301
- functionIndex: importedFunctionCount + definedIndex,
302
- hints: matched,
303
- });
304
- }
305
-
306
- if (functionHints.length === 0) return binary;
307
-
308
- const payload = encodeBranchHintPayload(functionHints);
309
- const customSection = encodeCustomSection(CUSTOM_SECTION_NAME, payload);
310
- return insertCustomSectionBeforeCode(binary, customSection, CUSTOM_SECTION_NAME);
311
- }
312
-
313
- function countImportedFunctions(binary: Uint8Array): number {
314
- const sections = parseSections(binary);
315
- const importSection = sections.find((section) => section.id === 2);
316
- if (!importSection) return 0;
317
-
318
- let offset = importSection.payloadOffset;
319
- const end = importSection.end;
320
- const countInfo = readU32(binary, offset);
321
- offset = countInfo.nextOffset;
322
- let functionImports = 0;
323
-
324
- for (let i = 0; i < countInfo.value && offset < end; i++) {
325
- const moduleName = readName(binary, offset);
326
- offset = moduleName.nextOffset;
327
- const fieldName = readName(binary, offset);
328
- offset = fieldName.nextOffset;
329
- const kind = binary[offset++] as number;
330
-
331
- switch (kind) {
332
- case 0:
333
- functionImports++;
334
- offset = readU32(binary, offset).nextOffset;
335
- break;
336
- case 1:
337
- offset = skipTableType(binary, offset);
338
- break;
339
- case 2:
340
- offset = skipMemoryType(binary, offset);
341
- break;
342
- case 3:
343
- offset = skipGlobalType(binary, offset);
344
- break;
345
- case 4:
346
- offset = skipTagType(binary, offset);
347
- break;
348
- default:
349
- throw new Error(`Unsupported import kind ${kind}`);
350
- }
351
- }
352
-
353
- return functionImports;
354
- }
355
-
356
- function collectConditionalOffsets(binary: Uint8Array): number[][] {
357
- const ast = decode(binary, {
358
- dump: false,
359
- ignoreCodeSection: false,
360
- ignoreDataSection: true,
361
- });
362
-
363
- const functions: any[] = [];
364
- walk(ast, (node: any) => {
365
- if (node?.type === "Func") {
366
- functions.push(node);
367
- }
368
- });
369
-
370
- return functions.map((func) => {
371
- const bodySize = readU32(binary, func.loc.start.column as number);
372
- const localsOffset = bodySize.nextOffset;
373
- const offsets: number[] = [];
374
-
375
- walk(func.body, (node: any) => {
376
- if (!node || !node.loc) return;
377
- if (node.type === "IfInstruction") {
378
- offsets.push((node.loc.start.column as number) - localsOffset - 1);
379
- } else if (node.type === "Instr" && node.id === "br_if") {
380
- offsets.push((node.loc.start.column as number) - localsOffset);
276
+ ): string {
277
+ const lines = text.split("\n");
278
+ const annotated: string[] = [];
279
+ let currentFunctionName: string | null = null;
280
+ let currentHints: HintRecord[] | null = null;
281
+ let hintIndex = 0;
282
+ let depth = 0;
283
+ let functionDepth = 0;
284
+ let changed = false;
285
+
286
+ for (const line of lines) {
287
+ const trimmed = line.trimStart();
288
+
289
+ if (currentFunctionName == null) {
290
+ const funcName = matchFunctionName(trimmed);
291
+ if (funcName) {
292
+ currentFunctionName = funcName;
293
+ currentHints = functionHintsByInternalName.get(funcName.slice(1)) ?? null;
294
+ hintIndex = 0;
295
+ functionDepth = depth;
381
296
  }
382
- });
383
-
384
- return offsets.filter((offset) => offset >= 0);
385
- });
386
- }
387
-
388
- function walk(node: unknown, visit: (node: unknown) => void): void {
389
- if (!node || typeof node !== "object") return;
390
- if (Array.isArray(node)) {
391
- for (const item of node) walk(item, visit);
392
- return;
393
- }
394
-
395
- visit(node);
396
- for (const [key, value] of Object.entries(node)) {
397
- if (key === "loc") continue;
398
- walk(value, visit);
399
- }
400
- }
401
-
402
- function encodeBranchHintPayload(functionHints: FunctionHintGroup[]): Uint8Array {
403
- const bytes: number[] = [];
404
- writeU32(bytes, functionHints.length);
405
-
406
- for (const { functionIndex, hints } of functionHints) {
407
- writeU32(bytes, functionIndex);
408
- writeU32(bytes, hints.length);
409
- for (const hint of hints) {
410
- writeU32(bytes, hint.offset);
411
- writeU32(bytes, 1);
412
- writeU32(bytes, hint.value);
413
297
  }
414
- }
415
-
416
- return Uint8Array.from(bytes);
417
- }
418
-
419
- function encodeCustomSection(name: string, payload: Uint8Array): Uint8Array {
420
- const nameBytes = new TextEncoder().encode(name);
421
- const contents: number[] = [];
422
- writeU32(contents, nameBytes.length);
423
- contents.push(...nameBytes);
424
- contents.push(...payload);
425
-
426
- const section: number[] = [];
427
- section.push(0);
428
- writeU32(section, contents.length);
429
- section.push(...contents);
430
- return Uint8Array.from(section);
431
- }
432
298
 
433
- function insertCustomSectionBeforeCode(
434
- binary: Uint8Array,
435
- customSection: Uint8Array,
436
- sectionName: string,
437
- ): Uint8Array {
438
- const sections = parseSections(binary);
439
- const filtered = sections.filter((section) => {
440
- if (section.id !== 0) return true;
441
- return readCustomSectionName(binary, section) !== sectionName;
442
- });
443
-
444
- const codeSection = filtered.find((section) => section.id === 10);
445
- if (!codeSection) {
446
- throw new Error("WebAssembly module has no code section");
447
- }
448
-
449
- const output: number[] = [];
450
- output.push(...binary.slice(0, 8));
451
-
452
- for (const section of filtered) {
453
- if (section.start === codeSection.start) {
454
- output.push(...customSection);
299
+ if (currentHints && hintIndex < currentHints.length && isHintableInstruction(trimmed)) {
300
+ annotated.push(
301
+ `${line.slice(0, line.length - trimmed.length)}(${ANNOTATION_NAME} "${encodeHintValue(currentHints[hintIndex].value)}")`,
302
+ );
303
+ hintIndex++;
304
+ changed = true;
455
305
  }
456
- output.push(...binary.slice(section.start, section.end));
457
- }
458
-
459
- return Uint8Array.from(output);
460
- }
461
-
462
- function parseSections(binary: Uint8Array): SectionInfo[] {
463
- const sections: SectionInfo[] = [];
464
- let offset = 8;
465
-
466
- while (offset < binary.length) {
467
- const start = offset;
468
- const id = binary[offset++] as number;
469
- const size = readU32(binary, offset);
470
- offset = size.nextOffset;
471
- const payloadOffset = offset;
472
- const end = payloadOffset + size.value;
473
- sections.push({
474
- id,
475
- start,
476
- payloadOffset,
477
- end,
478
- });
479
- offset = end;
480
- }
481
306
 
482
- return sections;
483
- }
484
-
485
- function readCustomSectionName(binary: Uint8Array, section: SectionInfo): string {
486
- const name = readName(binary, section.payloadOffset);
487
- return name.value;
488
- }
489
-
490
- function readName(binary: Uint8Array, offset: number): { value: string; nextOffset: number } {
491
- const length = readU32(binary, offset);
492
- const start = length.nextOffset;
493
- const end = start + length.value;
494
- return {
495
- value: new TextDecoder().decode(binary.slice(start, end)),
496
- nextOffset: end,
497
- };
498
- }
307
+ annotated.push(line);
308
+ depth += countParensDelta(line);
499
309
 
500
- function readU32(binary: Uint8Array, offset: number): U32 {
501
- let value = 0;
502
- let shift = 0;
503
- let current = offset;
504
-
505
- while (true) {
506
- const byte = binary[current++] as number;
507
- value |= (byte & 0x7f) << shift;
508
- if ((byte & 0x80) === 0) {
509
- return { value: value >>> 0, nextOffset: current };
310
+ if (currentFunctionName != null && depth <= functionDepth) {
311
+ currentFunctionName = null;
312
+ currentHints = null;
313
+ hintIndex = 0;
510
314
  }
511
- shift += 7;
512
315
  }
513
- }
514
-
515
- function skipTableType(binary: Uint8Array, offset: number): number {
516
- offset = skipReferenceType(binary, offset);
517
- return skipLimits(binary, offset);
518
- }
519
316
 
520
- function skipMemoryType(binary: Uint8Array, offset: number): number {
521
- return skipLimits(binary, offset);
317
+ return changed ? annotated.join("\n") : text;
522
318
  }
523
319
 
524
- function skipGlobalType(binary: Uint8Array, offset: number): number {
525
- offset = skipValueType(binary, offset);
526
- return offset + 1;
320
+ function matchFunctionName(line: string): string | null {
321
+ const match = line.match(/^\(func(?:\s+(\$[^\s()]+))?/);
322
+ return match?.[1] ?? null;
527
323
  }
528
324
 
529
- function skipTagType(binary: Uint8Array, offset: number): number {
530
- offset += 1;
531
- return readU32(binary, offset).nextOffset;
325
+ function isHintableInstruction(line: string): boolean {
326
+ return (
327
+ line.startsWith("(if") ||
328
+ line.startsWith("(br_if ") ||
329
+ line === "if" ||
330
+ line.startsWith("if ") ||
331
+ line === "br_if" ||
332
+ line.startsWith("br_if ")
333
+ );
532
334
  }
533
335
 
534
- function skipLimits(binary: Uint8Array, offset: number): number {
535
- const flags = binary[offset++] as number;
536
- offset = readU32(binary, offset).nextOffset;
537
- if (flags & 0x01) {
538
- offset = readU32(binary, offset).nextOffset;
539
- }
540
- if (flags & 0x04) {
541
- offset = readU32(binary, offset).nextOffset;
542
- }
543
- return offset;
544
- }
545
-
546
- function skipReferenceType(binary: Uint8Array, offset: number): number {
547
- const type = binary[offset] as number;
548
- if (type === 0x63 || type === 0x64) {
549
- return offset + 1;
550
- }
551
- return skipHeapType(binary, offset + 1);
336
+ function encodeHintValue(value: HintValue): string {
337
+ return value === 1 ? "\\01" : "\\00";
552
338
  }
553
339
 
554
- function skipValueType(binary: Uint8Array, offset: number): number {
555
- const type = binary[offset] as number;
556
- if (
557
- type === 0x7f ||
558
- type === 0x7e ||
559
- type === 0x7d ||
560
- type === 0x7c ||
561
- type === 0x7b ||
562
- type === 0x70 ||
563
- type === 0x6f
564
- ) {
565
- return offset + 1;
340
+ function countParensDelta(line: string): number {
341
+ let delta = 0;
342
+ for (const ch of line) {
343
+ if (ch === "(") delta++;
344
+ else if (ch === ")") delta--;
566
345
  }
567
- return skipReferenceType(binary, offset);
568
- }
569
-
570
- function skipHeapType(binary: Uint8Array, offset: number): number {
571
- const type = binary[offset] as number;
572
- if (type <= 0x7f) return offset + 1;
573
- return readU32(binary, offset).nextOffset;
574
- }
575
-
576
- function writeU32(target: number[], value: number): void {
577
- let current = value >>> 0;
578
- do {
579
- let byte = current & 0x7f;
580
- current >>>= 7;
581
- if (current !== 0) byte |= 0x80;
582
- target.push(byte);
583
- } while (current !== 0);
346
+ return delta;
584
347
  }
@@ -1,5 +1,5 @@
1
+ import binaryen from "assemblyscript/lib/binaryen.js";
1
2
  import type { Program, Source } from "assemblyscript/dist/assemblyscript.js";
2
- import type binaryen from "assemblyscript/lib/binaryen.js";
3
3
  import { Transform } from "assemblyscript/dist/transform.js";
4
4
  export default class BranchHintTransform extends Transform {
5
5
  private functionHintsByDeclaration;
@@ -1,7 +1,7 @@
1
- import { decode } from "@webassemblyjs/wasm-parser";
2
- import { CallExpression, IdentifierExpression, ParenthesizedExpression, getFunctionName, } from "assemblyscript/dist/assemblyscript.js";
1
+ import binaryen from "assemblyscript/lib/binaryen.js";
2
+ import { CallExpression, IdentifierExpression, ParenthesizedExpression, } from "assemblyscript/dist/assemblyscript.js";
3
3
  import { Transform } from "assemblyscript/dist/transform.js";
4
- const CUSTOM_SECTION_NAME = "metadata.code.branch_hint";
4
+ const ANNOTATION_NAME = "@metadata.code.branch_hint";
5
5
  export default class BranchHintTransform extends Transform {
6
6
  functionHintsByDeclaration = new Map();
7
7
  functionHintsByInternalName = new Map();
@@ -27,11 +27,35 @@ export default class BranchHintTransform extends Transform {
27
27
  afterCompile(module) {
28
28
  if (this.functionHintsByInternalName.size === 0)
29
29
  return;
30
+ const originalEmitText = module.emitText.bind(module);
31
+ const originalEmitStackIR = module.emitStackIR?.bind(module);
30
32
  const originalEmitBinary = module.emitBinary.bind(module);
33
+ const getAnnotatedText = () => {
34
+ const text = originalEmitText();
35
+ return annotateModuleText(text, this.functionHintsByInternalName);
36
+ };
37
+ module.emitText = (() => {
38
+ return getAnnotatedText();
39
+ });
40
+ if (originalEmitStackIR) {
41
+ module.emitStackIR = () => {
42
+ const text = originalEmitStackIR();
43
+ return annotateModuleText(text, this.functionHintsByInternalName);
44
+ };
45
+ }
31
46
  module.emitBinary = ((...args) => {
32
- const result = originalEmitBinary(...args);
33
- result.binary = injectBranchHints(result.binary, module, this.functionHintsByInternalName);
34
- return result;
47
+ const annotatedText = getAnnotatedText();
48
+ const text = originalEmitText();
49
+ if (annotatedText === text) {
50
+ return originalEmitBinary(...args);
51
+ }
52
+ const annotatedModule = binaryen.parseText(annotatedText);
53
+ try {
54
+ return annotatedModule.emitBinary(...args);
55
+ }
56
+ finally {
57
+ annotatedModule.dispose();
58
+ }
35
59
  });
36
60
  }
37
61
  visitNode(node, currentFunction) {
@@ -169,278 +193,64 @@ function unwrapHint(expression) {
169
193
  }
170
194
  return null;
171
195
  }
172
- function injectBranchHints(binary, module, functionHintsByInternalName) {
173
- const importedFunctionCount = countImportedFunctions(binary);
174
- const functionOrder = [];
175
- for (let i = 0, n = module.getNumFunctions(); i < n; i++) {
176
- const name = getFunctionName(module.getFunctionByIndex(i));
177
- functionOrder.push(name ?? "");
178
- }
179
- const conditionalOffsets = collectConditionalOffsets(binary);
180
- const functionHints = [];
181
- for (let definedIndex = 0; definedIndex < conditionalOffsets.length; definedIndex++) {
182
- const internalName = functionOrder[importedFunctionCount + definedIndex];
183
- const wanted = functionHintsByInternalName.get(internalName);
184
- if (!wanted || wanted.length === 0)
185
- continue;
186
- const available = conditionalOffsets[definedIndex] || [];
187
- const matched = [];
188
- const count = Math.min(wanted.length, available.length);
189
- for (let i = 0; i < count; i++) {
190
- matched.push({
191
- offset: available[i],
192
- value: wanted[i].value,
193
- });
194
- }
195
- if (matched.length === 0)
196
- continue;
197
- functionHints.push({
198
- functionIndex: importedFunctionCount + definedIndex,
199
- hints: matched,
200
- });
201
- }
202
- if (functionHints.length === 0)
203
- return binary;
204
- const payload = encodeBranchHintPayload(functionHints);
205
- const customSection = encodeCustomSection(CUSTOM_SECTION_NAME, payload);
206
- return insertCustomSectionBeforeCode(binary, customSection, CUSTOM_SECTION_NAME);
207
- }
208
- function countImportedFunctions(binary) {
209
- const sections = parseSections(binary);
210
- const importSection = sections.find((section) => section.id === 2);
211
- if (!importSection)
212
- return 0;
213
- let offset = importSection.payloadOffset;
214
- const end = importSection.end;
215
- const countInfo = readU32(binary, offset);
216
- offset = countInfo.nextOffset;
217
- let functionImports = 0;
218
- for (let i = 0; i < countInfo.value && offset < end; i++) {
219
- const moduleName = readName(binary, offset);
220
- offset = moduleName.nextOffset;
221
- const fieldName = readName(binary, offset);
222
- offset = fieldName.nextOffset;
223
- const kind = binary[offset++];
224
- switch (kind) {
225
- case 0:
226
- functionImports++;
227
- offset = readU32(binary, offset).nextOffset;
228
- break;
229
- case 1:
230
- offset = skipTableType(binary, offset);
231
- break;
232
- case 2:
233
- offset = skipMemoryType(binary, offset);
234
- break;
235
- case 3:
236
- offset = skipGlobalType(binary, offset);
237
- break;
238
- case 4:
239
- offset = skipTagType(binary, offset);
240
- break;
241
- default:
242
- throw new Error(`Unsupported import kind ${kind}`);
243
- }
244
- }
245
- return functionImports;
246
- }
247
- function collectConditionalOffsets(binary) {
248
- const ast = decode(binary, {
249
- dump: false,
250
- ignoreCodeSection: false,
251
- ignoreDataSection: true,
252
- });
253
- const functions = [];
254
- walk(ast, (node) => {
255
- if (node?.type === "Func") {
256
- functions.push(node);
257
- }
258
- });
259
- return functions.map((func) => {
260
- const bodySize = readU32(binary, func.loc.start.column);
261
- const localsOffset = bodySize.nextOffset;
262
- const offsets = [];
263
- walk(func.body, (node) => {
264
- if (!node || !node.loc)
265
- return;
266
- if (node.type === "IfInstruction") {
267
- offsets.push(node.loc.start.column - localsOffset - 1);
196
+ function annotateModuleText(text, functionHintsByInternalName) {
197
+ const lines = text.split("\n");
198
+ const annotated = [];
199
+ let currentFunctionName = null;
200
+ let currentHints = null;
201
+ let hintIndex = 0;
202
+ let depth = 0;
203
+ let functionDepth = 0;
204
+ let changed = false;
205
+ for (const line of lines) {
206
+ const trimmed = line.trimStart();
207
+ if (currentFunctionName == null) {
208
+ const funcName = matchFunctionName(trimmed);
209
+ if (funcName) {
210
+ currentFunctionName = funcName;
211
+ currentHints = functionHintsByInternalName.get(funcName.slice(1)) ?? null;
212
+ hintIndex = 0;
213
+ functionDepth = depth;
268
214
  }
269
- else if (node.type === "Instr" && node.id === "br_if") {
270
- offsets.push(node.loc.start.column - localsOffset);
271
- }
272
- });
273
- return offsets.filter((offset) => offset >= 0);
274
- });
275
- }
276
- function walk(node, visit) {
277
- if (!node || typeof node !== "object")
278
- return;
279
- if (Array.isArray(node)) {
280
- for (const item of node)
281
- walk(item, visit);
282
- return;
283
- }
284
- visit(node);
285
- for (const [key, value] of Object.entries(node)) {
286
- if (key === "loc")
287
- continue;
288
- walk(value, visit);
289
- }
290
- }
291
- function encodeBranchHintPayload(functionHints) {
292
- const bytes = [];
293
- writeU32(bytes, functionHints.length);
294
- for (const { functionIndex, hints } of functionHints) {
295
- writeU32(bytes, functionIndex);
296
- writeU32(bytes, hints.length);
297
- for (const hint of hints) {
298
- writeU32(bytes, hint.offset);
299
- writeU32(bytes, 1);
300
- writeU32(bytes, hint.value);
301
215
  }
302
- }
303
- return Uint8Array.from(bytes);
304
- }
305
- function encodeCustomSection(name, payload) {
306
- const nameBytes = new TextEncoder().encode(name);
307
- const contents = [];
308
- writeU32(contents, nameBytes.length);
309
- contents.push(...nameBytes);
310
- contents.push(...payload);
311
- const section = [];
312
- section.push(0);
313
- writeU32(section, contents.length);
314
- section.push(...contents);
315
- return Uint8Array.from(section);
316
- }
317
- function insertCustomSectionBeforeCode(binary, customSection, sectionName) {
318
- const sections = parseSections(binary);
319
- const filtered = sections.filter((section) => {
320
- if (section.id !== 0)
321
- return true;
322
- return readCustomSectionName(binary, section) !== sectionName;
323
- });
324
- const codeSection = filtered.find((section) => section.id === 10);
325
- if (!codeSection) {
326
- throw new Error("WebAssembly module has no code section");
327
- }
328
- const output = [];
329
- output.push(...binary.slice(0, 8));
330
- for (const section of filtered) {
331
- if (section.start === codeSection.start) {
332
- output.push(...customSection);
216
+ if (currentHints && hintIndex < currentHints.length && isHintableInstruction(trimmed)) {
217
+ annotated.push(`${line.slice(0, line.length - trimmed.length)}(${ANNOTATION_NAME} "${encodeHintValue(currentHints[hintIndex].value)}")`);
218
+ hintIndex++;
219
+ changed = true;
333
220
  }
334
- output.push(...binary.slice(section.start, section.end));
335
- }
336
- return Uint8Array.from(output);
337
- }
338
- function parseSections(binary) {
339
- const sections = [];
340
- let offset = 8;
341
- while (offset < binary.length) {
342
- const start = offset;
343
- const id = binary[offset++];
344
- const size = readU32(binary, offset);
345
- offset = size.nextOffset;
346
- const payloadOffset = offset;
347
- const end = payloadOffset + size.value;
348
- sections.push({
349
- id,
350
- start,
351
- payloadOffset,
352
- end,
353
- });
354
- offset = end;
355
- }
356
- return sections;
357
- }
358
- function readCustomSectionName(binary, section) {
359
- const name = readName(binary, section.payloadOffset);
360
- return name.value;
361
- }
362
- function readName(binary, offset) {
363
- const length = readU32(binary, offset);
364
- const start = length.nextOffset;
365
- const end = start + length.value;
366
- return {
367
- value: new TextDecoder().decode(binary.slice(start, end)),
368
- nextOffset: end,
369
- };
370
- }
371
- function readU32(binary, offset) {
372
- let value = 0;
373
- let shift = 0;
374
- let current = offset;
375
- while (true) {
376
- const byte = binary[current++];
377
- value |= (byte & 0x7f) << shift;
378
- if ((byte & 0x80) === 0) {
379
- return { value: value >>> 0, nextOffset: current };
221
+ annotated.push(line);
222
+ depth += countParensDelta(line);
223
+ if (currentFunctionName != null && depth <= functionDepth) {
224
+ currentFunctionName = null;
225
+ currentHints = null;
226
+ hintIndex = 0;
380
227
  }
381
- shift += 7;
382
228
  }
229
+ return changed ? annotated.join("\n") : text;
383
230
  }
384
- function skipTableType(binary, offset) {
385
- offset = skipReferenceType(binary, offset);
386
- return skipLimits(binary, offset);
387
- }
388
- function skipMemoryType(binary, offset) {
389
- return skipLimits(binary, offset);
390
- }
391
- function skipGlobalType(binary, offset) {
392
- offset = skipValueType(binary, offset);
393
- return offset + 1;
394
- }
395
- function skipTagType(binary, offset) {
396
- offset += 1;
397
- return readU32(binary, offset).nextOffset;
231
+ function matchFunctionName(line) {
232
+ const match = line.match(/^\(func(?:\s+(\$[^\s()]+))?/);
233
+ return match?.[1] ?? null;
398
234
  }
399
- function skipLimits(binary, offset) {
400
- const flags = binary[offset++];
401
- offset = readU32(binary, offset).nextOffset;
402
- if (flags & 0x01) {
403
- offset = readU32(binary, offset).nextOffset;
404
- }
405
- if (flags & 0x04) {
406
- offset = readU32(binary, offset).nextOffset;
407
- }
408
- return offset;
235
+ function isHintableInstruction(line) {
236
+ return (line.startsWith("(if") ||
237
+ line.startsWith("(br_if ") ||
238
+ line === "if" ||
239
+ line.startsWith("if ") ||
240
+ line === "br_if" ||
241
+ line.startsWith("br_if "));
409
242
  }
410
- function skipReferenceType(binary, offset) {
411
- const type = binary[offset];
412
- if (type === 0x63 || type === 0x64) {
413
- return offset + 1;
414
- }
415
- return skipHeapType(binary, offset + 1);
243
+ function encodeHintValue(value) {
244
+ return value === 1 ? "\\01" : "\\00";
416
245
  }
417
- function skipValueType(binary, offset) {
418
- const type = binary[offset];
419
- if (type === 0x7f ||
420
- type === 0x7e ||
421
- type === 0x7d ||
422
- type === 0x7c ||
423
- type === 0x7b ||
424
- type === 0x70 ||
425
- type === 0x6f) {
426
- return offset + 1;
246
+ function countParensDelta(line) {
247
+ let delta = 0;
248
+ for (const ch of line) {
249
+ if (ch === "(")
250
+ delta++;
251
+ else if (ch === ")")
252
+ delta--;
427
253
  }
428
- return skipReferenceType(binary, offset);
429
- }
430
- function skipHeapType(binary, offset) {
431
- const type = binary[offset];
432
- if (type <= 0x7f)
433
- return offset + 1;
434
- return readU32(binary, offset).nextOffset;
435
- }
436
- function writeU32(target, value) {
437
- let current = value >>> 0;
438
- do {
439
- let byte = current & 0x7f;
440
- current >>>= 7;
441
- if (current !== 0)
442
- byte |= 0x80;
443
- target.push(byte);
444
- } while (current !== 0);
254
+ return delta;
445
255
  }
446
256
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../branch-hinting/transform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EACL,cAAc,EAEd,oBAAoB,EAIpB,uBAAuB,EAEvB,eAAe,GAChB,MAAM,uCAAuC,CAAC;AAO/C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AA8CxD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,SAAS;IAChD,0BAA0B,GAAG,IAAI,GAAG,EAGzC,CAAC;IACI,2BAA2B,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEtE,UAAU,CAAC,MAA6B;QACtC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,UAAU,+BAAuB;gBAAE,SAAS;YACvD,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAe,CAAC,OAAgB;QAC9B,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACtE,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,YAAY,CAAC,MAAuB;QAClC,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAExD,MAAM,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAkB,CAAC;QAC3E,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAC/B,MAAM,CAAC,MAAM,EACb,MAAM,EACN,IAAI,CAAC,2BAA2B,CACjC,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC,CAA6B,CAAC;IACjC,CAAC;IAEO,SAAS,CACf,IAAsC,EACtC,eAA+D;QAE/D,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,IAAI;gBAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB;gBACE,IAAI,CAAC,iBAAiB,CAAC,IAA2B,EAAE,IAA2B,CAAC,CAAC;gBACjF,OAAO;YACT;gBACE,IAAI,CAAC,iBAAiB,CAAC,IAAyB,EAAE,IAAyB,CAAC,CAAC;gBAC7E,OAAO;YACT;gBACE,IAAI,CAAC,yBAAyB,CAC5B,IAAuC,EACvC,eAAe,EACf,CAAE,IAAY,CAAC,MAAM,EAAG,IAAY,CAAC,OAAO,CAAC,CAC9C,CAAC;gBACF,OAAO;YACT;gBACE,IAAI,CAAC,yBAAyB,CAC5B,IAAuC,EACvC,eAAe,EACf,CAAE,IAAY,CAAC,IAAI,CAAC,CACrB,CAAC;gBACF,OAAO;YACT;gBACE,IAAI,CAAC,yBAAyB,CAC5B,IAAuC,EACvC,eAAe,EACf,CAAE,IAAY,CAAC,IAAI,CAAC,CACrB,CAAC;gBACF,OAAO;YACT;gBACE,IAAI,CAAC,yBAAyB,CAC5B,IAAuC,EACvC,eAAe,EACf,CAAE,IAAY,CAAC,WAAW,EAAG,IAAY,CAAC,WAAW,EAAG,IAAY,CAAC,IAAI,CAAC,CAC3E,CAAC;gBACF,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAC1D,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;gBACzD,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACrD,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACrD,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAC1D,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAC1D,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACrD,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBAC5D,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBAC3D,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAC1D,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACpD,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACrD,OAAO;YACT,mCAA0B;YAC1B,oCAA2B;YAC3B,qCAA4B;YAC5B;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,OAAO,IAAK,IAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBACnF,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;gBACzD,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBACtD,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBACtD,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBACxD,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBACxD,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACpD,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;gBAC9D,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;gBACjE,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBACrD,OAAO;YACT;gBACE,IAAI,CAAC,SAAS,CAAE,IAAY,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBAC1D,OAAO;YACT;gBACE,OAAO;QACX,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,IAA6C,EAC7C,WAAoD;QAEpD,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IAEO,yBAAyB,CAC/B,IAA0B,EAC1B,eAA+D,EAC/D,aAAsD;QAEtD,IAAI,CAAC,eAAe;YAAE,OAAO;QAE7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YAC9D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AAED,SAAS,UAAU,CAAC,UAAsB;IACxC,IAAI,OAAO,GAAe,UAAU,CAAC;IACrC,OAAO,OAAO,YAAY,uBAAuB,EAAE,CAAC;QAClD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,YAAY,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAClC,IAAI,CAAC,CAAC,MAAM,YAAY,oBAAoB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAkB,EAClB,MAAuB,EACvB,2BAAsD;IAEtD,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAwB,EAAE,CAAC;IAE9C,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC;QACpF,MAAM,YAAY,GAAG,aAAa,CAAC,qBAAqB,GAAG,YAAY,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,2BAA2B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE7C,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;gBACpB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;aACvB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEnC,aAAa,CAAC,IAAI,CAAC;YACjB,aAAa,EAAE,qBAAqB,GAAG,YAAY;YACnD,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAE9C,MAAM,OAAO,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,6BAA6B,CAAC,MAAM,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAkB;IAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,CAAC;IAE7B,IAAI,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC;IACzC,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;IAC9B,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC;QAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAW,CAAC;QAExC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,CAAC;gBACJ,eAAe,EAAE,CAAC;gBAClB,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC;gBAC5C,MAAM;YACR,KAAK,CAAC;gBACJ,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,CAAC;gBACJ,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM;YACR,KAAK,CAAC;gBACJ,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM;YACR,KAAK,CAAC;gBACJ,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAkB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,KAAK;QACX,iBAAiB,EAAE,KAAK;QACxB,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAS,EAAE,EAAE;QACtB,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAgB,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC;QACzC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAS,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG;gBAAE,OAAO;YAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAiB,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAiB,GAAG,YAAY,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,IAAI,CAAC,IAAa,EAAE,KAA8B;IACzD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,GAAG,KAAK,KAAK;YAAE,SAAS;QAC5B,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,aAAkC;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC,KAAK,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,aAAa,EAAE,CAAC;QACrD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,OAAmB;IAC5D,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAE1B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,6BAA6B,CACpC,MAAkB,EAClB,aAAyB,EACzB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,WAAW,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CAAC,MAAkB;IACvC,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAW,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QACzB,MAAM,aAAa,GAAG,MAAM,CAAC;QAC7B,MAAM,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE;YACF,KAAK;YACL,aAAa;YACb,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAkB,EAAE,OAAoB;IACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB,EAAE,MAAc;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACjC,OAAO;QACL,KAAK,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzD,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,MAAkB,EAAE,MAAc;IACjD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,MAAM,CAAC;IAErB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAW,CAAC;QACzC,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACrD,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAkB,EAAE,MAAc;IACvD,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB,EAAE,MAAc;IACxD,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB,EAAE,MAAc;IACxD,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,MAAM,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB,EAAE,MAAc;IACrD,MAAM,IAAI,CAAC,CAAC;IACZ,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,MAAkB,EAAE,MAAc;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAW,CAAC;IACzC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC;IAC5C,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC;IAC9C,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkB,EAAE,MAAc;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAW,CAAC;IACtC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACnC,OAAO,MAAM,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,MAAkB,EAAE,MAAc;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAW,CAAC;IACtC,IACE,IAAI,KAAK,IAAI;QACb,IAAI,KAAK,IAAI;QACb,IAAI,KAAK,IAAI;QACb,IAAI,KAAK,IAAI;QACb,IAAI,KAAK,IAAI;QACb,IAAI,KAAK,IAAI;QACb,IAAI,KAAK,IAAI,EACb,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,MAAkB,EAAE,MAAc;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAW,CAAC;IACtC,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,MAAM,GAAG,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC;AAC5C,CAAC;AAED,SAAS,QAAQ,CAAC,MAAgB,EAAE,KAAa;IAC/C,IAAI,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC;IAC1B,GAAG,CAAC;QACF,IAAI,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC;QACf,IAAI,OAAO,KAAK,CAAC;YAAE,IAAI,IAAI,IAAI,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,QAAQ,OAAO,KAAK,CAAC,EAAE;AAC1B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../branch-hinting/transform/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "as-labs",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Experimental AssemblyScript APIs and transforms",
5
5
  "type": "module",
6
6
  "main": "./dist/transform/index.js",
@@ -19,16 +19,21 @@
19
19
  "branch-hinting"
20
20
  ],
21
21
  "files": [
22
- "branch-hinting",
23
22
  "dist",
24
23
  "transform",
25
24
  "index.ts",
25
+ "branch-hinting/index.ts",
26
+ "branch-hinting/package.json",
27
+ "branch-hinting/README.md",
28
+ "branch-hinting/assembly/index.ts",
29
+ "branch-hinting/transform",
26
30
  "README.md",
27
31
  "CHANGELOG.md",
28
32
  "LICENSE"
29
33
  ],
30
34
  "scripts": {
31
35
  "build": "tsc -p tsconfig.json",
36
+ "bench:branch-hinting": "node branch-hinting/bench/run.mjs",
32
37
  "test:unit": "vitest run test/branch-hints.test.js",
33
38
  "test:as": "ast test",
34
39
  "test": "npm run build && npm run test:unit && npm run test:as",