Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correção em bug reportado na issue #677. #679

Merged
merged 1 commit into from
Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading