UNPKG

2.92 kBTypeScriptView Raw
1import type { Core, Dict } from '@glimmer/interfaces';
2import * as ASTv2 from './v2/api';
3export interface Upvar {
4 readonly name: string;
5 readonly resolution: ASTv2.FreeVarResolution;
6}
7interface SymbolTableOptions {
8 customizeComponentName: (input: string) => string;
9 lexicalScope: (variable: string) => boolean;
10}
11export declare abstract class SymbolTable {
12 static top(locals: readonly string[], keywords: readonly string[], options: SymbolTableOptions): ProgramSymbolTable;
13 abstract root(): ProgramSymbolTable;
14 abstract has(name: string): boolean;
15 abstract get(name: string): [symbol: number, isRoot: boolean];
16 abstract hasKeyword(name: string): boolean;
17 abstract getKeyword(name: string): number;
18 abstract hasLexical(name: string): boolean;
19 abstract getLocalsMap(): Dict<number>;
20 abstract getDebugInfo(): Core.DebugSymbols;
21 abstract allocateFree(name: string, resolution: ASTv2.FreeVarResolution): number;
22 abstract allocateNamed(name: string): number;
23 abstract allocateBlock(name: string): number;
24 abstract allocate(identifier: string): number;
25 child(locals: string[]): BlockSymbolTable;
26}
27export declare class ProgramSymbolTable extends SymbolTable {
28 private templateLocals;
29 private keywords;
30 private options;
31 constructor(templateLocals: readonly string[], keywords: readonly string[], options: SymbolTableOptions);
32 readonly symbols: string[];
33 readonly upvars: string[];
34 private size;
35 readonly named: Dict<number>;
36 readonly blocks: Dict<number>;
37 readonly usedTemplateLocals: string[];
38 root(): this;
39 hasLexical(name: string): boolean;
40 hasKeyword(name: string): boolean;
41 getKeyword(name: string): number;
42 getUsedTemplateLocals(): string[];
43 has(name: string): boolean;
44 get(name: string): [number, boolean];
45 getLocalsMap(): Dict<number>;
46 getDebugInfo(): Core.DebugSymbols;
47 allocateFree(name: string, resolution: ASTv2.FreeVarResolution): number;
48 allocateNamed(name: string): number;
49 allocateBlock(name: string): number;
50 allocate(identifier: string): number;
51}
52export declare class BlockSymbolTable extends SymbolTable {
53 #private;
54 private parent;
55 symbols: string[];
56 slots: number[];
57 constructor(parent: SymbolTable, symbols: string[], slots: number[]);
58 root(): ProgramSymbolTable;
59 get locals(): string[];
60 hasLexical(name: string): boolean;
61 getKeyword(name: string): number;
62 hasKeyword(name: string): boolean;
63 has(name: string): boolean;
64 get(name: string): [number, boolean];
65 getLocalsMap(): Dict<number>;
66 getDebugInfo(): [locals: Record<string, number>, upvars: Record<string, number>];
67 allocateFree(name: string, resolution: ASTv2.FreeVarResolution): number;
68 allocateNamed(name: string): number;
69 allocateBlock(name: string): number;
70 allocate(identifier: string): number;
71}
72export {};