@awayfl/avm2
Version:
Virtual machine for executing AS3 code
109 lines • 4 kB
TypeScript
import { Multiname } from './../abc/lazy/Multiname';
import { IGenerator } from './IGenerator';
export interface IImportDefinition {
name: Multiname;
alias: string;
options: IImportGenOptions | undefined;
}
export interface IImportGenOptions {
findProp?: boolean;
scope?: string;
mnIndex: number;
}
export interface ILexGenerator extends IGenerator {
/**
* Test Multiname to support import generation
*/
test(mn: Multiname, isLexCall: boolean): boolean;
findAliases(mn: Multiname, findProp: boolean): IImportDefinition[];
/**
* Generate import alias if can be generated
* @throws lex import can't be generated
*/
getLexAlias(mn: Multiname, options?: IImportGenOptions): string;
/**
* Generate import alias if can be generated
* @throws lex import can't be generated
*/
getPropStrictAlias(mn: Multiname, options?: IImportGenOptions): string;
}
export declare abstract class LexImportsGenerator implements ILexGenerator {
imports: Array<IImportDefinition>;
private _lexMode;
test(_mn: Multiname, _isLexCall: boolean): boolean;
protected _genEntry(def: IImportDefinition, ...args: any[]): string;
protected _genAlias(mn: Multiname, _options?: IImportGenOptions): string;
findAliases(mn: Multiname, findProp: boolean): IImportDefinition[];
getLexAlias(mn: Multiname, options?: IImportGenOptions): string;
getPropStrictAlias(mn: Multiname, options?: IImportGenOptions): string;
genHeader(ident?: string, ...args: any[]): string;
genBody(_ident?: string, ..._args: any[]): string;
genPost(input: string[]): string[];
reset(): void;
}
/**
* Generate imports for all lex generators
*/
export declare class ComplexGenerator implements ILexGenerator {
generators: ILexGenerator[];
/**
* Allowed collsion for alias of generator, return first alias;
*/
allowColissions: Boolean;
constructor(generators: ILexGenerator[]);
/**
* Return generator that will used for lex generation
*/
getGenerator(mn: Multiname, isLexCall: boolean): ILexGenerator | null;
test(mn: Multiname, isLexCall: boolean): boolean;
findAliases(mn: Multiname, findProp: boolean): IImportDefinition[];
/**
* Return generator that will used for propstrict generation
*/
getLexAlias(mn: Multiname, options?: IImportGenOptions): string;
getPropStrictAlias(mn: Multiname, options?: IImportGenOptions): string;
genHeader(ident: string): string;
genBody(ident: string): string;
genPost(arr: string[]): string[];
reset(): void;
}
/**
* Import generator for Box2D and Nape external libs
*/
export declare class PhysicsLex extends LexImportsGenerator {
allows: {
box2D?: boolean;
nape?: boolean;
};
constructor(allows?: {
box2D?: boolean;
nape?: boolean;
});
protected _genEntry(def: IImportDefinition): string;
protected _genAlias(mn: Multiname, _options?: IImportGenOptions): string;
test(mn: Multiname): boolean;
}
/**
* @description Generete single constant reference on top level API props: trace, pareseInt etc
*/
export declare class TopLevelLex extends LexImportsGenerator {
test(mn: Multiname): boolean;
protected _genEntry(def: IImportDefinition): string;
protected _genAlias(mn: Multiname, options: IImportGenOptions): string;
}
/**
* @description Generate single reference on class namespace/class with static field
*/
export declare class StaticHoistLex extends LexImportsGenerator {
private _mn;
private _loc;
markScope(name: string, pos?: number): void;
test(mn: Multiname, isLexCall: boolean): boolean;
protected _genAlias(mn: Multiname, options: IImportGenOptions): string;
findAliases(): any[];
genHeader(): string;
genBody(idnt: string): string;
genPost(arr: string[]): string[];
_genEntry(def: IImportDefinition, idnt?: string): string;
}
//# sourceMappingURL=LexImportsGenerator.d.ts.map