Repository: DesignLiquido/delegua
Pull request #642 (2024-02-13 01:28:03)

Mudando a avaliação do subtipo da variável para o que é inferido na avaliação sintática.
- Melhorando o teste unitário.


Patch:
diff --git a/fontes/interpretador/dialetos/visualg/comum.ts b/fontes/interpretador/dialetos/visualg/comum.ts
index 44a61487..ac99c36e 100644
--- a/fontes/interpretador/dialetos/visualg/comum.ts
+++ b/fontes/interpretador/dialetos/visualg/comum.ts
@@ -52,33 +52,43 @@ export async function atribuirVariavel(
 
         let alvo = promises[0];
         let indice = promises[1];
-        const subtipo = alvo.hasOwnProperty('subtipo') ? alvo.subtipo : undefined;
+        let valorAlvo: any;
+        let valorIndice: any;
 
         if (alvo.hasOwnProperty('valor')) {
-            alvo = alvo.valor;
+            valorAlvo = alvo.valor;
+        } else {
+            valorAlvo = alvo;
         }
 
         if (indice.hasOwnProperty('valor')) {
-            indice = indice.valor;
+            valorIndice = indice.valor;
+        } else {
+            valorIndice = indice;
         }
 
-        let valorResolvido;
+        const subtipo = String(alvo.tipo).replace('[]', '');
+
+        let valorResolvido: any;
         switch (subtipo) {
-            case 'texto':
-                valorResolvido = String(valor);
+            case 'inteiro':
+                valorResolvido = parseInt(valor);
+                break;
+            case 'lógico':
+                valorResolvido = Boolean(valor);
                 break;
             case 'número':
                 valorResolvido = Number(valor);
                 break;
-            case 'lógico':
-                valorResolvido = Boolean(valor);
+            case 'texto':
+                valorResolvido = String(valor);
                 break;
             default:
                 valorResolvido = valor;
                 break;
         }
 
-        alvo[indice] = valorResolvido;
+        valorAlvo[valorIndice] = valorResolvido;
     }
 }
 


Test patch:
diff --git a/testes/visualg/interpretador.test.ts b/testes/visualg/interpretador.test.ts
index 1c82367c..9cfc385b 100644
--- a/testes/visualg/interpretador.test.ts
+++ b/testes/visualg/interpretador.test.ts
@@ -534,7 +534,6 @@ describe('Interpretador', () => {
                     expect(saidasMensagens.includes(saida)).toBeTruthy()
                 }
 
-
                 const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
 
                 expect(retornoInterpretador.erros).toHaveLength(0);
@@ -623,7 +622,7 @@ describe('Interpretador', () => {
             it('Sucesso - Negativos', async () => {
                 // Aqui vamos simular a resposta para três variáveis de `leia()`.
                 const respostas = [
-                    2, -1, 3
+                    "2", "-1", "3"
                 ];
                 interpretador.interfaceEntradaSaida = {
                     question: (mensagem: string, callback: Function) => {
@@ -631,6 +630,11 @@ describe('Interpretador', () => {
                     }
                 };
 
+                const saidas: string[] = [];
+                interpretador.funcaoDeRetorno = (saida: any) => {
+                    saidas.push(String(saida));
+                }
+
                 const retornoLexador = lexador.mapear([
                     'algoritmo "negativos"',
                     'var',
@@ -657,6 +661,8 @@ describe('Interpretador', () => {
                 const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
 
                 expect(retornoInterpretador.erros).toHaveLength(0);
+                expect(saidas.length).toBeGreaterThanOrEqual(6);
+                expect(saidas[5]).toBe('-1');
             });
         });
     });