1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-07-11 01:28:59 +00:00
millfork/docs/lang/types.md

44 lines
1.4 KiB
Markdown
Raw Normal View History

2018-04-02 22:21:26 +00:00
[< back to index](../index.md)
2018-01-18 21:35:25 +00:00
# Types
Millfork puts extra limitations on which types can be used in which contexts.
## Numeric types
* `byte` 1-byte value of undefined signedness, defaulting to unsigned
* `word` 2-byte value of undefined signedness, defaulting to unsigned
2018-06-01 07:51:04 +00:00
* `farword` 3-byte value of undefined signedness, defaulting to unsigned
2018-05-14 00:16:46 +00:00
(the name is an analogy to a future 24-bit type called `farpointer`)
2018-01-18 21:35:25 +00:00
* `long` 4-byte value of undefined signedness, defaulting to unsigned
* `sbyte` signed 1-byte value
* `ubyte` unsigned 1-byte value
* `pointer` the same as `word`, but variables of this type default to be zero-page-allocated
2018-01-31 21:25:06 +00:00
and you can index `pointer` variables (not arbitrary `pointer`-typed expressions though, `f()[0]` won't compile)
2018-01-18 21:35:25 +00:00
Functions cannot return types longer than 2 bytes.
2018-05-14 00:16:46 +00:00
There's also no reason to make a function return `pointer`, since to dereference it,
you need to put it in a variable first anyway.
2018-01-18 21:35:25 +00:00
Numeric types can be converted automatically:
* from a smaller type to a bigger type (`byte`→`word`)
* from a type of undefined signedness to a type of defined signedness (`byte`→`sbyte`)
* from a type of defined signedness to a type of undefined signedness (`sbyte`→`byte`)
## Boolean types
TODO
## Special types
* `void` a unit type containing no information, can be only used as a return type for a function.