Skip to content

Commit

Permalink
Correção em bug reportado na issue #677.
Browse files Browse the repository at this point in the history
  • Loading branch information
leonelsanchesdasilva committed Apr 29, 2024
1 parent 71492b1 commit cde38cc
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 11 deletions.
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2022-2023 Design Líquido
Copyright (c) 2022-2024 Design Líquido

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion LICENSE.pt.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2022-2023 Design Líquido
Copyright (c) 2022-2024 Design Líquido

Permissão concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia
deste software e arquivos de documentação associados (o "Software"), para lidar
Expand Down
24 changes: 16 additions & 8 deletions fontes/interpretador/interpretador-com-depuracao.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import _ from "lodash";

import { EspacoVariaveis } from '../espaco-variaveis';
import { Bloco, Declaracao, Enquanto, Escreva, Leia, LeiaMultiplo, Para, Retorna, Var } from '../declaracoes';
import { PontoParada } from '../depuracao';
Expand Down Expand Up @@ -202,24 +204,30 @@ export class InterpretadorComDepuracao extends InterpretadorBase implements Inte
}

async visitarDeclaracaoPara(declaracao: Para): Promise<any> {
const corpoExecucao = declaracao.corpo as Bloco;
const declaracaoInicializador = Array.isArray(declaracao.inicializador)
// Aqui precisamos clonar a declaração porque modificamos
// algumas propriedades que indicam o estado da execução dela.
// Por exemplo, se chamamos uma função que tem dentro dela um bloco Para,
// cada execução do bloco precisa de uma inicialização diferente.
const cloneDeclaracao = _.cloneDeep(declaracao) as Para;
const corpoExecucao = cloneDeclaracao.corpo as Bloco;

const declaracaoInicializador = Array.isArray(cloneDeclaracao.inicializador)
? declaracao.inicializador[0]
: declaracao.inicializador;

if (declaracaoInicializador !== null && !declaracao.inicializada) {
if (declaracaoInicializador !== null) {
await this.avaliar(declaracaoInicializador);
// O incremento vai ao final do bloco de escopo.
if (declaracao.incrementar !== null) {
corpoExecucao.declaracoes.push(declaracao.incrementar);
if (cloneDeclaracao.incrementar !== null) {
corpoExecucao.declaracoes.push(cloneDeclaracao.incrementar);
}
}

declaracao.inicializada = true;
cloneDeclaracao.inicializada = true;
const escopoAtual = this.pilhaEscoposExecucao.topoDaPilha();
switch (this.comando) {
case 'proximo':
if (declaracao.condicao !== null && this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
if (cloneDeclaracao.condicao !== null && this.eVerdadeiro(await this.avaliar(cloneDeclaracao.condicao))) {
escopoAtual.emLacoRepeticao = true;

const resultadoBloco = this.executarBloco(corpoExecucao.declaracoes);
Expand All @@ -231,7 +239,7 @@ export class InterpretadorComDepuracao extends InterpretadorBase implements Inte
default:
let retornoExecucao: any;
while (!(retornoExecucao instanceof Quebra) && !this.pontoDeParadaAtivo) {
if (declaracao.condicao !== null && !this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
if (cloneDeclaracao.condicao !== null && !this.eVerdadeiro(await this.avaliar(cloneDeclaracao.condicao))) {
break;
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@designliquido/delegua",
"version": "0.33.16",
"description": "Linguagem de programação simples e moderna usando português estruturado, com suporte a múltiplos dialetos",
"description": "Linguagem de programação simples e moderna usando português estruturado.",
"main": "index.js",
"types": "index.d.ts",
"scripts": {
Expand Down

0 comments on commit cde38cc

Please sign in to comment.