@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
93 lines • 4.25 kB
TypeScript
import { PropriedadeClasse } from '../../declaracoes';
import { InterpretadorInterface, SimboloInterface } from '../../interfaces';
import { Chamavel } from './chamavel';
import { DeleguaFuncao } from './delegua-funcao';
import { MetodoPolimorfico } from './metodo-polimorfico';
import { ObjetoDeleguaClasse } from './objeto-delegua-classe';
/**
* Descritor de tipo de classe. Quando uma declaração de classe é visitada, o que
* vai para a pilha de escopos de execução é esta estrutura. Quando uma nova instância
* de classe é criada, a referência para a instância é implementada aqui.
*/
export declare class DescritorTipoClasse extends Chamavel {
simboloOriginal: SimboloInterface | undefined;
superClasses: DescritorTipoClasse[];
/** OReM (Ordem de Resolução de Métodos, ou _Method Resolution Order_) calculado via C3.
* Inclui a própria classe como primeiro elemento. */
orem: DescritorTipoClasse[];
metodos: {
[nome: string]: DeleguaFuncao | DeleguaFuncao[];
};
metodosEstaticos: {
[nome: string]: DeleguaFuncao | DeleguaFuncao[];
};
membrosEstaticos: {
[nome: string]: any;
};
obtenedores: {
[nome: string]: DeleguaFuncao;
};
definidores: {
[nome: string]: DeleguaFuncao;
};
obtenedoresEstaticos: {
[nome: string]: DeleguaFuncao;
};
definidoresEstaticos: {
[nome: string]: DeleguaFuncao;
};
propriedades: PropriedadeClasse[];
dialetoRequerExpansaoPropriedadesEspacoMemoria: boolean;
dialetoRequerDeclaracaoPropriedades: boolean;
abstrata: boolean;
estrangeira: boolean;
classeEstatica: boolean;
metodosAbstratos: string[];
acessoMetodos: {
[nome: string]: 'privado' | 'protegido' | 'publico';
};
acessoPropriedades: {
[nome: string]: 'privado' | 'protegido' | 'publico';
};
sombrearPropriedadesDeClasse: boolean;
/** Obtenedor de compat: primeiro pai direto (usado por tradutores e partes do interpretador). */
get superClasse(): DescritorTipoClasse | null;
/** Definidor de compat: atribui um único pai direto (usado pela atribuição implícita de OBJETO_BASE). */
set superClasse(v: DescritorTipoClasse | null);
constructor(simboloOriginal?: SimboloInterface, superClasses?: DescritorTipoClasse | DescritorTipoClasse[], metodos?: {
[nome: string]: DeleguaFuncao | DeleguaFuncao[];
}, propriedades?: PropriedadeClasse[]);
private static mesclaC3;
/** Calcula e armazena o OReM (linearização C3) para esta classe e retorna a lista resultante. */
static computarOReM(cls: DescritorTipoClasse): DescritorTipoClasse[];
/**
* Verifica se todos os métodos abstratos da superclasse estão implementados
* na subclasse fornecida. Lança erro em tempo de execução se algum faltar.
*/
verificarImplementacaoAbstrata(subclasse: DescritorTipoClasse): void;
encontrarObtenedor(nome: string, estatico?: boolean): DeleguaFuncao | undefined;
encontrarDefinidor(nome: string, estatico?: boolean): DeleguaFuncao | undefined;
obterEstatico(nome: string, visitante?: InterpretadorInterface): Promise<any>;
definirEstatico(nome: string, valor: any, visitante?: InterpretadorInterface): Promise<void>;
/**
* Mescla sobrecargas da classe atual com as de ancestrais (respeitando MRO).
* Sobrecargas da subclasse com mesma assinatura substituem as do ancestral.
*/
private mesclarComSuperclasse;
private obterSobrecargasDaSuperclasse;
encontrarMetodo(nome: string): DeleguaFuncao | MetodoPolimorfico | undefined;
encontrarPropriedade(nome: string): PropriedadeClasse | undefined;
/**
* Método utilizado por Delégua para representar esta classe quando impressa.
* @returns {string} A representação da classe como texto.
*/
paraTexto(): string;
/**
* Método utilizado pelo VSCode para inspecionar esta classe em depuração.
* @returns {string} A representação da classe como texto.
*/
toString(): string;
aridade(): number;
chamar(visitante: InterpretadorInterface, argumentos: any[]): Promise<ObjetoDeleguaClasse>;
}
//# sourceMappingURL=descritor-tipo-classe.d.ts.map