DesignLiquido / delegua-node

Versão de Delégua e dialetos com suporte a funcionalidades do ecossistema do Node.js.
MIT License
8 stars 3 forks source link

Declaração do tipo `tente` de egua classico com problema #22

Open samuelrvg opened 1 year ago

samuelrvg commented 1 year ago

Vide commit https://github.com/DesignLiquido/delegua-node/pull/15/commits/9d52666491f89d7ec4f2f52c19db720d131640d8

Gera erro ao tentar resolver:

tente {
  1 > "1";
  escreva("Tente - Pegue: ERRO!");
} pegue {
   escreva("Tente - Pegue: OK!");
} finalmente {
  retorna(" ");
}

Erro: Operadores precisam ser números.

Aristidescosta commented 11 months ago

@samuelrvg O tente do egua clássico é um interpretador do javaScript, certo?

leonelsanchesdasilva commented 10 months ago

@samuelrvg Na verdade esse código não faz muito sentido. O código deveria ser este:

função teste() {
    tente {
        1 > "1";
        escreva("Tente - Pegue: ERRO!");
    } pegue {
        escreva("Tente - Pegue: OK!");
    } finalmente {
        retorna(" ");
    }
}

escreva(teste());

Testes:

PS D:\Delegua\vscode> egua D:\Delegua\vscode\exemplos\egua\excecao.egua
Tente - Pegue: OK!

PS D:\Delegua\vscode> delegua D:\Delegua\vscode\exemplos\egua\excecao.egua
Tente - Pegue: ERRO!
leonelsanchesdasilva commented 10 months ago

@samuelrvg O tente do egua clássico é um interpretador do javaScript, certo?

@Aristidescosta Sim, o projeto deles vive em https://github.com/eguatech/egua.

O nosso interpretador precisa executar o código com resultados idênticos. Hoje o que ocorre é que o interpretador Égua executa o código dentro de pegue, enquanto que o interpretador do dialeto Égua em Delégua executa tudo o que está em tente. A correção para esta issue, portanto, é fazer com que o interpretador do dialeto Égua neste projeto (https://github.com/DesignLiquido/delegua/blob/principal/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts) execute o código do meu comentário anterior de forma idêntica.

Aristidescosta commented 10 months ago

@samuelrvg O tente do egua clássico é um interpretador do javaScript, certo?

@Aristidescosta Sim, o projeto deles vive em https://github.com/eguatech/egua.

O nosso interpretador precisa executar o código com resultados idênticos. Hoje o que ocorre é que o interpretador Égua executa o código dentro de pegue, enquanto que o interpretador do dialeto Égua em Delégua executa tudo o que está em tente. A correção para esta issue, portanto, é fazer com que o interpretador do dialeto Égua neste projeto (https://github.com/DesignLiquido/delegua/blob/principal/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts) execute o código do meu comentário anterior de forma idêntica.

Mas o comportamento certo seria de dar o erro mencionado pelo samuelrvg? Ou deveria ter o comportamento do js de transformar o '1' em número?

leonelsanchesdasilva commented 10 months ago

@samuelrvg O tente do egua clássico é um interpretador do javaScript, certo?

@Aristidescosta Sim, o projeto deles vive em https://github.com/eguatech/egua. O nosso interpretador precisa executar o código com resultados idênticos. Hoje o que ocorre é que o interpretador Égua executa o código dentro de pegue, enquanto que o interpretador do dialeto Égua em Delégua executa tudo o que está em tente. A correção para esta issue, portanto, é fazer com que o interpretador do dialeto Égua neste projeto (https://github.com/DesignLiquido/delegua/blob/principal/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.ts) execute o código do meu comentário anterior de forma idêntica.

Mas o comportamento certo seria de dar o erro mencionado pelo samuelrvg? Ou deveria ter o comportamento do js de transformar o '1' em número?

@Aristidescosta As execuções desses comandos precisam ser idênticas:

PS> egua D:\Delegua\vscode\exemplos\egua\excecao.egua
Tente - Pegue: OK!

PS> delegua D:\Delegua\vscode\exemplos\egua\excecao.egua
Tente - Pegue: ERRO!

Ou seja, essa linha não pode executar:

escreva("Tente - Pegue: ERRO!");

E hoje, no nosso dialeto, ela executa. Isso porque nosso operador de comparação é bem mais tolerante com diferença de tipos que o operador de Égua.

leonelsanchesdasilva commented 10 months ago

Este problema ocorre em delegua-node, não no núcleo. Estou movendo essa issue para o repositório correspondente.