Commit Graph

398 Commits

Author SHA1 Message Date
11144301ca nac3artiq: added simple host value support 2021-10-06 16:07:42 +08:00
4fcb54e463 nac3core: fix #46, better toplevel return type error msg 2021-10-03 18:07:45 +08:00
24b2111c64 nac3core: fix #45 toplevel better error msg for methods/functions 2021-10-03 17:25:28 +08:00
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
ba93931758 implement timeline functions for RISC-V (WIP) 2021-10-02 19:05:35 +08:00
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
f0fdfe42cb nac3core: better impl of #24 2021-09-30 17:07:48 +08:00
8d839db553 typo 2021-09-27 19:12:18 +08:00
64404bba20 syscall -> extern (#21) 2021-09-27 10:13:03 +08:00
d4ed76d76e nac3core: implementing #24 2021-09-26 22:17:09 +08:00
3c121dfcda nac3core/toplevel/composer: fixes #29 2021-09-25 22:02:19 +08:00
693ac7d336 nac3core/toplevel: added personality symbol config 2021-09-25 21:44:00 +08:00
799ed58d21 nac3core/type_inferencer: avoid type var for assign 2021-09-22 19:25:47 +08:00
105d605e6d nac3core: fix clippy warnings 2021-09-22 18:04:06 +08:00
97f5b7c324 fixed performance regression 2021-09-22 18:04:06 +08:00
7d48883583 fixed tests 2021-09-22 18:04:06 +08:00
084efe92af nac3core: use string interning 2021-09-22 18:04:06 +08:00
891056631f nac3core: use Arc to reduce copy 2021-09-22 18:04:06 +08:00
1b5ac3cd25 nac3core: do not alloc call if it is monomorphic 2021-09-22 18:04:06 +08:00
5ed2b450d3 nac3core/typecheck: no type variable for monomorphic functions 2021-09-22 18:04:06 +08:00
a508baae20 added syscall annotation
and temporarily disabled the keyword check for top-level functions
2021-09-22 17:58:46 +08:00
013e7cfc2a codegen: support pass statement. Closes #10 2021-09-22 15:17:13 +08:00
4fe643f45b allows function ending with a number 2021-09-22 14:45:42 +08:00
1c170f5c41 nac3core: type inferencer fix the pass statement 2021-09-21 13:19:13 +08:00
df6c9c8a35 fix #11 2021-09-21 11:29:51 +08:00
20905a9b67 nac3core: better field initialization check 2021-09-21 03:02:12 +08:00
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
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
3c930ae9ab fixed #12 2021-09-20 15:51:42 +08:00
35a94a8fc0 nac3core: fix broken test 2021-09-20 01:58:07 +08:00
4939ff4dbd simple implementation of classes 2021-09-19 22:54:06 +08:00
2b74895b71 nac3standalone, nac3core: can use top level composer to compile and run mandelbrot 2021-09-19 16:19:49 +08:00
1b0f3d07cc nac3core: top level fix field of funinstance 2021-09-17 22:32:13 +08:00
ed5dfd4100 nac3core: top level inferencer call with type var more test 2021-09-17 16:31:33 +08:00
41e63f24d0 nac3core: top level add test utility to print stringfied type 2021-09-17 16:31:21 +08:00
d0df705c5a nac3core: toplevel type var test 2021-09-17 00:39:42 +08:00
a0662c58e6 nac3core: fix recursive top level function call 2021-09-17 00:39:42 +08:00
526c18bda0 nac3core: top level inferencer without type var should be ok 2021-09-17 00:39:42 +08:00
a10ab81ee7 toplevel composer: add ast to class methods, suppress warning 2021-09-17 00:39:42 +08:00
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
180392e2ab typecheck: fixed recursive substitution 2021-09-12 21:33:21 +08:00
471547855e nac3core: toplevel change class method name handling, cleanup comments 2021-09-12 13:14:46 +08:00
2ac3f9a176 nac3core: separate top level compoer to a new file 2021-09-12 05:10:10 +08:00
cb310965b8 nac3core: toplevel register consider module path 2021-09-12 05:00:26 +08:00
118f19762a nac3core: toplevel format 2021-09-12 04:40:40 +08:00
b419634f8a nac3core: top level fields inheritance check, more tests 2021-09-12 04:34:30 +08:00
147298ff40 nac3core: top level fix class fields as nac3 spec 2021-09-12 03:49:21 +08:00
c7cb02b0f3 nac3core: toplevel fix parse type annotation dead lock 2021-09-12 03:01:56 +08:00
4eacd1aa9e nac3core: top level err test 2021-09-10 21:26:39 +08:00
9eef51f29f nac3core: top level class method self parameter fixed 2021-09-10 16:14:08 +08:00
917d447605 nac3core: clean up, fix broken test 2021-09-09 02:09:35 +08:00
f1013d9a17 nac3core: top level fix type var within list tuple, test of type var application compatibility 2021-09-09 02:03:44 +08:00
2ce507964c nac3core: fix broken top level test due to hashmap order 2021-09-09 00:44:56 +08:00
5a1a8ecee3 nac3core: self is not not allowed to explicitly appear in method type annotations 2021-09-08 21:53:54 +08:00
1300b5ebdd nac3core: clean up and format 2021-09-08 19:45:36 +08:00
87f25e1c5d nac3core: remove mutex on dyn symbol resolve 2021-09-08 19:27:32 +08:00
55335fc05d nac3core: top level simple type var handled 2021-09-08 02:27:12 +08:00
247b364191 nac3core: top level fix cyclic ancestor analysis, add tests 2021-09-07 17:30:15 +08:00
bbcec6ae6f nac3core: toplevel fix bug in make self annotation and return type check 2021-09-07 10:03:31 +08:00
235b6e34d1 nac3core: top level derive fmt::Debug, fix dead lock 2021-09-07 00:20:40 +08:00
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
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
22a728833d nac3core: fixed broken test 2021-08-27 16:50:53 +08:00
2223c86d9b nac3standalone: compile multiple functions 2021-08-27 16:25:59 +08:00
72aebed559 nac3core: unification table optimization
avoid cloning values that we no longer need.
2021-08-27 13:05:06 +08:00
8c1c7fcfc3 nac3core: fixed broken tests 2021-08-27 13:04:51 +08:00
6633eabb89 nac3core: optimized by using HashSet 2021-08-27 12:36:51 +08:00
bf4e0009c0 codegen: do not generate cont_bb if unreachable 2021-08-27 11:46:12 +08:00
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
e2b11c3fee codegen: fixed deadlock and added call test 2021-08-25 17:44:01 +08:00
0608fd9659 fixed test and nac3standalone 2021-08-25 15:30:36 +08:00
173102fc56 codegen/expr: function codegen and refactoring 2021-08-25 15:29:58 +08:00
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
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
f5b8b58826 added tuple assignment check 2021-08-21 15:11:01 +08:00
c4d6b3691a codegen/expr: fixed warnings 2021-08-21 15:10:50 +08:00
957ceb74e4 nac3core/typecheck: added basic location information 2021-08-21 14:51:46 +08:00
e47d063efc codegen: store to list element 2021-08-19 17:14:38 +08:00
0e2da0d180 codegen: gep related fixes
we can now compile simple programs that uses tuples and lists
2021-08-19 16:54:15 +08:00
3279f7a776 codegen for simple function call, and various fixes 2021-08-19 15:30:15 +08:00
d1215bf5ac nac3core/codegen/expr: fixed typo 2021-08-19 11:45:33 +08:00
6e424a6a3e fixed codegen test 2021-08-19 11:32:22 +08:00
c238c264e7 add type vars to the primitive binop function def 2021-08-19 11:18:58 +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
d3ad894521 removed code comment 2021-08-13 16:30:33 +08:00
784111fdbe Merge remote-tracking branch 'origin/hm-inference_anto' into hm-inference 2021-08-13 16:28:04 +08:00
d30918bea0 worker thread panic handling 2021-08-13 16:20:14 +08:00
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
cb01c79603 removed Arc from TypeEnum 2021-08-13 13:33:59 +08:00
1db8378f60 formatting 2021-08-12 16:36:23 +08:00
8c7ccb626b fixed symbol_resolver blanket implementation 2021-08-12 14:44:50 +08:00
1f6c16e08b fixed compilation failure 2021-08-12 13:56:51 +08:00
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
d46a4b2d38 symbol_resolver: fixed type variable handling 2021-08-12 10:25:32 +08:00
de8b67b605 refactored symbol resolver 2021-08-11 17:28:29 +08:00
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
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
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
4db871c244 put alloca in init block 2021-08-09 16:37:28 +08:00
cc0692a34c modified alloca 2021-08-09 16:19:20 +08:00
7a90ff5791 while loop constructs 2021-08-09 16:10:17 +08:00
d8c713ce3d assignment statement 2021-08-09 15:39:50 +08:00
1ffb792000 make tuple a ptr to a struct instead of a struct 2021-08-07 17:41:48 +08:00
057fcfe3df default parameter value generation 2021-08-07 17:31:01 +08:00
86ca02796b function parameter handling 2021-08-07 17:25:14 +08:00
711482d09c expr codegen cleanup 2021-08-07 15:30:03 +08:00
7a38ab3119 codegen for function call 2021-08-07 15:06:39 +08:00
34d3317ea0 store operation method signature 2021-08-07 10:41:53 +08:00
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
095f28468b added if expr 2021-08-05 16:52:41 +08:00
29286210b5 implementing codegen 2021-08-05 14:56:09 +08:00
b01d0f6fbb formatting 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
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
f00c1813e3 top-level related changes 2021-08-03 13:38:27 +08:00
a3acf09bda typedef: make it send
Rc in calls is not send, so we use Arc instead.
2021-08-03 12:38:12 +08:00
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
197a72c658 added comment 2021-07-30 16:43:25 +08:00
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
7ad8e2d81d cleanup some error reporting code 2021-07-30 13:50:46 +08:00
743a9384a3 added rigid type variable 2021-07-30 11:28:27 +08:00
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
832513e210 new is_concrete type check 2021-07-28 17:25:19 +08:00
f665ea358b fixed fold 2021-07-28 10:44:58 +08:00
e15473d2c9 fixed pattern matching 2021-07-27 14:39:53 +08:00
5f0490cd84 added virtual test 2021-07-27 11:58:35 +08:00
1d13b16f94 updated function check 2021-07-26 16:00:29 +08:00
8d0856a58d added documentation 2021-07-26 14:38:18 +08:00
bf31c48bba fixed missing unification 2021-07-26 14:20:47 +08:00
8618837816 fixed range unification 2021-07-26 12:00:06 +08:00
d7df93bef1 fixed range check 2021-07-23 17:22:05 +08:00
d140164a38 fixed virtual unification 2021-07-23 16:19:00 +08:00
ddcf4b7e39 refactored typedef 2021-07-23 15:57:37 +08:00
88c45172b2 basic check for use-before-def 2021-07-22 17:07:49 +08:00
c315227a28 init function check 2021-07-22 15:36:37 +08:00
d484fa1e5c added return type check 2021-07-22 11:49:00 +08:00
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