Skip to content

Error al intentar asignar un número negativo a un ent8 #6

Description

@eduardogarre

Error al intentar asignar un número negativo a un ent8. El siguiente código genera un error de compilación:

público ent inicia()
{
    ent8 b = -2;

    devuelve 0;
}
PS> ñ ./prueba.ñ -s prueba
Error: [./prueba.ñ:3:12]: No puedes guardar un valor de tipo 'ent16' en un destino de tipo 'ent8'.
Línea 3:     ent8 b = -2;

En la implementación actual el sistema de tipos del compilador no tolera esta asignación, aunque en este caso el valor literal -2 sí cupiera en un ent8.
En este momento, internamente el sistema de tipos interpreta el -2 como de tipo ent16. El proceso es el siguiente:

  1. Al literal 2 se le asigna el tipo natural más pequeño (en este caso nat8).
  2. Al literal 2 de tipo nat8 se le aplica la operación unaria -, para convertirlo en negativo. El sistema de tipos no permite que un número natural de 8 bits se asigne a un entero de 8 bits, pues uno de los bits del entero se dedica al signo (0: positivo, 1: negativo), quedando solamente 7 bits disponibles en el entero, donde no caben los 8 bits del nat8. Por ello, al literal -2 se le termina asignando el siguiente tipo entero más pequeño: ent16.
  3. Finalmente, el ent16 no cabe en un ent8.

Es preciso ampliar la implementación de los tipos numerales para tener en cuenta estas particularidades.

Metadata

Metadata

Assignees

No one assigned

    Labels

    errataAlgo no funcionamejoraPetición de una nueva característica

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions