@@ -41,8 +41,8 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
4141 this . importador = importador ;
4242 }
4343
44- override finalizarChamada ( entidadeChamada : Construto , tipoPrimitiva ?: string | undefined ) : Chamada {
45- const chamadaResolvida = super . finalizarChamada ( entidadeChamada , tipoPrimitiva ) ;
44+ override async finalizarChamada ( entidadeChamada : Construto , tipoPrimitiva ?: string | undefined ) : Promise < Chamada > {
45+ const chamadaResolvida = await super . finalizarChamada ( entidadeChamada , tipoPrimitiva ) ;
4646 if ( chamadaResolvida . entidadeChamada instanceof AcessoMetodo && chamadaResolvida . entidadeChamada . objeto . tipo === 'módulo' ) {
4747 // Espera-se que o módulo esteja devidamente registrado.
4848 const entidadeChamadaResolvida = chamadaResolvida . entidadeChamada as AcessoMetodo ;
@@ -138,11 +138,12 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
138138 } ;
139139
140140 protected importarBibliotecaNode ( literalCaminho : Literal ) : ImportarBiblioteca {
141- const bibliotecaResolvida = verificarModulosDelegua ( literalCaminho . valor ) ;
141+ const caminhoTexto = String ( literalCaminho . valor ) ;
142+ const bibliotecaResolvida = verificarModulosDelegua ( caminhoTexto ) ;
142143 if ( bibliotecaResolvida ) {
143144 const moduloResolvido = carregarBibliotecaDelegua ( bibliotecaResolvida as string ) ;
144145
145- this . primitivasConhecidas [ literalCaminho . valor ] = { } ;
146+ this . primitivasConhecidas [ caminhoTexto ] = { } ;
146147 for ( const [ nomeComponente , dadosComponente ] of Object . entries ( moduloResolvido . componentes ) ) {
147148 // TODO: Verificar se sempre é o caso de ser função padrão.
148149 let componente ;
@@ -151,11 +152,11 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
151152 } else if ( dadosComponente instanceof ClasseDeModulo ) {
152153 const classeModulo = dadosComponente as ClasseDeModulo ;
153154
154- componente = this . criarComponenteDeClasse ( literalCaminho . valor , nomeComponente , classeModulo ) ;
155+ componente = this . criarComponenteDeClasse ( caminhoTexto , nomeComponente , classeModulo ) ;
155156 // Registrar também a própria classe (a atribuição ao mapa acontece mais adiante,
156157 // mas garantir que exista agora caso recursão precise dela)
157- this . primitivasConhecidas [ literalCaminho . valor ] = this . primitivasConhecidas [ literalCaminho . valor ] || { } ;
158- this . primitivasConhecidas [ literalCaminho . valor ] [ nomeComponente ] = componente ;
158+ this . primitivasConhecidas [ caminhoTexto ] = this . primitivasConhecidas [ caminhoTexto ] || { } ;
159+ this . primitivasConhecidas [ caminhoTexto ] [ nomeComponente ] = componente ;
159160 this . tiposDefinidosPorBibliotecas [ nomeComponente ] = classeModulo ;
160161
161162 } else {
@@ -166,20 +167,21 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
166167 ) ;
167168 }
168169
169- this . primitivasConhecidas [ literalCaminho . valor ] [ nomeComponente ] = componente ;
170+ this . primitivasConhecidas [ caminhoTexto ] [ nomeComponente ] = componente ;
170171 }
171172 }
172173
173174 return new ImportarBiblioteca (
174175 literalCaminho . hashArquivo ,
175176 literalCaminho . linha ,
176- literalCaminho . valor
177+ caminhoTexto
177178 ) ;
178179 }
179180
180- protected logicaComumImportacaoModulo ( literalCaminho : Literal , simboloReferencia : SimboloInterface ) : ModuloDeclaracoes {
181+ protected async logicaComumImportacaoModulo ( literalCaminho : Literal , simboloReferencia : SimboloInterface ) : Promise < ModuloDeclaracoes > {
182+ const caminhoTexto = String ( literalCaminho . valor ) ;
181183 const resultadoImportacao = this . importador . importar (
182- literalCaminho . valor ,
184+ caminhoTexto ,
183185 literalCaminho . hashArquivo
184186 ) ;
185187
@@ -188,7 +190,7 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
188190 if ( resultadoImportacao . retornoLexador . erros . length > 0 ) {
189191 throw this . erro (
190192 simboloReferencia ,
191- `Erros encontrados ao importar o arquivo ${ literalCaminho . valor
193+ `Erros encontrados ao importar o arquivo ${ caminhoTexto
192194 } : ${ resultadoImportacao . retornoLexador . erros . reduce (
193195 ( acumulado , proximo ) =>
194196 ( acumulado += proximo . mensagem + "; " ) ,
@@ -201,13 +203,13 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
201203 this . importador
202204 ) ;
203205 const resultadoAvaliacaoSintaticaModulo =
204- avaliadorSintaticoModulo . analisar (
206+ await avaliadorSintaticoModulo . analisar (
205207 resultadoImportacao . retornoLexador ,
206208 resultadoImportacao . hashArquivo ,
207209 this . arquivosImportados
208210 ) ;
209211
210- this . arquivosImportados . push ( literalCaminho . valor ) ;
212+ this . arquivosImportados . push ( caminhoTexto ) ;
211213
212214 const definicoesClasse =
213215 resultadoAvaliacaoSintaticaModulo . declaracoes . filter (
@@ -259,24 +261,24 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
259261 * Quando válida, devolve a resolução do módulo como construto.
260262 * Normalmente usada na importação dinâmica, ou seja, `var algumaCoisa = importar('caminho')`.
261263 */
262- protected override construtoImportar ( ) : any {
264+ protected override async construtoImportar ( ) : Promise < any > {
263265 const simboloAbertura = this . consumir (
264266 tiposDeSimbolos . PARENTESE_ESQUERDO ,
265267 "Esperado '(' após declaração."
266268 ) ;
267- const caminho = this . expressao ( ) ;
269+ const caminho = await this . expressao ( ) ;
268270 this . consumir (
269271 tiposDeSimbolos . PARENTESE_DIREITO ,
270272 "Esperado ')' após declaração."
271273 ) ;
272274
273275 // Chegando aqui sem erros, a importação é sintaticamente válida.
274276 const literalCaminho = caminho as Literal ;
275- if ( ! literalCaminho . valor . endsWith ( '.delegua' ) ) {
277+ if ( ! String ( literalCaminho . valor ) . endsWith ( '.delegua' ) ) {
276278 return this . importarBibliotecaNode ( literalCaminho ) ;
277279 }
278280
279- return this . logicaComumImportacaoModulo ( literalCaminho , simboloAbertura ) ;
281+ return await this . logicaComumImportacaoModulo ( literalCaminho , simboloAbertura ) ;
280282 }
281283
282284 protected localizarDeclaracaoPorNomeEmModulo (
@@ -331,16 +333,16 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
331333 * ou então `importar { algo, outro } de 'caminho'`.
332334 * @returns
333335 */
334- override declaracaoImportar ( ) : any {
335- const declaracaoResolvida = super . declaracaoImportar ( ) ;
336+ override async declaracaoImportar ( ) : Promise < any > {
337+ const declaracaoResolvida = await super . declaracaoImportar ( ) ;
336338
337339 const literalCaminho = declaracaoResolvida . caminho as Literal ;
338340 if ( declaracaoResolvida . simboloTudo !== null && declaracaoResolvida . simboloTudo !== undefined ) {
339- if ( ! literalCaminho . valor . endsWith ( '.delegua' ) ) {
341+ if ( ! String ( literalCaminho . valor ) . endsWith ( '.delegua' ) ) {
340342 return this . importarBibliotecaNode ( literalCaminho ) ;
341343 }
342344
343- const moduloDeclaracoes = this . logicaComumImportacaoModulo ( literalCaminho , declaracaoResolvida . simboloTudo ) ;
345+ const moduloDeclaracoes = await this . logicaComumImportacaoModulo ( literalCaminho , declaracaoResolvida . simboloTudo ) ;
344346 this . pilhaEscopos . definirInformacoesVariavel (
345347 declaracaoResolvida . simboloTudo . lexema ,
346348 new InformacaoElementoSintatico ( declaracaoResolvida . simboloTudo . lexema , 'módulo' )
@@ -364,7 +366,7 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
364366
365367 // No caso da desestruturação de valores de módulo, criamos um nome provisório para o módulo
366368 // e uma declaração de constante para cada nome mencionado na desestruturação.
367- const moduloDeclaracoes = this . logicaComumImportacaoModulo ( literalCaminho , declaracaoResolvida . elementosImportacao [ 0 ] ) ;
369+ const moduloDeclaracoes = await this . logicaComumImportacaoModulo ( literalCaminho , declaracaoResolvida . elementosImportacao [ 0 ] ) ;
368370 const constantesImportadas : Const [ ] = [ ] ;
369371 const nomeReservadoModulo = `${ literalCaminho . hashArquivo } _${ literalCaminho . linha } _modulo` ;
370372 const simboloReservadoModulo = { lexema : nomeReservadoModulo , hashArquivo : literalCaminho . hashArquivo , linha : literalCaminho . linha } as SimboloInterface ;
@@ -424,11 +426,11 @@ export class AvaliadorSintaticoComImportacao extends AvaliadorSintatico {
424426 super . inicializarPilhaEscopos ( ) ;
425427 }
426428
427- override analisar (
429+ override async analisar (
428430 retornoLexador : RetornoLexador < SimboloInterface > ,
429431 hashArquivo : number ,
430432 arquivosImportados ?: string [ ]
431- ) : RetornoAvaliadorSintatico < Declaracao > {
433+ ) : Promise < RetornoAvaliadorSintatico < Declaracao > > {
432434 this . arquivosImportados = arquivosImportados || [ ] ;
433435 return super . analisar ( retornoLexador , hashArquivo ) ;
434436 }
0 commit comments