uqbar-project / wollok-ts-cli

Wollok Command Line Interface
GNU General Public License v3.0
8 stars 5 forks source link

Multiples referencias desde una lista al mismo objeto #78

Closed ivojawer closed 11 months ago

ivojawer commented 1 year ago

Por ejemplo

object pepita {
  var amiguxs = [ramon, ramon]

}

object ramon { 
    var valor = 10
}

Esto tiene dos problemas

image

PalumboN commented 1 year ago

Habría que checkear si esto se arregló con https://github.com/uqbar-project/wollok-ts-cli/pull/82

ivojawer commented 1 year ago
image

efectivamente mejoro, pero le falta lo de las dos flechas con "valor"

fdodino commented 12 months ago

La verdad es que me costó un montón encontrar dónde estaba, pensé en 3 lugares distintos pero al final el tema estaba acá:

function getCollections(obj: RuntimeObject, interpreter: Interpreter, alreadyVisited: string[]) {
  const { id } = obj
  return (obj.innerCollection || [])
    .flatMap((item, i) => {
      const result = [
        {
          data: {
            id: `${id}_${item.id}`,
            source: id,
            target: item.id,
            label: isList(obj.module.name) ? i.toString() : '',
          },
        },
        ...elementFromObject(item, interpreter, [...alreadyVisited, id]),
      ]

Estábamos agregando el id de la colección, pero faltaba el item, a medida que vamos recorriendo (cada uno de los valores guardados en la colección).

      // el toque
      alreadyVisited.push(item.id)
      return result
    }
    )
fdodino commented 12 months ago

Con eso hice la prueba:

object pepita {
  var property amiguxs = [ramon, ramon]
  method agregarAmiwi(nuevoAmiwi) { amiguxs.add(nuevoAmiwi)}
}

object ramon { 
    var valor = 10
}

Y en el REPL hice

wollok:example> pepita.agregarAmiwi(2)
✓ 
wollok:example> pepita.agregarAmiwi(10)
✓ 
wollok:example> pepita.agregarAmiwi(ramon)

Para obtener

image