Repository: DesignLiquido/delegua
Pull request #700 (2025-03-01 03:42:29)

#694 Resolve problema de dicionário retornando nulo quando valor é zero


Patch:
diff --git a/fontes/avaliador-sintatico/avaliador-sintatico.ts b/fontes/avaliador-sintatico/avaliador-sintatico.ts
index 390748fe..c51c35d1 100644
--- a/fontes/avaliador-sintatico/avaliador-sintatico.ts
+++ b/fontes/avaliador-sintatico/avaliador-sintatico.ts
@@ -677,7 +677,7 @@ export class AvaliadorSintatico
         do {
             simboloComentario = this.avancarEDevolverAnterior();
             conteudos.push(simboloComentario.literal);
-        } while (simboloComentario.tipo === tiposDeSimbolos.LINHA_COMENTARIO);
+        } while (simboloComentario.tipo === tiposDeSimbolos.LINHA_COMENTARIO && this.verificarTipoSimboloAtual(tiposDeSimbolos.LINHA_COMENTARIO));
 
         return new Comentario(simboloComentario.hashArquivo, simboloComentario.linha, conteudos, true);
     }
diff --git a/fontes/interpretador/interpretador-base.ts b/fontes/interpretador/interpretador-base.ts
index f2299dd4..d3460ca1 100644
--- a/fontes/interpretador/interpretador-base.ts
+++ b/fontes/interpretador/interpretador-base.ts
@@ -1380,6 +1380,7 @@ export class InterpretadorBase implements InterpretadorInterface {
             objeto instanceof DescritorTipoClasse ||
             objeto instanceof DeleguaModulo
         ) {
+            if (objeto[valorIndice] === 0) return 0;
             return objeto[valorIndice] || null;
         }
 


Test patch:
diff --git a/testes/avaliador-sintatico.test.ts b/testes/avaliador-sintatico.test.ts
index f1433cc4..69208570 100644
--- a/testes/avaliador-sintatico.test.ts
+++ b/testes/avaliador-sintatico.test.ts
@@ -48,6 +48,17 @@ describe('Avaliador sintático', () => {
                 expect(retornoAvaliadorSintatico.erros).toHaveLength(0);
             });
 
+            describe('Comentários', () => {
+                it('Sucesso - Comentários multilinha', async () => {
+                    const retornoLexador = lexador.mapear(["/*", "comentário", "*/"], -1);
+    
+                    const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+    
+                    expect(retornoAvaliadorSintatico.erros).toHaveLength(0);
+                    expect(retornoAvaliadorSintatico.declaracoes).toHaveLength(1);
+                });
+            })
+
             describe('Declarações com construto binário', () => {
                 it('Números literais, soma', () => {
                     const retornoLexador = lexador.mapear(['2 + 3'], -1);
diff --git a/testes/interpretador/interpretador.test.ts b/testes/interpretador/interpretador.test.ts
index 8dc88efa..e6ccb7fc 100644
--- a/testes/interpretador/interpretador.test.ts
+++ b/testes/interpretador/interpretador.test.ts
@@ -119,6 +119,30 @@ describe('Interpretador', () => {
                     expect(retornoInterpretador.erros).toHaveLength(0);
                 });
 
+                it('Dicionário com valor zero', async () => {
+                    const saidasMensagens = [
+                        '0'
+                    ];
+
+                    const retornoLexador = lexador.mapear([
+                        'var macacos = {',
+                        '"Joe": 0,',
+                        '"Milo": 0,',
+                        '"Kiko": 0',
+                        '}',
+                        'escreva(macacos[\'Joe\'])',
+                    ], -1);
+                    const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+
+                    interpretador.funcaoDeRetorno = (saida: any) => {
+                        expect(saidasMensagens.includes(saida)).toBeTruthy();
+                    };
+
+                    const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
+
+                    expect(retornoInterpretador.erros).toHaveLength(0);
+                });
+
                 it('Concatenação com um operador sendo tipo texto e outro operador qualquer', async () => {
                     const retornoLexador = lexador.mapear(["var a = 1 + '1'"], -1);
                     const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);