DesignLiquido / delegua

Linguagem de programação 100% em português baseada em TypeScript, independente de sistema operacional e dispositivo, e suporte a múltiplos dialetos.
MIT License
227 stars 23 forks source link

Erro ao usar o operador += em arrays #685

Closed Danguya closed 5 months ago

Danguya commented 5 months ago

Erro ao usar o operador += em arrays

Descrição:

Quando tento usar o operador += em um elemento de um array, ocorre um erro. No entanto, o mesmo operador funciona conforme esperado com variáveis simples.

Passos para Reproduzir:

  1. Declare uma variável de array: var pilha = [1, 2, 3, 4];
  2. Tente usar o operador += em um elemento do array: pilha[0] += 8;
  3. Observe o erro gerado.
  4. Declare uma variável simples: var t = 2;
  5. Use o operador += na variável simples: t += 11;
  6. Observe que isso funciona conforme esperado.

Comportamento Esperado:

Esperava-se que o operador += pudesse ser usado diretamente em elementos de arrays da mesma forma que funciona com variáveis simples.

Comportamento Atual:

Ocorre um erro ao tentar usar o operador += em elementos de arrays.

Ambiente

https://designliquido.github.io/delegua-web/

Exemplo de Código:


var pilha = [1, 2, 3, 4];
pilha[0] += 8; // Isso gera um erro

var t = 2;
t += 11;
console.log(t); // Isso funciona e imprime 13
ItaloCobains commented 5 months ago

O problema começa nessa linha.

https://github.com/DesignLiquido/delegua/blob/e0733d9b75a428b5cf4314d47686bceb6530ec93/fontes/avaliador-sintatico/avaliador-sintatico.ts#L442

a expressao.esqueda é um AcessoIndiceVariavel e ele não tem acesso a simbolo.

ItaloCobains commented 5 months ago

@leonelsanchesdasilva é esperado que o simbolo da expressão Atribuir seja do tipo COLCHETE_DIREITO ?


{
  linha: 2,
  hashArquivo: -1,
  assinaturaMetodo: "<principal>",
  expressao: {
    linha: 2,
    hashArquivo: -1,
    simbolo: {
      tipo: "COLCHETE_DIREITO",
      lexema: "",
      literal: null,
      linha: 2,
      hashArquivo: -1,
    },
    valor: {
      linha: 2,
      hashArquivo: -1,
      esquerda: {
        linha: 2,
        hashArquivo: -1,
        entidadeChamada: {
          linha: 2,
          hashArquivo: -1,
          simbolo: {
            tipo: "IDENTIFICADOR",
            lexema: "pilha",
            literal: null,
            linha: 2,
            hashArquivo: -1,
          },
        },
        indice: {
          linha: 2,
          hashArquivo: -1,
          valor: 0,
        },
        simboloFechamento: {
          tipo: "COLCHETE_DIREITO",
          lexema: "",
          literal: null,
          linha: 2,
          hashArquivo: -1,
        },
      },
      operador: {
        tipo: "MAIS_IGUAL",
        lexema: "+",
        literal: null,
        linha: 2,
        hashArquivo: -1,
      },
      direita: {
        linha: 2,
        hashArquivo: -1,
        valor: 8,
      },
    },
  },
}```
leonelsanchesdasilva commented 5 months ago

@ItaloCobains O lado esquerdo da atribuição deveria ser um construto, e não um símbolo. O motivo de ser assim pode ser tanto heranças de Égua quanto alguma preguiça minha.

O impacto é uma boa refatoração, possivelmente impactando todos os dialetos.

ItaloCobains commented 5 months ago

@leonelsanchesdasilva acho que entendi. Darei uma atenção para essa issue