1
0
forked from M-Labs/nac3
Commit Graph

751 Commits

Author SHA1 Message Date
pca006132
24a26b53ae nac3core/toplevel: fixed broken tests
We should not include class type variables in functions type variables.
2022-03-24 21:33:09 +08:00
pca006132
1084ba2158 nac3core: fixed typevar with finite range
1. Function type variables should not include class type variables,
   because they are not bound to the function.
2. Defer type variable constraint evaluation until we get all fields
   definition.
2022-03-24 21:31:51 +08:00
ychenfo
be75fa7368 nac3core: fix assign to constant 2022-03-24 07:13:13 +08:00
pca006132
d9be8d3978 nac3core/typecheck/unification_table: fixed snapshot restore bug
Closes 229
2022-03-23 00:25:10 +08:00
pca006132
41d62f7325 nac3core/toplevel: fixed typevar substitution bug 2022-03-23 00:25:10 +08:00
Sebastien Bourdeauducq
9332d1643c irrt: normalize end-of-line characters. Closes #231 2022-03-22 16:04:48 +08:00
Sebastien Bourdeauducq
718b076e50 irrt: use __builtin_alloca 2022-03-22 15:41:25 +08:00
Sebastien Bourdeauducq
9d86b46e86 nac3core: add DEBUG_DUMP_IRRT 2022-03-22 15:39:15 +08:00
pca006132
b97c016629 nac3core: fixed test breakage 2022-03-18 16:52:28 +08:00
pca006132
35ac5cb6f6 nac3core: fixed typevar bug 2022-03-18 01:07:44 +08:00
Sebastien Bourdeauducq
0ca2797428 fix compilation warning 2022-03-17 21:31:45 +08:00
Sebastien Bourdeauducq
c5993c2a58 composer: improve class field typevar error message 2022-03-17 21:04:42 +08:00
pca006132
642e3b2bad nac3core: moved all builtin errors to nac3artiq code
This remove the need for hard-coding those definition IDs.
2022-03-17 00:04:49 +08:00
pca006132
e126fef012 nac3artiq: support more builtin errors 2022-03-16 23:42:08 +08:00
pca006132
2f85bb3837 nac3core: impl call attributes
sret for returning large structs, and byval for struct args in extern
function calls.
2022-03-09 22:09:36 +08:00
ychenfo
5006028e2d nac3core: abs builtin function 2022-03-08 23:23:36 +08:00
ychenfo
8241a29908 nac3core: max builtin function 2022-03-08 22:22:00 +08:00
ychenfo
adb5c69e67 nac3core: min builtin function 2022-03-08 21:59:37 +08:00
ychenfo
f7e62ab5b7 nac3ast/parser/core: use i128 for u64 constants 2022-03-08 18:21:14 +08:00
ychenfo
9f6c7b3359 nac3core: type conversion to/from uint 2022-03-08 13:42:45 +08:00
ychenfo
142e99a0f1 nac3core: fix broken tests 2022-03-08 13:34:08 +08:00
ychenfo
79c469301a basic unsigned integer support 2022-03-08 13:34:02 +08:00
ychenfo
8602852241 nac3core: use signed extension to convert i32 to i64 2022-03-06 04:49:02 +08:00
ychenfo
42fbe8e383 nac3core: fix err msg of too many args 2022-03-05 03:59:45 +08:00
pca006132
63b0f29728 Fix broken tests 2022-03-05 00:27:51 +08:00
pca006132
294943e303 nac3core: get exception ID from symbol resolver
We need to store the exception class somewhere in order to create them
back in the host. Fixes #200
2022-03-05 00:26:35 +08:00
Sebastien Bourdeauducq
59ac5aae8a fix error message string (2) 2022-03-02 08:33:13 +08:00
Sebastien Bourdeauducq
da039e3acf fix error message string 2022-03-02 08:04:15 +08:00
pca006132
323d77a455 nac3artiq: improve error message for out of range error 2022-02-28 23:09:14 +08:00
Sebastien Bourdeauducq
5d8e87d923 more readable type annotation error string 2022-02-28 16:24:03 +08:00
pca006132
846d1726ef nac3core: fixed keyword arguments handling 2022-02-26 16:34:30 +08:00
pca006132
0686e83f4c nac3core/typecheck: fixed incorrect rollback 2022-02-25 20:01:11 +08:00
pca006132
e710b6c320 nac3core: fix exception final branch handling
According to https://github.com/m-labs/artiq/pull/1855
Passed the test cases from 1855.
Fixes #196.
2022-02-25 17:42:47 +08:00
pca006132
cc769a7006 nac3core: reset unification table state before printing errors
Fixes nondeterministic error messages due to nondeterministic
unification order. As all unification operations will be restored, the
error messages should not be affected by the unification order before
the failure operation.
2022-02-25 14:47:19 +08:00
Sebastien Bourdeauducq
5cd4fe6507 update tests 2022-02-23 11:50:03 +08:00
Sebastien Bourdeauducq
75fde1bbf7 update tests 2022-02-23 11:39:47 +08:00
Sebastien Bourdeauducq
17792b76b7 rename exception symbols 2022-02-23 11:04:35 +08:00
pca006132
d3cb5d6e52 Fixed type error messages 2022-02-22 17:22:15 +08:00
pca006132
3ad25c8f07 nac3core: sort error messages for determinism 2022-02-22 14:33:43 +08:00
pca006132
ede3706ca8 type_inferencer: special case tuple index error message 2022-02-21 18:41:42 +08:00
pca006132
f97f93d92c applied rustfmt and clippy auto fix 2022-02-21 18:27:46 +08:00
pca006132
d9cb506f6a nac3core: refactored for better error messages 2022-02-21 18:24:19 +08:00
pca006132
352831b2ca nac3core: removed legacy location definition 2022-02-13 22:39:24 +08:00
pca006132
21d9182ba2 nac3core: disallow methods/fields in Exception subclass
Fixes #192
2022-02-13 21:45:22 +08:00
pca006132
14d25b3b9d Fixed broken tests 2022-02-13 17:21:42 +08:00
pca006132
b18626b149 Fix compilation and test failures 2022-02-12 22:50:32 +08:00
pca006132
750d912eb4 nac3core: do list bound check and negative index handling
Raise error when index out of range. Note that we use llvm.expect to
tell the optimizer that we expect not to raise an exception, so the
normal path performance would be better. If this assumption is violated,
the exception overhead might be slightly larger, but the percentage
increase in overhead should not be high since exception unwinding is
already pretty slow.
2022-02-12 22:50:32 +08:00
pca006132
bf52e294ee nac3artiq: RPC support 2022-02-12 22:50:32 +08:00
pca006132
e303248261 nac3core: exception type check and codegen 2022-02-12 22:50:32 +08:00
pca006132
7ea5a5f84d nac3core: codegen refactoring
- No longer check if the statement will return. Instead, we check if
  the current basic block is terminated, which is simpler and handles
  exception/break/continue better.
- Use invoke statement when unwind is needed.
- Moved codegen for a block of statements into a separate function.
2022-02-12 22:13:59 +08:00
pca006132
b267a656a8 nac3core: added exception type and fixed primitive representation
- Added `Exception` primitive type and some builtin exception types.
  Note that all exception types share the same layout, and should
  inherit from the base `Exception` type. There are some hacks in the
  toplevel module for handling exception types, we should revisit and
  fix them later.
- Added new primitive types to concrete type module, otherwise there
  would be some weird type errors.
- Changed the representation of strings to CSlice<u8>, instead of
  CString.
2022-02-12 22:13:59 +08:00
pca006132
050c862c1a nac3core: function codegen callback changes
Added code generator argument to the callback, so it would be easier to
write complicated codegen with that callback. To prepare for RPC
codegen.
2022-02-12 21:24:41 +08:00
ychenfo
d6ab73afb0 nac3core: style 2022-02-07 02:18:56 +08:00
ychenfo
6f9f455152 nac3core: list slice irrt use one function to handle var size 2022-02-07 02:09:50 +08:00
ychenfo
e50f1017fa nac3core: irrt list of tuple use struct value representation 2022-02-07 02:09:50 +08:00
ychenfo
77608346b1 nac3core: handle tuple by value 2022-02-07 02:09:50 +08:00
Sebastien Bourdeauducq
1288624218 lock insta version (#179) 2022-01-31 15:18:49 +08:00
Sebastien Bourdeauducq
de065cfa14 update dependencies 2022-01-31 12:28:40 +08:00
ychenfo
ace0e2a2c6 nac3core: fix use of size_t in list comprehension, cleanup 2022-01-25 03:35:59 +08:00
Sebastien Bourdeauducq
fd4bf12808 fix grammar of some type error messages 2022-01-14 16:56:23 +08:00
ychenfo
ae8f82ccb0 nac3core: fix broken tests 2022-01-14 16:28:37 +08:00
ychenfo
4a1a4dc076 nac3core/artiq/standalone: symbol resolver return error msg for type error of host variables 2022-01-14 16:28:34 +08:00
ychenfo
eba9fc8a69 nac3core: add missing location for type inference 2022-01-14 03:05:11 +08:00
ychenfo
4976e89ae2 nac3core: list slice support 2022-01-13 16:53:32 +08:00
Sebastien Bourdeauducq
82509d60ec remove obvious comment 2022-01-13 12:31:28 +08:00
ychenfo
2579ecbd19 nac3core: irrt module get attribute id using name instead of hard code 2022-01-11 17:25:07 +08:00
ychenfo
44f4c4f028 nac3core: build script use Path::join 2022-01-09 12:06:45 +08:00
Sebastien Bourdeauducq
8ef9e74aaf move rustfmt.toml upper 2022-01-09 11:31:06 +08:00
Sebastien Bourdeauducq
b88f17ed42 switch to clang-unwrapped, build IRRT with wasm32 2022-01-09 10:56:28 +08:00
ychenfo
1ee857de6a nac3core: format, fix clippy warning 2022-01-09 01:12:18 +08:00
Sebastien Bourdeauducq
4a65d82db5 introduce IRRT, implement power
based on code by Yijia
M-Labs/nac3#160
2022-01-09 00:57:50 +08:00
ychenfo
7193e3f328 nac3core: codegen fix empty list llvm type 2021-12-30 05:09:21 +08:00
ychenfo
85e06d431a nac3core: improve some type annotation error messages (#87) 2021-12-28 10:49:14 +08:00
ychenfo
9b3b47ce50 fix broken tests 2021-12-28 01:38:16 +08:00
ychenfo
88f0da7bdd add file name to AST node location 2021-12-28 01:28:55 +08:00
pca006132
1bd966965e fixed M-Labs/nac3#146 2021-12-27 22:56:50 +08:00
pca006132
fa04768a77 redo "nac3core: fix #84"
This reverts commit 86005da8e1.
2021-12-27 22:56:26 +08:00
Sebastien Bourdeauducq
86005da8e1 Revert "nac3core: fix #84"
This reverts commit 0902d8adf4.
2021-12-26 08:35:27 +08:00
Sebastien Bourdeauducq
5aa6749241 remove num-traits 2021-12-26 00:32:08 +08:00
Sebastien Bourdeauducq
80d3ab1b0f remove bigints 2021-12-26 00:23:54 +08:00
Sebastien Bourdeauducq
d2a5cd6d57 update to LLVM 13 2021-12-25 22:49:47 +08:00
Sebastien Bourdeauducq
9e3f75255e update inkwell. Closes #67 2021-12-25 22:17:06 +08:00
pca006132
0902d8adf4 nac3core: fix #84 2021-12-23 15:26:48 +08:00
ychenfo
66320679be improve error messages
#112, #110, #108, #87

Reviewed-on: M-Labs/nac3#145
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2021-12-22 08:52:19 +08:00
Sebastien Bourdeauducq
0ff995722c Revert "nac3core: add missing expr concrete type check"
This reverts commit cb450372d6.
2021-12-20 18:13:45 +08:00
Sebastien Bourdeauducq
e2b44a066b return int32 in len(). Closes #141 2021-12-20 17:44:42 +08:00
ychenfo
cb450372d6 nac3core: add missing expr concrete type check 2021-12-19 18:01:49 +08:00
ychenfo
ff27a1697e nac3core: fix for loop type inference 2021-12-19 18:01:49 +08:00
ychenfo
91625dd327 update kernel-only attribute annotation
Reviewed-on: M-Labs/nac3#127
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2021-12-19 11:04:53 +08:00
ychenfo
b5637a04e9 nac3core: use official implementation for len 2021-12-13 10:44:33 +08:00
ychenfo
2c6601d97c nac3core: fix len on range with step of different sign 2021-12-13 10:44:33 +08:00
ychenfo
82359b81a2 nac3core: fix bool to int conversion 2021-12-13 04:13:43 +08:00
ychenfo
4d2fd9582a nac3core: fix broken tests 2021-12-09 01:37:05 +08:00
ychenfo
b7892ce952 nac3core: add len support for list and range 2021-12-09 01:37:00 +08:00
ychenfo
01d3249646 nac3core: add missing llvm range type 2021-12-09 01:16:05 +08:00
Sebastien Bourdeauducq
3f73896477 remove a small amount of LLVM bloat
Also avoids libffi.dll dependency on Windows.
2021-12-08 17:41:34 +08:00
Sebastien Bourdeauducq
4526c28edb Merge branch 'windows' 2021-12-02 22:26:55 +08:00
Sebastien Bourdeauducq
25fc9db66d cargo: specify inkwell LLVM target explicitly
Windows LLVM linking otherwise breaks on the non-existing targets.
2021-12-02 22:24:33 +08:00
Sebastien Bourdeauducq
1c31aa6e8e consistent naming 2021-12-02 10:45:46 +08:00
ychenfo
aa2d79fea6 Merge branch 'master' into built_in_floor_ceil 2021-12-02 01:08:55 +08:00
ychenfo
1e6848ab92 nac3core: distinguish i64 and i32 in bool conversion 2021-12-02 01:02:42 +08:00
Sebastien Bourdeauducq
142f82f987 remove debug prints 2021-12-01 22:48:06 +08:00
ychenfo
dfd3548ed2 TypeVar and virtual support in Symbol Resolver (#99)
Add `TypeVar` and `virtual` support for Symbol Resolver in nac3artiq and nac3standalone

Reviewed-on: M-Labs/nac3#99
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2021-12-01 22:44:53 +08:00
ychenfo
fa2fe8ed5d nac3core: add ceil and floor 2021-12-01 03:23:58 +08:00
ychenfo
7ede4f15b6 nac3core: move builtin definitions to another file 2021-12-01 02:52:00 +08:00
ychenfo
0fe346106d nac3core: fix converting int to bool (#119) 2021-11-30 03:02:26 +08:00
pca006132
4b17511b4a Merge branch 'master' into KernelInvariant 2021-11-27 21:29:27 +08:00
pca006132
7ee82de312 nac3core: fixed weird type inference error 2021-11-27 20:27:46 +08:00
Sebastien Bourdeauducq
de8fc264d7 fix unsupported default parameter error message 2021-11-23 15:34:44 +08:00
ychenfo
4587088835 Constant Default Parameter Support (#98)
Add support for constant default parameter

Reviewed-on: M-Labs/nac3#98
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2021-11-23 07:32:09 +08:00
ychenfo
49476d06e1 nac3core: clearer comments 2021-11-22 15:06:16 +08:00
ychenfo
664e02cec4 nac3core: fix clippy warning 2021-11-22 14:55:39 +08:00
ychenfo
01b51b62ee nac3core: composer better error msg in for uninit field 2021-11-21 06:11:55 +08:00
ychenfo
d336200bf4 nac3core: fix broken tests due to the fix of rigid typevar handling 2021-11-21 06:11:55 +08:00
ychenfo
a50df6560e nac3core: fix handling on rigid typevar 2021-11-21 06:11:55 +08:00
ychenfo
a9635f0979 nac3core: top level use codegen official get_subst_key 2021-11-21 06:11:55 +08:00
ychenfo
c2706fa720 nac3core: fix polymorphic class method partial instantiation 2021-11-21 06:11:55 +08:00
pca006132
f5ec103c82 nac3artiq: kernel invariant support 2021-11-20 21:15:15 +08:00
pca006132
ba08deada6 nac3core: refactor codegen 2021-11-20 19:50:25 +08:00
ychenfo
8ab3ee9cce nac3core: AugAssign support (#82) 2021-11-13 12:24:22 +08:00
Sebastien Bourdeauducq
96607432c1 nac3core: use Python 3.9 list/tuple annotations in test
Closes #85
2021-11-11 20:05:08 +08:00
pca006132
ffa89e9308 fix clippy warnings 2021-11-06 23:00:18 +08:00
pca006132
b1e83a1fd4 nac3core: type check invariants
This rejects code that tries to assign to KernelInvariant fields and
methods.
2021-11-06 22:48:08 +08:00
pca006132
99b29d8ded Merge branch 'master' into with_nac3comment 2021-11-05 20:46:29 +08:00
pca006132
3db95b120b nac3core: implements bool conversion function 2021-11-05 20:34:34 +08:00
pca006132
8dbb4ad58a nac3core/toplevel: make test less fragile
test results should not depend on internal states if possible
2021-11-05 20:28:21 +08:00
ychenfo
b239806558 nac3core: adapt to ast change due to comment support 2021-11-04 15:02:51 +08:00
Sebastien Bourdeauducq
bf7e2c295a integrate nac3parser 2021-11-03 17:11:00 +08:00
Sebastien Bourdeauducq
e89bc93b5f ignore expressions in class definition body (#26) 2021-11-02 23:30:12 +08:00
Sebastien Bourdeauducq
47f563908a basic string support (#30) 2021-11-02 23:22:49 +08:00
Sebastien Bourdeauducq
0e914ab7e9 composer: add range keyword 2021-11-02 18:56:14 +08:00
Sebastien Bourdeauducq
613020a717 test: add missing id_to_name entry 2021-11-02 18:34:48 +08:00
Sebastien Bourdeauducq
624dfe8cd1 upgrade to LLVM 12 2021-11-02 14:00:20 +08:00
pca006132
083eacc268 with parallel/sequential support
Behavior of parallel and sequential:
Each function call (indirectly, can be inside a sequential block) within a parallel
block will update the end variable to the maximum now_mu in the block.
Each function call directly inside a parallel block will reset the timeline after
execution. A parallel block within a sequential block (or not within any block) will
set the timeline to the max now_mu within the block (and the outer max now_mu will also
be updated).

Implementation: We track the start and end separately.
- If there is a start variable, it indicates that we are directly inside a
parallel block and we have to reset the timeline after every function call.
- If there is a end variable, it indicates that we are (indirectly) inside a
parallel block, and we should update the max end value.

Note: requires testing, it is difficult to inspect the output IR
2021-10-31 23:54:37 +08:00
pca006132
558c3f03ef nac3core/codegen: list comprehension support 2021-10-24 16:53:43 +08:00
pca006132
45673b0ecc nac3core/codegen: cleanup 2021-10-24 16:53:43 +08:00
pca006132
181607008d nac3core/codegen: supports list iter 2021-10-24 14:39:50 +08:00
pca006132
fb92b6d364 nac3core: supports range iterator 2021-10-23 23:53:36 +08:00
pca006132
2f6ba69770 nac3core/typecheck: check if value is none 2021-10-23 21:31:14 +08:00
pca006132
cc83bbc63a nac3core/codegen: fix broken test 2021-10-17 13:07:45 +08:00
pca006132
279f47f633 nac3core/codegen: avoid sending unifiers
Previously, we have to copy types from one unification table to another,
and make the table sendable. This requires cloning (processing) the
whole table 3 times per function call which is not efficient and uses
more memory than required when the unification table is large.

We now use a concrete type table to only copy the type we need. This
reduces the overhead as we only need to process the unification table
for once (when we do the function codegen), and reduces memory usage by
a bit (but not noticeable when the unification table is small, i.e. the
types are simple).
2021-10-17 13:02:18 +08:00
pca006132
9850cbe313 nac3core/codegen: optimize for every function
This speeds up compilation and reduces memory usage.
2021-10-17 12:56:11 +08:00
pca006132
1f5bea2448 nac3core/codegen: refactor according to #23 2021-10-16 22:17:36 +08:00
pca006132
c4259d14d1 fixed some clippy warnings 2021-10-16 18:08:13 +08:00
pca006132
26076c37ba nac3core/typecheck: supports recursive type inference 2021-10-16 15:56:49 +08:00
Sebastien Bourdeauducq
fd0b11087e nac3core: use round instead of rint. Closes #61 2021-10-11 08:18:52 +08:00
pca006132
77542170fd nac3core: fixes #60 2021-10-10 15:01:06 +08:00
pca006132
a3ce5be10b nac3core: fixes #32 and #57 2021-10-09 16:20:49 +08:00
pca006132
11144301ca nac3artiq: added simple host value support 2021-10-06 16:07:42 +08:00
ychenfo
4fcb54e463 nac3core: fix #46, better toplevel return type error msg 2021-10-03 18:07:45 +08:00
ychenfo
24b2111c64 nac3core: fix #45 toplevel better error msg for methods/functions 2021-10-03 17:25:28 +08:00
ychenfo
f5ce1afe0b fix tests and switch to insta
Use a library called 'insta' to better organize those longer correct test outputs in toplevel tests. 'insta' creates `.snap` files as snapshots of the test output, and will automatically do the diff if the output is different. This makes maintaining test cases with larger outputs a lot easier.

Reviewed-on: M-Labs/nac3#42
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2021-10-03 16:39:12 +08:00
Sebastien Bourdeauducq
ba93931758 implement timeline functions for RISC-V (WIP) 2021-10-02 19:05:35 +08:00
pca006132
1d2a32b140 nac3core/toplevel: impl scalar conversion
Implemented scalar conversion functions as builtin functions.
`round` for int64 is now implemented as `round64`.
2021-09-30 23:39:29 +08:00
pca006132
f0fdfe42cb nac3core: better impl of #24 2021-09-30 17:07:48 +08:00
Sebastien Bourdeauducq
8d839db553 typo 2021-09-27 19:12:18 +08:00
Sebastien Bourdeauducq
64404bba20 syscall -> extern (#21) 2021-09-27 10:13:03 +08:00
pca006132
d4ed76d76e nac3core: implementing #24 2021-09-26 22:17:09 +08:00
pca006132
3c121dfcda nac3core/toplevel/composer: fixes #29 2021-09-25 22:02:19 +08:00
pca006132
693ac7d336 nac3core/toplevel: added personality symbol config 2021-09-25 21:44:00 +08:00
pca006132
799ed58d21 nac3core/type_inferencer: avoid type var for assign 2021-09-22 19:25:47 +08:00
pca006132
105d605e6d nac3core: fix clippy warnings 2021-09-22 18:04:06 +08:00
pca006132
97f5b7c324 fixed performance regression 2021-09-22 18:04:06 +08:00
pca006132
7d48883583 fixed tests 2021-09-22 18:04:06 +08:00
pca006132
084efe92af nac3core: use string interning 2021-09-22 18:04:06 +08:00
pca006132
891056631f nac3core: use Arc to reduce copy 2021-09-22 18:04:06 +08:00
pca006132
1b5ac3cd25 nac3core: do not alloc call if it is monomorphic 2021-09-22 18:04:06 +08:00
pca006132
5ed2b450d3 nac3core/typecheck: no type variable for monomorphic functions 2021-09-22 18:04:06 +08:00
pca006132
a508baae20 added syscall annotation
and temporarily disabled the keyword check for top-level functions
2021-09-22 17:58:46 +08:00
Sebastien Bourdeauducq
013e7cfc2a codegen: support pass statement. Closes #10 2021-09-22 15:17:13 +08:00
pca006132
4fe643f45b allows function ending with a number 2021-09-22 14:45:42 +08:00
ychenfo
1c170f5c41 nac3core: type inferencer fix the pass statement 2021-09-21 13:19:13 +08:00
pca006132
df6c9c8a35 fix #11 2021-09-21 11:29:51 +08:00
ychenfo
20905a9b67 nac3core: better field initialization check 2021-09-21 03:02:12 +08:00
ychenfo
e66693282c nac3core: change the place to unify constructor type for function body type check
add really basic field initialize check
2021-09-20 23:44:39 +08:00
ychenfo
dd1be541b8 nac3core: allow class to have no __init__, function/method name with module path added to ensure uniqueness 2021-09-20 23:36:19 +08:00
pca006132
3c930ae9ab fixed #12 2021-09-20 15:51:42 +08:00
ychenfo
35a94a8fc0 nac3core: fix broken test 2021-09-20 01:58:07 +08:00
pca006132
4939ff4dbd simple implementation of classes 2021-09-19 22:54:06 +08:00
ychenfo
2b74895b71 nac3standalone, nac3core: can use top level composer to compile and run mandelbrot 2021-09-19 16:19:49 +08:00
ychenfo
1b0f3d07cc nac3core: top level fix field of funinstance 2021-09-17 22:32:13 +08:00
ychenfo
ed5dfd4100 nac3core: top level inferencer call with type var more test 2021-09-17 16:31:33 +08:00
ychenfo
41e63f24d0 nac3core: top level add test utility to print stringfied type 2021-09-17 16:31:21 +08:00
ychenfo
d0df705c5a nac3core: toplevel type var test 2021-09-17 00:39:42 +08:00
ychenfo
a0662c58e6 nac3core: fix recursive top level function call 2021-09-17 00:39:42 +08:00
ychenfo
526c18bda0 nac3core: top level inferencer without type var should be ok 2021-09-17 00:39:42 +08:00
ychenfo
a10ab81ee7 toplevel composer: add ast to class methods, suppress warning 2021-09-17 00:39:42 +08:00
pca006132
f5353419ac codegen: minimized lock holding time
The previous way of holding the lock would prohibit multithread code
generation for llvm
2021-09-16 21:36:42 +08:00
pca006132
180392e2ab typecheck: fixed recursive substitution 2021-09-12 21:33:21 +08:00
ychenfo
471547855e nac3core: toplevel change class method name handling, cleanup comments 2021-09-12 13:14:46 +08:00
ychenfo
2ac3f9a176 nac3core: separate top level compoer to a new file 2021-09-12 05:10:10 +08:00
ychenfo
cb310965b8 nac3core: toplevel register consider module path 2021-09-12 05:00:26 +08:00
ychenfo
118f19762a nac3core: toplevel format 2021-09-12 04:40:40 +08:00
ychenfo
b419634f8a nac3core: top level fields inheritance check, more tests 2021-09-12 04:34:30 +08:00
ychenfo
147298ff40 nac3core: top level fix class fields as nac3 spec 2021-09-12 03:49:21 +08:00
ychenfo
c7cb02b0f3 nac3core: toplevel fix parse type annotation dead lock 2021-09-12 03:01:56 +08:00
ychenfo
4eacd1aa9e nac3core: top level err test 2021-09-10 21:26:39 +08:00
ychenfo
9eef51f29f nac3core: top level class method self parameter fixed 2021-09-10 16:14:08 +08:00
ychenfo
917d447605 nac3core: clean up, fix broken test 2021-09-09 02:09:35 +08:00
ychenfo
f1013d9a17 nac3core: top level fix type var within list tuple, test of type var application compatibility 2021-09-09 02:03:44 +08:00
ychenfo
2ce507964c nac3core: fix broken top level test due to hashmap order 2021-09-09 00:44:56 +08:00
ychenfo
5a1a8ecee3 nac3core: self is not not allowed to explicitly appear in method type annotations 2021-09-08 21:53:54 +08:00
ychenfo
1300b5ebdd nac3core: clean up and format 2021-09-08 19:45:36 +08:00
ychenfo
87f25e1c5d nac3core: remove mutex on dyn symbol resolve 2021-09-08 19:27:32 +08:00
ychenfo
55335fc05d nac3core: top level simple type var handled 2021-09-08 02:27:12 +08:00
ychenfo
247b364191 nac3core: top level fix cyclic ancestor analysis, add tests 2021-09-07 17:30:15 +08:00
ychenfo
bbcec6ae6f nac3core: toplevel fix bug in make self annotation and return type check 2021-09-07 10:03:31 +08:00
ychenfo
235b6e34d1 nac3core: top level derive fmt::Debug, fix dead lock 2021-09-07 00:20:40 +08:00
ychenfo
54b4572c5f nac3core: allow interior mutability to dyn symbolresolver, add add_id_def to symbolresolver trait, remove primitive from top level def list 2021-09-06 19:23:04 +08:00
ychenfo
dc7c014b10 nac3core: top level more test 2021-08-31 17:40:38 +08:00
1ae6acc061 nac3core: top level fix function/methods none return type 2021-08-31 15:41:48 +08:00
98d032b72a nac3core: top level fix duplicate def, start adding tests 2021-08-31 15:23:57 +08:00
7bbd608492 nac3core: top level cleanup, rewrite ancestors handling, __init__ occruence check 2021-08-31 13:54:16 +08:00
4a9593efa3 nac3core: top level clean up and fix ancestors analysis 2021-08-30 22:47:55 +08:00
098bd1e6e6 nac3core: top level check inheritance method overload 2021-08-30 17:39:29 +08:00
82c2edcf8d nac3core: toplevel cleanup and add list and tuple support 2021-08-30 14:16:11 +08:00
40e58d02ed nac3core: toplevel all ancestors are put into the def list, disallow generic base class for now 2021-08-30 14:15:57 +08:00
e2a9bdd8bc nac3core: toplevel no duplicate type var too early 2021-08-30 14:15:36 +08:00
236989defc nac3core: remove unnecessary inline and function parameters 2021-08-27 16:52:31 +08:00
pca006132
22a728833d nac3core: fixed broken test 2021-08-27 16:50:53 +08:00
pca006132
2223c86d9b nac3standalone: compile multiple functions 2021-08-27 16:25:59 +08:00
pca006132
72aebed559 nac3core: unification table optimization
avoid cloning values that we no longer need.
2021-08-27 13:05:06 +08:00
pca006132
8c1c7fcfc3 nac3core: fixed broken tests 2021-08-27 13:04:51 +08:00
pca006132
6633eabb89 nac3core: optimized by using HashSet 2021-08-27 12:36:51 +08:00
pca006132
bf4e0009c0 codegen: do not generate cont_bb if unreachable 2021-08-27 11:46:12 +08:00
pca006132
a24e204824 type_inferencer: check defined identifiers during inference 2021-08-27 11:13:43 +08:00
35ef0386db move helper function to another file 2021-08-27 10:21:51 +08:00
b9a580d271 handle class method/fields type var 2021-08-27 09:53:09 +08:00
018d6643e1 top level: top level function type var handled
top level: class methods/fields type var handling
2021-08-27 01:41:34 +08:00
935e7410fd check type params in class generic base declaration 2021-08-26 11:54:37 +08:00
1a21fb1072 fix codegen test about top level composer return type change 2021-08-25 18:00:01 +08:00
35a331552b cyclic inheritance check added 2021-08-25 17:47:26 +08:00
0bab477ab0 get rid of nested tuple in type annotation helper function 2021-08-25 17:47:26 +08:00
862d205f67 remove self kind and extra primitive info in the return of top level composer constructor, adding some helper function for type annotation 2021-08-25 17:47:26 +08:00
pca006132
e2b11c3fee codegen: fixed deadlock and added call test 2021-08-25 17:44:01 +08:00
pca006132
0608fd9659 fixed test and nac3standalone 2021-08-25 15:30:36 +08:00
pca006132
173102fc56 codegen/expr: function codegen and refactoring 2021-08-25 15:29:58 +08:00
pca006132
93270d7227 use forked version of rustpython
to implement Clone for AST nodes
2021-08-25 15:28:32 +08:00
pca006132
1ffa1a8bb0 typecheck/typedef: added copy_from
This function would copy concrete type from one unifier to another
unifier, and can handle recursive types. This would be used in code
generation for moving types from one unification table to another one.
2021-08-25 12:02:10 +08:00
01f7a31aae put parse ast into type annotation into one function 2021-08-24 17:44:37 +08:00
32773c14e0 move top level related things to a separate module 2021-08-24 17:19:17 +08:00
pca006132
c356062239 symbol_resolver: handle list and tuples 2021-08-24 14:58:19 +08:00
56f082ca7c handle type var associated with class/function partially, change llvm version of nac3embedded to 11
format
2021-08-23 17:00:32 +08:00
39f300b62a clean up and add duplicate function/parameter/class name test
formatted
2021-08-23 14:22:46 +08:00
7b1fe36e90 formatted 2021-08-23 11:13:45 +08:00
fb5b4697a9 fix rebase conflict and some test failure with unifier's error message 2021-08-23 10:34:11 +08:00
364054331c handle class fields and methods 2021-08-23 02:54:45 +08:00
40b062ce0f change the parse type annotation parameter type, refactoring top level 2021-08-23 02:54:45 +08:00
pca006132
f5b8b58826 added tuple assignment check 2021-08-21 15:11:01 +08:00
pca006132
c4d6b3691a codegen/expr: fixed warnings 2021-08-21 15:10:50 +08:00
pca006132
957ceb74e4 nac3core/typecheck: added basic location information 2021-08-21 14:51:46 +08:00
pca006132
e47d063efc codegen: store to list element 2021-08-19 17:14:38 +08:00
pca006132
0e2da0d180 codegen: gep related fixes
we can now compile simple programs that uses tuples and lists
2021-08-19 16:54:15 +08:00
pca006132
3279f7a776 codegen for simple function call, and various fixes 2021-08-19 15:30:15 +08:00
pca006132
d1215bf5ac nac3core/codegen/expr: fixed typo 2021-08-19 11:45:33 +08:00
pca006132
6e424a6a3e fixed codegen test 2021-08-19 11:32:22 +08:00
pca006132
9a07ef3301 Merge remote-tracking branch 'origin/hm-inference_anto' into hm-inference 2021-08-19 11:32:04 +08:00
c238c264e7 add type vars to the primitive binop function def 2021-08-19 11:18:58 +08:00
Sebastien Bourdeauducq
f8a697e3d4 switch to LLVM 11 2021-08-19 11:14:35 +08:00
4b38fe66a2 format 2021-08-18 17:33:48 +08:00
9cb07e6f04 start to handle base inheritance methods, fields 2021-08-18 17:32:55 +08:00
6279dbb589 formating 2021-08-18 16:33:50 +08:00
529442590f some parsing of top level class fields and methods 2021-08-18 16:28:17 +08:00
4fcd48e4c8 try to use def list ast tuple and remove method_to_def_id map 2021-08-18 10:01:11 +08:00
619963dc8c removed locks in toplevelcomposer 2021-08-17 16:36:06 +08:00
276daa03f7 start refactorinng for less redundancy 2021-08-17 14:01:18 +08:00
a94145348a fix on comments and redundant code, start handling 'self' things 2021-08-17 11:07:16 +08:00
fa40fd73c6 formatted 2021-08-16 20:17:08 +08:00
79ce13722a partially parsed class methods nad fields 2021-08-16 17:40:12 +08:00
eb814dd8c3 clean unused use 2021-08-16 13:57:21 +08:00
3734663188 add RefCell to FunSignature in TypeEnum 2021-08-16 13:53:45 +08:00
d8c3c063ec split top level handling in several functions 2021-08-16 13:53:39 +08:00
pca006132
d3ad894521 removed code comment 2021-08-13 16:30:33 +08:00
pca006132
784111fdbe Merge remote-tracking branch 'origin/hm-inference_anto' into hm-inference 2021-08-13 16:28:04 +08:00
pca006132
d30918bea0 worker thread panic handling 2021-08-13 16:20:14 +08:00
pca006132
e2adf82229 threadpool for parallel code generation 2021-08-13 14:48:46 +08:00
33391c55c2 add Sync bound to Symbol resolver in top level 2021-08-13 14:22:49 +08:00
3f65e1b133 start refactor top_level 2021-08-13 13:57:24 +08:00
ba5bb78f11 top level parse class base/generic 2021-08-13 13:57:24 +08:00
e176aa660d commit for pull new symbol resolver 2021-08-13 13:57:24 +08:00
pca006132
cb01c79603 removed Arc from TypeEnum 2021-08-13 13:33:59 +08:00
pca006132
1db8378f60 formatting 2021-08-12 16:36:23 +08:00
pca006132
8c7ccb626b fixed symbol_resolver blanket implementation 2021-08-12 14:44:50 +08:00
pca006132
1f6c16e08b fixed compilation failure 2021-08-12 13:56:51 +08:00
pca006132
77943a8117 added primitive codegen test 2021-08-12 13:56:06 +08:00
3a93e2b048 TypeEnum::TObj.param is now RefCell for interior mutability 2021-08-12 13:17:51 +08:00
824a5cb01a register top level clean up 2021-08-12 10:51:41 +08:00
17ee8fe6d0 starting cleaning up and further add Arc<Mutex> 2021-08-12 10:51:41 +08:00
pca006132
d46a4b2d38 symbol_resolver: fixed type variable handling 2021-08-12 10:25:32 +08:00
pca006132
de8b67b605 refactored symbol resolver 2021-08-11 17:28:29 +08:00
pca006132
0af4e95914 Merge remote-tracking branch 'origin/hm-inference_anto' into hm-inference 2021-08-11 15:42:32 +08:00
99276c8f31 formatted 2021-08-11 15:18:21 +08:00
42a636b4ce add Arc<Mutex<dyn SymbolResolver>> and change from Box<SymbolResolve> to Arc<SymbolResolver>, need format and cleanup 2021-08-11 15:11:51 +08:00
pca006132
e112354d25 codegen refactored 2021-08-11 14:37:26 +08:00
43236db9bd update some previous work on top level with the clean up 2021-08-11 13:31:59 +08:00
1bec6cf2db continue working on the top level 2021-08-11 11:16:53 +08:00
pca006132
a73ab922e2 cleanup 2021-08-10 21:57:31 +08:00
82ce816177 refactored top level parsing, need review 2021-08-10 10:37:06 +08:00
6ad953f877 top level class roughly handled, push for review 2021-08-10 10:37:06 +08:00
pca006132
4db871c244 put alloca in init block 2021-08-09 16:37:28 +08:00
pca006132
cc0692a34c modified alloca 2021-08-09 16:19:20 +08:00
pca006132
7a90ff5791 while loop constructs 2021-08-09 16:10:17 +08:00
pca006132
d8c713ce3d assignment statement 2021-08-09 15:39:50 +08:00
pca006132
1ffb792000 make tuple a ptr to a struct instead of a struct 2021-08-07 17:41:48 +08:00
pca006132
057fcfe3df default parameter value generation 2021-08-07 17:31:01 +08:00
pca006132
86ca02796b function parameter handling 2021-08-07 17:25:14 +08:00
pca006132
711482d09c expr codegen cleanup 2021-08-07 15:30:03 +08:00
pca006132
7a38ab3119 codegen for function call 2021-08-07 15:06:39 +08:00
pca006132
34d3317ea0 store operation method signature 2021-08-07 10:41:53 +08:00
pca006132
c405e46b00 moving location and symbol_resolver out from typecheck 2021-08-07 10:28:41 +08:00
18db2ddd53 change the type TypeEnum::TObj {object_id} to DefinitionId as with top_level
change TopLevelDef::Class {object_id} to DefinitionId
2021-08-06 10:57:01 +08:00
fe26070364 cleanup basic_test_env 2021-08-06 10:57:01 +08:00
pca006132
095f28468b added if expr 2021-08-05 16:52:41 +08:00
pca006132
29286210b5 implementing codegen 2021-08-05 14:56:09 +08:00
pca006132
b01d0f6fbb formatting 2021-08-05 14:56:09 +08:00
pca006132
3dcd846302 added rayon dependency 2021-08-05 14:56:09 +08:00
c0227210df bit shift lhs rhs same type; float ** int and float ** float both supported 2021-08-05 11:55:46 +08:00
99c71687a6 fixed: bitwise shift rhs can only be int32; better structured code 2021-08-04 16:46:16 +08:00
d052f007fb fix typo of primitives method 2021-08-04 12:03:56 +08:00
pca006132
8452579c67 use parking_lot RwLock
The std::sync::RwLock is platform dependent, and is unfair on Linux
(may starve writer)
2021-08-03 14:11:41 +08:00
pca006132
f00c1813e3 top-level related changes 2021-08-03 13:38:27 +08:00
pca006132
d4d12a9d1d added crossbeam dependency 2021-08-03 12:38:55 +08:00
pca006132
a3acf09bda typedef: make it send
Rc in calls is not send, so we use Arc instead.
2021-08-03 12:38:12 +08:00
pca006132
52dc112410 unification table: modified conversion impl
from UnificationTable<Rc<RefCell<T>> <==> UnificationTable<T>
to UnificationTable<Rc<T>> <==> UnificationTable<T>
2021-08-03 12:35:58 +08:00
d4807293b0 clean up unused variabls and comments 2021-08-03 10:41:52 +08:00
d4721db4a3 not creating temp for borrow, more concise code 2021-08-03 09:45:39 +08:00
a7e3eeea0d add primitive magic method support; change from TypeEnum::TObj { fields: Mapping<String>, ..} to TypeEnum::TObj {fields: RefCell<Mapping<String>>, .. } for interior mutability 2021-08-02 17:36:37 +08:00
f7bbc3e10d Merge branch 'hm-inference' into hm-inference_anto 2021-08-02 11:33:36 +08:00
7e0d55443a better structured primitive magic methods impl 2021-08-02 11:28:05 +08:00
pca006132
197a72c658 added comment 2021-07-30 16:43:25 +08:00
pca006132
eba92ed8bd added method to get all instantiations 2021-07-30 16:32:50 +08:00
b87c627c41 updated with field in the test environment 2021-07-30 15:46:57 +08:00
ae79533cfd Merge remote-tracking branch 'origin/hm-inference' into hm-inference_anto 2021-07-30 15:41:53 +08:00
9983aa62e6 add primitive magic methods 2021-07-30 15:40:14 +08:00
pca006132
7ad8e2d81d cleanup some error reporting code 2021-07-30 13:50:46 +08:00
pca006132
743a9384a3 added rigid type variable 2021-07-30 11:28:27 +08:00
pca006132
f2c5a9b352 added location -> call mapping
This allows code generation module to get function instantiation
parameter directly.
2021-07-30 11:01:11 +08:00
09e76efcf7 start adding primitive magic methods 2021-07-29 15:36:19 +08:00
pca006132
832513e210 new is_concrete type check 2021-07-28 17:25:19 +08:00
pca006132
f665ea358b fixed fold 2021-07-28 10:44:58 +08:00
pca006132
e15473d2c9 fixed pattern matching 2021-07-27 14:39:53 +08:00
pca006132
5f0490cd84 added virtual test 2021-07-27 11:58:35 +08:00
pca006132
1d13b16f94 updated function check 2021-07-26 16:00:29 +08:00
pca006132
8d0856a58d added documentation 2021-07-26 14:38:18 +08:00
pca006132
bf31c48bba fixed missing unification 2021-07-26 14:20:47 +08:00
pca006132
8618837816 fixed range unification 2021-07-26 12:00:06 +08:00
pca006132
d7df93bef1 fixed range check 2021-07-23 17:22:05 +08:00
pca006132
d140164a38 fixed virtual unification 2021-07-23 16:19:00 +08:00
pca006132
ddcf4b7e39 refactored typedef 2021-07-23 15:57:37 +08:00
pca006132
88c45172b2 basic check for use-before-def 2021-07-22 17:07:49 +08:00
pca006132
c315227a28 init function check 2021-07-22 15:36:37 +08:00
pca006132
d484fa1e5c added return type check 2021-07-22 11:49:00 +08:00
pca006132
09c9218852 use custom unification table implementation
as the ena implementation did not expose the underlying vector store, we
cannot map over it to get a table without Rc<RefCell<T>> so that we can
send it around...
2021-07-22 11:37:29 +08:00
pca006132
4f81690128 modified occur check 2021-07-21 16:10:11 +08:00
pca006132
b3d849ea7a list test 2021-07-21 16:06:06 +08:00
pca006132
3e03398d9b obj test 2021-07-21 15:59:01 +08:00
pca006132
2f5c3b3cb7 more cleanup and started adding tests 2021-07-21 15:36:35 +08:00
pca006132
25ff24a320 modified interface 2021-07-21 14:24:46 +08:00
pca006132
0296844d5f cleanup 2021-07-21 13:28:05 +08:00
pca006132
e95bfe1d31 added statements 2021-07-20 16:56:04 +08:00
pca006132
bc9b453b3e function call implementation 2021-07-20 16:13:43 +08:00
pca006132
fa31e8f336 fold listcomp 2021-07-20 13:45:17 +08:00
pca006132
22455e43ac lambda fold 2021-07-20 11:47:19 +08:00
pca006132
016166de46 skeleton done 2021-07-19 17:26:51 +08:00
pca006132
eb4b2bb7f6 refactored using constrain
to allow easier modification later with subtyping
2021-07-19 17:05:48 +08:00
pca006132
e732f7e089 removed integer encoding 2021-07-19 16:51:58 +08:00
pca006132
d4b85d0bac expression type inference (WIP) 2021-07-19 13:35:01 +08:00
pca006132
c913fb28bd use signed integer for TSeq 2021-07-19 13:34:45 +08:00
pca006132
f51603f6da cleanup 2021-07-19 09:52:25 +08:00
pca006132
d67407716c function unification... 2021-07-16 15:55:52 +08:00
pca006132
f4121b570d added documentation 2021-07-16 14:34:52 +08:00
pca006132
8b078dfa1b naming 2021-07-16 13:59:08 +08:00
pca006132
62736bd4bf cleanup: we don't actually need arena 2021-07-16 13:58:02 +08:00
pca006132
c2d00aa762 occur check 2021-07-15 16:51:55 +08:00
pca006132
d94f25583b added tests 2021-07-15 16:00:23 +08:00
pca006132
1df3f4e757 most of unification... 2021-07-14 17:20:12 +08:00
pca006132
97fe450a0b occur check 2021-07-14 16:40:50 +08:00
pca006132
e8c5189fce simplified code with Rc<RefCell<T>> 2021-07-14 15:58:58 +08:00
pca006132
291e642699 partial implementation 2021-07-14 15:24:00 +08:00
pca006132
e554737b68 tmp 2021-07-14 08:12:47 +08:00
pca006132
84c980fed3 type scheme instantiation 2021-06-30 17:18:56 +08:00
pca006132
2985b88351 refactor for HM style inference... 2021-06-30 16:28:18 +08:00
pca006132
eb12f6f082 updated inference_context error msg 2021-06-28 16:36:24 +08:00
pca006132
f43e225845 updated inference_context rules 2021-06-28 16:32:46 +08:00
pca006132
e72d96f165 added location information for diagnostics 2021-06-28 15:05:05 +08:00
pca006132
ed04cef431 added symbol resolver... 2021-06-28 14:48:04 +08:00
pca006132
7c9919256c begin refactoring 2021-06-28 10:49:41 +08:00
pca006132
42511334f7 fixed some inference rules... 2021-06-25 16:49:58 +08:00
pca006132
5292f32835 removed method for type variables 2021-06-25 16:08:32 +08:00
pca006132
4902f9f645 added expression_inference tests 2021-01-04 14:55:11 +08:00
pca006132
24d512c30f added expression_inference 2021-01-04 14:54:57 +08:00
pca006132
5b5e9ce04f added magic methods 2021-01-04 14:53:52 +08:00
pca006132
6824b9c4d3 added inference_core tests 2021-01-04 14:53:33 +08:00
pca006132
7c9e80cc1b added inference core 2021-01-04 14:52:50 +08:00
pca006132
bde52f7ad3 added primitives 2021-01-04 14:52:00 +08:00
pca006132
04e9f9c077 added inference context 2021-01-04 14:51:43 +08:00
pca006132
7523b43a08 added top level context 2021-01-04 14:51:25 +08:00
pca006132
7eb40e25dd added typedef 2021-01-04 14:49:48 +08:00
pca006132
96317686af enabled clippy 2021-01-04 14:49:14 +08:00
Sebastien Bourdeauducq
703059adab nac3standalone: renames 2020-12-18 22:35:59 +08:00