diff --git a/fontes/estruturas/chamavel.ts b/fontes/estruturas/chamavel.ts index 6628c22c..58f4d734 100644 --- a/fontes/estruturas/chamavel.ts +++ b/fontes/estruturas/chamavel.ts @@ -1,6 +1,6 @@ import { ArgumentoInterface } from '../interpretador/argumento-interface'; -export class Chamavel { +export abstract class Chamavel { valorAridade: number; aridade(): number { diff --git a/fontes/estruturas/classe-padrao.ts b/fontes/estruturas/classe-padrao.ts index f9f30973..fff93e9a 100644 --- a/fontes/estruturas/classe-padrao.ts +++ b/fontes/estruturas/classe-padrao.ts @@ -1,19 +1,32 @@ import { Chamavel } from './chamavel'; -import { ObjetoPadrao } from './objeto-padrao'; /** * Classe de importação de classes de bibliotecas do JavaScript. */ export class ClassePadrao extends Chamavel { nome: string; - funcaoDeClasse: any; + // TypeScript não tem exatamente um tipo de construtor para classe. + // O tipo abaixo é o mais próximo que existe desse tipo. + funcaoDeClasse: { new(...args: any[]): any; }; - constructor(nome: string, funcaoDeClasse: any) { + constructor(nome: string, funcaoDeClasse: { new(...args: any[]): any; }) { super(); this.nome = nome; this.funcaoDeClasse = funcaoDeClasse; } + /** + * Método utilizado pelo VSCode para inspecionar esta classe em depuração. + * @returns {string} A representação da classe como texto. + */ + toString(): string { + return ``; + } + + /** + * Método utilizado por Delégua para representar esta classe quando impressa. + * @returns {string} A representação da classe como texto. + */ paraTexto(): string { return ``; } @@ -25,7 +38,7 @@ export class ClassePadrao extends Chamavel { * @param simbolo */ chamar(argumentos: any[], simbolo: any): any { - const novoObjeto: any = new this.funcaoDeClasse(); + const novoObjeto: any = new this.funcaoDeClasse(argumentos); return novoObjeto; } } diff --git a/fontes/estruturas/delegua-classe.ts b/fontes/estruturas/delegua-classe.ts index ddc90fe7..67db8813 100644 --- a/fontes/estruturas/delegua-classe.ts +++ b/fontes/estruturas/delegua-classe.ts @@ -61,6 +61,10 @@ export class DeleguaClasse extends Chamavel { return undefined; } + /** + * Método utilizado por Delégua para representar esta classe quando impressa. + * @returns {string} A representação da classe como texto. + */ paraTexto(): string { let texto = `'; let resultado = ` 0) { parametros = `argumentos=<${parametros.slice(0, -2)}>`; } @@ -60,13 +65,23 @@ export class DeleguaFuncao extends Chamavel { if (parametros) { resultado += ` ${parametros}`; } + if (retorno) { resultado += ` ${retorno}`; } + resultado += '>'; return resultado; } + /** + * Método utilizado pelo VSCode para inspecionar esta função em depuração. + * @returns {string} A representação da função como texto. + */ + toString(): string { + return this.paraTexto(); + } + async chamar(visitante: VisitanteComumInterface, argumentos: Array): Promise { const ambiente = new EspacoVariaveis(); const parametros = this.declaracao.parametros || []; diff --git a/fontes/estruturas/funcao-padrao.ts b/fontes/estruturas/funcao-padrao.ts index f2fbb8a9..4c58524f 100644 --- a/fontes/estruturas/funcao-padrao.ts +++ b/fontes/estruturas/funcao-padrao.ts @@ -19,7 +19,19 @@ export class FuncaoPadrao extends Chamavel { return await this.funcao.apply(this, argumentos); } + /** + * Método utilizado por Delégua para inspecionar esta função em depuração. + * @returns {string} A representação da função como texto. + */ paraTexto(): string { return ''; } + + /** + * Método utilizado pelo VSCode para representar esta função quando impressa. + * @returns {string} A representação da classe como texto. + */ + toString(): string { + return ''; + } } diff --git a/fontes/estruturas/metodo-primitiva.ts b/fontes/estruturas/metodo-primitiva.ts index f334fd1a..e3a3776d 100644 --- a/fontes/estruturas/metodo-primitiva.ts +++ b/fontes/estruturas/metodo-primitiva.ts @@ -15,7 +15,7 @@ export class MetodoPrimitiva extends Chamavel { primitiva: any; metodo: Function; - constructor(primitiva: any, metodo: Function, requerInterpretador: boolean = false) { + constructor(primitiva: any, metodo: Function) { super(); this.primitiva = primitiva; this.metodo = metodo; @@ -25,4 +25,20 @@ export class MetodoPrimitiva extends Chamavel { async chamar(interpretador: VisitanteComumInterface, argumentos: any[] = []): Promise { return await this.metodo(interpretador, this.primitiva, ...argumentos); } + + /** + * Método utilizado por Delégua para inspecionar este método em depuração. + * @returns {string} A representação do método como texto. + */ + paraTexto(): string { + return ``; + } + + /** + * Método utilizado pelo VSCode para representar este método quando impressa. + * @returns {string} A representação do método como texto. + */ + toString(): string { + return this.paraTexto(); + } } diff --git a/fontes/estruturas/modulo.ts b/fontes/estruturas/modulo.ts index 2647c9e7..286621a7 100644 --- a/fontes/estruturas/modulo.ts +++ b/fontes/estruturas/modulo.ts @@ -9,7 +9,19 @@ export class DeleguaModulo { this.componentes = {}; } + /** + * Método utilizado por Delégua para inspecionar este módulo em depuração. + * @returns {string} A representação da função como texto. + */ + paraTexto(): string { + return this.nome ? `` : ''; + } + + /** + * Método utilizado pelo VSCode para representar este módulo quando impressa. + * @returns {string} A representação do módulo como texto. + */ toString(): string { - return this.nome ? `` : ''; + return this.paraTexto(); } } diff --git a/fontes/estruturas/objeto-delegua-classe.ts b/fontes/estruturas/objeto-delegua-classe.ts index e50c25a5..b6faabe3 100644 --- a/fontes/estruturas/objeto-delegua-classe.ts +++ b/fontes/estruturas/objeto-delegua-classe.ts @@ -47,7 +47,19 @@ export class ObjetoDeleguaClasse { this.propriedades[simbolo.lexema] = valor; } + /** + * Método utilizado por Delégua para inspecionar este objeto em depuração. + * @returns {string} A representação do objeto como texto. + */ paraTexto(): string { return ''; } + + /** + * Método utilizado pelo VSCode para representar este objeto quando impresso. + * @returns {string} A representação do objeto como texto. + */ + toString(): string { + return this.paraTexto(); + } } diff --git a/fontes/estruturas/objeto-padrao.ts b/fontes/estruturas/objeto-padrao.ts index 00607066..bf8ca564 100644 --- a/fontes/estruturas/objeto-padrao.ts +++ b/fontes/estruturas/objeto-padrao.ts @@ -1,6 +1,6 @@ /** * Um objeto padrão é uma instância de uma Classe Padrão (JavaScript). - * TODO: Marcado para depreciação na próxima versão. + * TODO: Marcado para depreciação em futuras versões. */ export class ObjetoPadrao { classePadrao: string; @@ -9,6 +9,10 @@ export class ObjetoPadrao { this.classePadrao = classePadrao; } + /** + * Método utilizado por Delégua para inspecionar este objeto em depuração. + * @returns {string} A representação do objeto como texto. + */ paraTexto(): string { let retornoTexto = `\n`; for (const [nome, valor] of Object.entries(this)) { @@ -17,4 +21,12 @@ export class ObjetoPadrao { retornoTexto += ``; return retornoTexto; } + + /** + * Método utilizado pelo VSCode para representar este objeto quando impresso. + * @returns {string} A representação do objeto como texto. + */ + toString(): string { + return this.paraTexto(); + } }