You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							80 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							80 lines
						
					
					
						
							3.3 KiB
						
					
					
				| import type { ScopeValueSets, NameValue, ValueScope, ValueScopeName } from "./scope";
 | |
| import { _Code, Code, Name } from "./code";
 | |
| import { Scope } from "./scope";
 | |
| export { _, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code } from "./code";
 | |
| export { Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds } from "./scope";
 | |
| export declare type SafeExpr = Code | number | boolean | null;
 | |
| export declare type Block = Code | (() => void);
 | |
| export declare const operators: {
 | |
|     GT: _Code;
 | |
|     GTE: _Code;
 | |
|     LT: _Code;
 | |
|     LTE: _Code;
 | |
|     EQ: _Code;
 | |
|     NEQ: _Code;
 | |
|     NOT: _Code;
 | |
|     OR: _Code;
 | |
|     AND: _Code;
 | |
|     ADD: _Code;
 | |
| };
 | |
| export interface CodeGenOptions {
 | |
|     es5?: boolean;
 | |
|     lines?: boolean;
 | |
|     ownProperties?: boolean;
 | |
| }
 | |
| export declare class CodeGen {
 | |
|     readonly _scope: Scope;
 | |
|     readonly _extScope: ValueScope;
 | |
|     readonly _values: ScopeValueSets;
 | |
|     private readonly _nodes;
 | |
|     private readonly _blockStarts;
 | |
|     private readonly _constants;
 | |
|     private readonly opts;
 | |
|     constructor(extScope: ValueScope, opts?: CodeGenOptions);
 | |
|     toString(): string;
 | |
|     name(prefix: string): Name;
 | |
|     scopeName(prefix: string): ValueScopeName;
 | |
|     scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name;
 | |
|     getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined;
 | |
|     scopeRefs(scopeName: Name): Code;
 | |
|     scopeCode(): Code;
 | |
|     private _def;
 | |
|     const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name;
 | |
|     let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name;
 | |
|     var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name;
 | |
|     assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen;
 | |
|     add(lhs: Code, rhs: SafeExpr): CodeGen;
 | |
|     code(c: Block | SafeExpr): CodeGen;
 | |
|     object(...keyValues: [Name | string, SafeExpr | string][]): _Code;
 | |
|     if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen;
 | |
|     elseIf(condition: Code | boolean): CodeGen;
 | |
|     else(): CodeGen;
 | |
|     endIf(): CodeGen;
 | |
|     private _for;
 | |
|     for(iteration: Code, forBody?: Block): CodeGen;
 | |
|     forRange(nameOrPrefix: Name | string, from: SafeExpr, to: SafeExpr, forBody: (index: Name) => void, varKind?: Code): CodeGen;
 | |
|     forOf(nameOrPrefix: Name | string, iterable: Code, forBody: (item: Name) => void, varKind?: Code): CodeGen;
 | |
|     forIn(nameOrPrefix: Name | string, obj: Code, forBody: (item: Name) => void, varKind?: Code): CodeGen;
 | |
|     endFor(): CodeGen;
 | |
|     label(label: Name): CodeGen;
 | |
|     break(label?: Code): CodeGen;
 | |
|     return(value: Block | SafeExpr): CodeGen;
 | |
|     try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen;
 | |
|     throw(error: Code): CodeGen;
 | |
|     block(body?: Block, nodeCount?: number): CodeGen;
 | |
|     endBlock(nodeCount?: number): CodeGen;
 | |
|     func(name: Name, args?: Code, async?: boolean, funcBody?: Block): CodeGen;
 | |
|     endFunc(): CodeGen;
 | |
|     optimize(n?: number): void;
 | |
|     private _leafNode;
 | |
|     private _blockNode;
 | |
|     private _endBlockNode;
 | |
|     private _elseNode;
 | |
|     private get _root();
 | |
|     private get _currNode();
 | |
|     private set _currNode(value);
 | |
| }
 | |
| export declare function not<T extends Code | SafeExpr>(x: T): T;
 | |
| export declare function and(...args: Code[]): Code;
 | |
| export declare function or(...args: Code[]): Code;
 |