Skip to content

Commit

Permalink
Mudando a avaliação do subtipo da variável para o que é inferido na a…
Browse files Browse the repository at this point in the history
…valiação sintática. (#642)
  • Loading branch information
leonelsanchesdasilva authored Feb 13, 2024
1 parent e90fd34 commit 6b656aa
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
28 changes: 19 additions & 9 deletions fontes/interpretador/dialetos/visualg/comum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

Expand Down
10 changes: 8 additions & 2 deletions testes/visualg/interpretador.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,6 @@ describe('Interpretador', () => {
expect(saidasMensagens.includes(saida)).toBeTruthy()
}


const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);

expect(retornoInterpretador.erros).toHaveLength(0);
Expand Down Expand Up @@ -623,14 +622,19 @@ 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) => {
callback(respostas.shift());
}
};

const saidas: string[] = [];
interpretador.funcaoDeRetorno = (saida: any) => {
saidas.push(String(saida));
}

const retornoLexador = lexador.mapear([
'algoritmo "negativos"',
'var',
Expand All @@ -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');
});
});
});
Expand Down

0 comments on commit 6b656aa

Please sign in to comment.