1 | import { AST } from '@glimmer/syntax';
|
2 | import { Core, Dict } from '@glimmer/interfaces';
|
3 | export declare abstract class SymbolTable {
|
4 | static top(): ProgramSymbolTable;
|
5 | abstract has(name: string): boolean;
|
6 | abstract get(name: string): number;
|
7 | abstract getLocalsMap(): Dict<number>;
|
8 | abstract getEvalInfo(): Core.EvalInfo;
|
9 | abstract allocateFree(name: string): number;
|
10 | abstract allocateNamed(name: string): number;
|
11 | abstract allocateBlock(name: string): number;
|
12 | abstract allocate(identifier: string): number;
|
13 | child(locals: string[]): BlockSymbolTable;
|
14 | }
|
15 | export declare class ProgramSymbolTable extends SymbolTable {
|
16 | symbols: string[];
|
17 | freeVariables: string[];
|
18 | private size;
|
19 | private named;
|
20 | private blocks;
|
21 | has(_name: string): boolean;
|
22 | get(_name: string): never;
|
23 | getLocalsMap(): Dict<number>;
|
24 | getEvalInfo(): Core.EvalInfo;
|
25 | allocateFree(name: string): number;
|
26 | allocateNamed(name: string): number;
|
27 | allocateBlock(name: string): number;
|
28 | allocate(identifier: string): number;
|
29 | }
|
30 | export declare class BlockSymbolTable extends SymbolTable {
|
31 | private parent;
|
32 | symbols: string[];
|
33 | slots: number[];
|
34 | constructor(parent: SymbolTable, symbols: string[], slots: number[]);
|
35 | has(name: string): boolean;
|
36 | get(name: string): number;
|
37 | getLocalsMap(): Dict<number>;
|
38 | getEvalInfo(): Core.EvalInfo;
|
39 | allocateFree(name: string): number;
|
40 | allocateNamed(name: string): number;
|
41 | allocateBlock(name: string): number;
|
42 | allocate(identifier: string): number;
|
43 | }
|
44 | export declare namespace Action {
|
45 | type StartProgram = ['startProgram', [AST.Template, number, number[]]];
|
46 | type EndProgram = ['endProgram', [AST.Template, number]];
|
47 | type StartBlock = ['startBlock', [AST.Block, number, number[]]];
|
48 | type EndBlock = ['endBlock', [AST.Block, number]];
|
49 | type Block = ['block', [AST.BlockStatement, number, number]];
|
50 | type Mustache = ['mustache', [AST.MustacheStatement | AST.PartialStatement, number, number]];
|
51 | type OpenElement = ['openElement', [AST.ElementNode, number, number, number, number[]]];
|
52 | type CloseElement = ['closeElement', [AST.ElementNode, number, number]];
|
53 | type Text = ['text', [AST.TextNode, number, number]];
|
54 | type Comment = ['comment', [AST.CommentStatement, number, number]];
|
55 | type Action = StartProgram | EndProgram | StartBlock | EndBlock | Block | Mustache | OpenElement | CloseElement | Text | Comment;
|
56 | }
|
57 | export declare type Action = Action.Action;
|
58 | export default class TemplateVisitor {
|
59 | private frameStack;
|
60 | actions: Action[];
|
61 | private programDepth;
|
62 | visit<S extends AST.TopLevelStatement>(node: S): void;
|
63 | Block(program: AST.Block): void;
|
64 | Template(program: AST.Template): void;
|
65 | anyBlock(program: AST.Block | AST.Template): void;
|
66 | ElementNode(element: AST.ElementNode): void;
|
67 | AttrNode(attr: AST.AttrNode): void;
|
68 | TextNode(text: AST.TextNode): void;
|
69 | BlockStatement(node: AST.BlockStatement): void;
|
70 | PartialStatement(node: AST.PartialStatement): void;
|
71 | CommentStatement(text: AST.CommentStatement): void;
|
72 | MustacheCommentStatement(): void;
|
73 | MustacheStatement(mustache: AST.MustacheStatement): void;
|
74 | private get currentFrame();
|
75 | private getCurrentFrame;
|
76 | private pushFrame;
|
77 | private popFrame;
|
78 | }
|
79 |
|
\ | No newline at end of file |