Leonardo de Moura
224fdc7a78
refactor(library/init/lean/ir): platform dependent IR
...
Motivation: in 64-bit machines, we can store boxed uint32 values as a
tagged pointer. In 32-bit machines, we need to allocated an object (like
Haskell) to store the uint32 value. So, the generated bytecode is quite
different in each platform.
This change also allow us to simplify the IR. Example: we don't need the
type `sizet` anymore.
Impact: To be able to bootstrap in both platforms,
we will have to store two versions of the generated code: 32 and 64
versions. In principle, we only need to store the 64-bit version,
and use cross-compilation to build the 32-bit version.
2018-05-10 13:15:02 -07:00
Leonardo de Moura
ad61772c72
feat(library/init/lean/ir): add is_null
...
We will use this instruction for compiling inductive datatypes such as
`option A` where `A` is represented as an `object`.
In this case, we can represent `some a` as `a` (without any extra memory
allocation), and `none` as the null pointer.
2018-05-10 12:47:44 -07:00
Leonardo de Moura
e882d9d7cf
feat(library/init/lean/ir): add array_size, sarray_size and string_len
2018-05-10 10:02:16 -07:00
Leonardo de Moura
68458aa97b
refactor(library/init/lean/ir): array operations
2018-05-10 09:52:00 -07:00
Leonardo de Moura
4862da3fca
feat(library/init/lean/ir): add array_pop and sarray_pop
2018-05-10 09:24:48 -07:00
Leonardo de Moura
f1535121b9
refactor(library/init/lean/ir): combine unary instructions
2018-05-10 09:19:13 -07:00
Leonardo de Moura
655cfbf3b0
refactor(library/init/lean/ir): read and sread instructions are now binop
2018-05-10 08:47:16 -07:00
Leonardo de Moura
7b89a8c910
chore(library/init/lean/ir): copy_array ==> array_copy, copy_sarray ==> sarray_copy
2018-05-10 08:36:33 -07:00
Leonardo de Moura
d2c4918ca3
chore(library/init/lean/ir): shared ==> is_shared, scalar ==> is_scalar
2018-05-10 08:30:28 -07:00
Leonardo de Moura
fc840eab3f
feat(library/init/lean/ir): add emit_unop
2018-05-09 18:20:46 -07:00
Leonardo de Moura
7d196f58c3
chore(library/init/lean/ir): remove ashr
2018-05-09 17:43:25 -07:00
Leonardo de Moura
5baae4724f
feat(library/init/lean/ir): distinguish free and dealloc
2018-05-09 17:43:12 -07:00
Leonardo de Moura
e40f37b08e
feat(library/init/lean/ir): add type checker
2018-05-07 18:07:04 -07:00
Leonardo de Moura
f7c4134452
refactor(library/init/lean/ir): we can use the cast instruction for boxing/unboxing
2018-05-07 18:07:04 -07:00
Leonardo de Moura
79f351d177
fix(library/init/lean/ir): parser and test
2018-05-07 18:07:04 -07:00
Leonardo de Moura
0a9bd8caa8
chore(library/init/lean/ir): improve sizet syntax
2018-05-07 18:07:04 -07:00
Leonardo de Moura
e6b509781f
feat(library/init/lean/ir/ir): platform independent object size and offset
2018-05-07 18:07:04 -07:00
Leonardo de Moura
88082cd16d
fix(library/init/lean/ir/parser): case
2018-05-06 10:11:58 -07:00
Leonardo de Moura
bf71068b14
feat(library/init/lean/ir): parse IR definitions
2018-05-02 16:59:50 -07:00
Leonardo de Moura
0d49ae3f69
feat(library/init/lean/parser): add not_followed_by and not_followed_by_sat
...
The new parsers are useful to implement the longest match rule.
2018-05-02 15:55:57 -07:00
Leonardo de Moura
beae2d936b
chore(library/init/lean/ir/parser): remove leftover
2018-05-02 12:44:23 -07:00
Leonardo de Moura
6e2ebb5fab
feat(library/init/lean/ir): add IR instruction parser
2018-05-01 17:45:50 -07:00