Commit Graph

811 Commits

Author SHA1 Message Date
68b97347b1 core: Infer builtins name list using builtin declaration list 2023-12-08 17:29:34 +08:00
875d534de4 ast: Use {filename}:{row}:{col} for location output 2023-12-08 15:48:54 +08:00
cee62aa6c5 pin down LLVM used for IRRT 2023-11-25 20:15:29 +08:00
5c5620692f core: Add np_{round,floor,ceil}
These functions are NumPy variants of round/floor/ceil, which returns
floats instead of ints.
2023-11-23 13:45:07 +08:00
0af1e37e99 core: Prefix all NumPy/SciPy functions with np_/sp_spec 2023-11-23 13:35:23 +08:00
10538b5296 core: Update insta snapshots 2023-11-09 13:00:27 +08:00
d322c91697 core: Change bitshift operators to accept int32/uint32 for RHS operand 2023-11-09 12:16:20 +08:00
3231eb0d78 core: Add compile-time error and runtime assertion for negative shifts 2023-11-09 12:16:20 +08:00
08a5050f9a core: Implement non-trivial builtin functions using IRRT 2023-11-06 12:57:23 +08:00
0a84f7ac31 Add CodeGenerator::gen_block and refactor to use it 2023-11-04 13:42:44 +08:00
fd787ca3f5 core: Remove trunc
The behavior of trunc is already implemented by casts and is therefore
redundant.
2023-11-04 13:35:53 +08:00
4dbe07a0c0 core: Revert breaking changes to round-family functions
These functions should return ints as the math.* functions do instead of
following the convention of numpy.* functions.
2023-11-04 13:35:53 +08:00
2e055e8ab1 core: Replace rint implementation with LLVM intrinsic 2023-11-04 13:35:53 +08:00
c6b9aefe00 core: Fix int32-to-uint64 conversion
This conversion should be sign-extended.
2023-11-03 16:24:26 +08:00
8ad09748d0 core: Fix conversion from float to unsigned types
These conversions also need to wraparound.
2023-11-03 16:24:26 +08:00
7a5a2db842 core: Fix handling of float-to-int32 casts
Out-of-bound conversions should be wrapped around.
2023-11-03 16:24:26 +08:00
92d6f0a5d3 core: Implement bitwise not for unsigned ints and fix implementation 2023-11-03 16:24:26 +08:00
ff1fed112c core: Rework gamma/gammaln to match SciPy behavior
Matches behavior for infinities and NaNs.
2023-11-01 18:03:29 +08:00
36a6a7b8cd core: Replace TopLevelDef comments with documentation 2023-11-01 18:03:29 +08:00
2b635a0b97 core: Implement numpy and scipy functions 2023-11-01 18:03:29 +08:00
60ad100fbb core: Implement and expose {isinf,isnan} 2023-11-01 18:03:29 +08:00
7cf7634985 core: Add create_fn_by_* functions
Used for abstracting the creation of function from different sources.
2023-11-01 18:03:29 +08:00
068f0d9faf core: Do not cast floor/ceil result to int
NumPy explicitly states that the return type of the floor/ceil is float.
2023-11-01 18:03:29 +08:00
95810d4229 core: Remove {ceil64,floor64,round,round64}
These are not present in NumPy or Artiq.
2023-11-01 18:03:29 +08:00
e95586f61e core: Fix IR generation of for loop containing break/continue
Fix cases where the body BB would have two terminators because of a
preceding continue/break statement already emitting a terminator.
2023-11-01 13:21:27 +08:00
e1487ed335 cargo: Update dependencies 2023-10-20 18:11:45 +08:00
73500c9081 core: Remove lazy_static from dependencies 2023-10-16 15:55:10 +08:00
50230e61f3 core: Simplify loop condition check for list comprehension 2023-10-06 12:24:03 +08:00
0205161e35 core: Simplify list creation for comprehension 2023-10-06 12:22:38 +08:00
a2fce49b26 core: Allocate exceptions at the beginning of function
Only one instance of exception is necessary, as exceptions will always
be initialized before being thrown.
2023-10-06 12:13:20 +08:00
60a503a791 core: Allocate more stack variables at the beginning of function
All allocas for temporary objects are now placed in the beginning of the
function. Allocas for on-temporary objects are not modified because
these variables may appear in a loop and thus must be uniquely
allocated by different allocas.
2023-10-06 11:42:47 +08:00
0c49b30a90 core: Restore debug info before function call is invoked
Previously, the IR which sets up the call to the target function will
have its debug location pointing at the last argument of the function
call instead of the function call itself.
2023-10-06 11:35:23 +08:00
c7de22287e core: Fix restoration of stack address
All allocas for temporary objects are now placed in the beginning of the
function. Allocas for on-temporary objects are not modified because
these variables may appear in a loop and thus must be uniquely
represented.
2023-10-06 11:34:23 +08:00
1a54aaa1c0 core: Restore debug location when generating allocas
Debug location is lost when moving the builder cursor.
2023-10-06 11:11:50 +08:00
480a4bc0ad core: Implement comparison operators for unsigned types 2023-10-05 17:13:10 +08:00
2a775d822e core: Demote dead code into a stdout warning 2023-10-04 18:03:25 +08:00
9b28f23d8c flake: Add clang alongside clang-unwrapped 2023-09-30 09:31:18 +08:00
48c6498d1f core: Fix restoration of loop target in try statement
old_loop_target is only assigned if ctx.loop_target is overwritten,
meaning that if ctx.loop_target is never overwritten, ctx.loop_target
will always be overwritten to None.

We fix this by only restoring from old_loop_target if we previously
assigned to old_loop_target.
2023-09-28 20:00:02 +08:00
2a38d5160e meta: Respect opt flags when performing whole-module optimization 2023-09-28 19:58:54 +08:00
cb39f61e79 core: Fix passing structure arguments to extern functions
All parameters with a structure type in extern functions are marked as
`byref` instead of `byval`, as most ABIs require the first several
arguments to be passed in registers before spilling into the stack.

`byval` breaks this contract by explicitly requiring all arguments to be
 passed in the stack, breaking interop with libraries written in other
 languages.
2023-09-28 15:02:35 +08:00
176f250bdb core: Fix missing conversion to i1 for IfExp 2023-09-28 10:06:40 +08:00
acdb1de6fe meta: Improve documentation for various modified classes 2023-09-25 15:42:07 +08:00
31dcd2dde9 core: Use i8 for boolean variable allocation
In LLVM, i1 represents a 1-byte integer with a single valid bit; The
rest of the 7 upper bits are undefined. This causes problems when
using these variables in memory operations (e.g. memcpy/memmove as
needed by List slicing and assignment).

We fix this by treating all local boolean variables as i8 so that they
are well-defined for memory operations. Function ABIs will continue to
use i1, as memory operations cannot be directly performed on function
arguments or return types, instead they are always converted back into
local boolean variables (which are i8s anyways).

Fixes #315.
2023-09-25 15:42:07 +08:00
fc93fc2f0e core: Move bitcode verification error message into panic message 2023-09-22 17:16:29 +08:00
dd42022633 core: Minor refactor allocate_list 2023-09-22 17:16:29 +08:00
6dfc43c8b0 core: Add name to build_gep_and_load 2023-09-22 17:16:29 +08:00
ab2360d7a0 core: Remove emit_llvm from CodeGenLLVMOptions
We instead output an LLVM bitcode file when the option is specified on
the command-line.
2023-09-22 17:16:29 +08:00
ee1ee4ab3b core: Replace deprecated _ExtInt with _BitInt 2023-09-22 17:16:29 +08:00
3e430b9b40 core: Fix missing changes for codegen tests
Apparently the changes were dropped after rebasing.
2023-09-22 17:16:21 +08:00
048fcb0a69 core: Switch to LLVM New Pass Manager 2023-09-18 11:35:15 +08:00
676d07657a core: Add target field to CodeGenLLVMOptions
For specifying the target machine options when optimizing and linking.

This field is currently unused but will be required in a future
commit.
2023-09-18 09:46:24 +08:00
2482a1ef9b core: Add CodeGenTargetMachineOptions
Needed in a future commit.
2023-09-18 09:41:49 +08:00
eb63f2ad48 meta: Update to Rust Edition 2021 2023-09-15 10:25:50 +08:00
3993a5cf3f core: Add LLVM options to WorkerRegistry 2023-09-12 10:57:05 +08:00
39724de598 core: Add CodeGenLLVMOptions
For specifying LLVM options during code generation.
2023-09-12 10:57:04 +08:00
4481d48709 core: Use C-style for loop logic for iterables
Index increment is now performed at the end of the loop body.
2023-09-06 20:09:38 +08:00
b4983526bd core: Remove redundant for.cond BB for iterable loops
Simplifies logic for creating basic blocks.
2023-09-06 20:09:37 +08:00
b4a9616648 core: Add assertion for when range has step of 0
Aligns with the behavior in Python.
2023-09-06 20:09:36 +08:00
e0de82993f core: Preserve value of variable shadowed by for loop
Previously, the final value of the target expression would be one after
the last element of the loop, which does not match Python's behavior.

This commit fixes this problem while also preserving the last assigned
value of the loop beyond the loop, matching Python's behavior.
2023-09-06 20:09:36 +08:00
6805253515 core: Use AST var name for IR name
Aids debugging IR.
2023-09-06 20:09:36 +08:00
19915bac79 core: Prepend statement type to basic block label names
Aids debugging IR.
2023-09-06 20:09:36 +08:00
6de0884dc1 core: Use anonymous name for variables if unspecified
The current default prefix is only derived from the instruction type,
which is not helpful during the comprehension of the IR. Changing to
anonymous names (e.g. %1) helps understand that the variable is only
needed as part of a larger (possibly named) expression.
2023-09-06 14:02:15 +08:00
f1b0e05b3d core: Rename IR variables
Because it is unclear which variables are expressions and
subexpressions, all variables which are previously anonymous are named
using (1) the control flow statement if available, (2) the possible name
of the variable as inferred from the variable name in Rust, and (3) the
"addr" prefix to indicate that the values are pointers. These three
strings are joint together using '.', forming "for.i.addr" for instance.
2023-09-06 14:02:15 +08:00
ff23968544 core: Add name parameter to gen_{var_alloc,store_target}
This allows variables in the IR to be assigned a custom name as opposed
to names with a default prefix.
2023-09-06 11:00:02 +08:00
d37287a33d Cargo: Update dependencies 2023-09-04 10:43:57 +08:00
aead36f0fd update dependencies 2023-03-08 15:19:09 +08:00
c1c45373a6 update dependencies 2023-01-12 19:31:03 +08:00
085c6ee738 update dependencies 2022-11-18 16:15:46 +08:00
f66ca02b2d update Rust dependencies 2022-08-05 16:58:57 +08:00
ebd25af38b nac3standalone: allow classes without explicit init (#221)
Reviewed-on: M-Labs/nac3#304
Co-authored-by: z78078 <cc@m-labs.hk>
Co-committed-by: z78078 <cc@m-labs.hk>
2022-07-07 10:36:25 +08:00
96b3a3bf5c work around random segmentation fault (#275)
Reviewed-on: M-Labs/nac3#302
Co-authored-by: z78078 <cc@m-labs.hk>
Co-committed-by: z78078 <cc@m-labs.hk>
2022-07-04 18:06:36 +08:00
a18d095245 nac3core: codegen fix call parameter type error 2022-07-04 14:39:33 +08:00
5d5e9a5e02 nac3core: fix codegen error of inheritance 2022-06-01 17:58:16 +08:00
c4ab2855e5 nac3core: pretty print codegen panic error 2022-05-30 04:09:21 +08:00
ffac37dc48 nac3core: fix exception type in primitive store 2022-05-29 19:14:00 +08:00
76473152e8 nac3core: fix llvm.expect intrinsic name
this might be one of the causes for the random segfault bug
2022-05-27 04:23:49 +08:00
096f4b03c0 nac3core: fix assignment 2022-05-14 02:30:08 +08:00
a022005183 nac3core: fix broken tests 2022-05-11 03:53:53 +08:00
325ba0a408 nac3core: add debug info 2022-05-11 03:53:53 +08:00
3f327113b2 update dependencies, use upstream inkwell 2022-04-27 15:41:46 +08:00
a321b13bec fix typos 2022-04-27 11:08:10 +08:00
48cb485b89 nac3core: show outer type info in type error messages
Reviewed-on: M-Labs/nac3#274
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2022-04-22 15:31:55 +08:00
85f21060e4 update to LLVM 14 2022-04-18 18:47:20 +08:00
1eac111d4c cleanup 2022-04-18 15:55:37 +08:00
711c3d3303 nac3core: support custom operators 2022-04-18 15:31:56 +08:00
wylited
35b6459c58 nac3core: replace paramter with parameter 2022-04-13 15:42:26 +08:00
e94b25f544 spelling (#264)
Co-authored-by: wylited <ds@m-labs.hk>
Co-committed-by: wylited <ds@m-labs.hk>
2022-04-13 11:32:31 +08:00
1e7abf0268 fix tests 2022-04-12 10:06:41 +08:00
f5a6d29106 update insta snapshots 2022-04-12 09:56:49 +08:00
ca07cb66cd format typevars consistently 2022-04-12 09:28:17 +08:00
722e3df086 nac3core, artiq: optimize kernel invariant for tuple index 2022-04-11 14:58:40 +08:00
ad9ad22cb8 nac3core: optimize unwrap KernelInvariant 2022-04-11 14:58:35 +08:00
f66f66b3a4 nac3core, artiq: remove unnecessary ptr casts 2022-04-10 01:28:46 +08:00
0e0871bc38 nac3core, artiq: to_basic_value_enum takes an argument indicating the expected type 2022-04-10 01:28:22 +08:00
26187bff0b nac3core: add missing bound check and negative index handling for list subscription assignment 2022-04-09 04:56:31 +08:00
c29cbf6ddd nac3core: add bound check for list slice 2022-04-05 18:21:46 +08:00
7443c5ea0f nac3core: add location information to codegen context 2022-04-05 18:21:46 +08:00
710904f975 nac3core: fix powi with negative integer power 2022-04-04 22:10:56 +08:00
2edeb31d21 nac3core: do not get llvm value too eagerly for kernel invariant 2022-03-31 10:28:16 +08:00
c3156afebd nac3core: fix broken tests 2022-03-30 04:05:47 +08:00
388c9b7241 nac3core: better check and err msg for default param 2022-03-30 04:05:47 +08:00
6ab73a223c nac3core/artiq: support default param of option type 2022-03-30 04:05:47 +08:00
a38cc04444 nac3core: assert statement 2022-03-29 06:56:40 +08:00
1f5826d352 fix ternary if (#250)
Use store and load to handle if expression as the blocks might be changed when generating sub-expressions.

Reviewed-on: M-Labs/nac3#250
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2022-03-29 06:54:00 +08:00
8d7e300a4a nac3core: do not use const struct for tuple 2022-03-27 10:13:17 +08:00
10d623e36f nac3core/artiq: fix tuple representation 2022-03-27 07:47:14 +08:00
1a82d296e7 nac3core/codegen: prevent users from modifying loop counter
Fixes #211
2022-03-26 20:58:37 +08:00
bf067e2481 nac3artiq: implement attribute writeback
We will only writeback attributes that are supported by the current RPC
implementation: primitives, tuple and lists of lists... of primitives.
2022-03-26 20:13:58 +08:00
26a4834254 fix warnings 2022-03-26 18:52:08 +08:00
80631fc92b Option type support (#224)
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2022-03-26 15:09:15 +08:00
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
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
be75fa7368 nac3core: fix assign to constant 2022-03-24 07:13:13 +08:00
d9be8d3978 nac3core/typecheck/unification_table: fixed snapshot restore bug
Closes 229
2022-03-23 00:25:10 +08:00
41d62f7325 nac3core/toplevel: fixed typevar substitution bug 2022-03-23 00:25:10 +08:00
9332d1643c irrt: normalize end-of-line characters. Closes #231 2022-03-22 16:04:48 +08:00
718b076e50 irrt: use __builtin_alloca 2022-03-22 15:41:25 +08:00
9d86b46e86 nac3core: add DEBUG_DUMP_IRRT 2022-03-22 15:39:15 +08:00
b97c016629 nac3core: fixed test breakage 2022-03-18 16:52:28 +08:00
35ac5cb6f6 nac3core: fixed typevar bug 2022-03-18 01:07:44 +08:00
0ca2797428 fix compilation warning 2022-03-17 21:31:45 +08:00
c5993c2a58 composer: improve class field typevar error message 2022-03-17 21:04:42 +08:00
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
e126fef012 nac3artiq: support more builtin errors 2022-03-16 23:42:08 +08:00
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
5006028e2d nac3core: abs builtin function 2022-03-08 23:23:36 +08:00
8241a29908 nac3core: max builtin function 2022-03-08 22:22:00 +08:00
adb5c69e67 nac3core: min builtin function 2022-03-08 21:59:37 +08:00
f7e62ab5b7 nac3ast/parser/core: use i128 for u64 constants 2022-03-08 18:21:14 +08:00
9f6c7b3359 nac3core: type conversion to/from uint 2022-03-08 13:42:45 +08:00
142e99a0f1 nac3core: fix broken tests 2022-03-08 13:34:08 +08:00
79c469301a basic unsigned integer support 2022-03-08 13:34:02 +08:00
8602852241 nac3core: use signed extension to convert i32 to i64 2022-03-06 04:49:02 +08:00
42fbe8e383 nac3core: fix err msg of too many args 2022-03-05 03:59:45 +08:00
63b0f29728 Fix broken tests 2022-03-05 00:27:51 +08:00
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
59ac5aae8a fix error message string (2) 2022-03-02 08:33:13 +08:00
da039e3acf fix error message string 2022-03-02 08:04:15 +08:00
323d77a455 nac3artiq: improve error message for out of range error 2022-02-28 23:09:14 +08:00
5d8e87d923 more readable type annotation error string 2022-02-28 16:24:03 +08:00
846d1726ef nac3core: fixed keyword arguments handling 2022-02-26 16:34:30 +08:00
0686e83f4c nac3core/typecheck: fixed incorrect rollback 2022-02-25 20:01:11 +08:00
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
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
5cd4fe6507 update tests 2022-02-23 11:50:03 +08:00
75fde1bbf7 update tests 2022-02-23 11:39:47 +08:00
17792b76b7 rename exception symbols 2022-02-23 11:04:35 +08:00
d3cb5d6e52 Fixed type error messages 2022-02-22 17:22:15 +08:00
3ad25c8f07 nac3core: sort error messages for determinism 2022-02-22 14:33:43 +08:00
ede3706ca8 type_inferencer: special case tuple index error message 2022-02-21 18:41:42 +08:00
f97f93d92c applied rustfmt and clippy auto fix 2022-02-21 18:27:46 +08:00
d9cb506f6a nac3core: refactored for better error messages 2022-02-21 18:24:19 +08:00
352831b2ca nac3core: removed legacy location definition 2022-02-13 22:39:24 +08:00
21d9182ba2 nac3core: disallow methods/fields in Exception subclass
Fixes #192
2022-02-13 21:45:22 +08:00
14d25b3b9d Fixed broken tests 2022-02-13 17:21:42 +08:00
b18626b149 Fix compilation and test failures 2022-02-12 22:50:32 +08:00
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
bf52e294ee nac3artiq: RPC support 2022-02-12 22:50:32 +08:00
e303248261 nac3core: exception type check and codegen 2022-02-12 22:50:32 +08:00
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
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
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
d6ab73afb0 nac3core: style 2022-02-07 02:18:56 +08:00
6f9f455152 nac3core: list slice irrt use one function to handle var size 2022-02-07 02:09:50 +08:00
e50f1017fa nac3core: irrt list of tuple use struct value representation 2022-02-07 02:09:50 +08:00
77608346b1 nac3core: handle tuple by value 2022-02-07 02:09:50 +08:00
1288624218 lock insta version (#179) 2022-01-31 15:18:49 +08:00
de065cfa14 update dependencies 2022-01-31 12:28:40 +08:00
ace0e2a2c6 nac3core: fix use of size_t in list comprehension, cleanup 2022-01-25 03:35:59 +08:00
fd4bf12808 fix grammar of some type error messages 2022-01-14 16:56:23 +08:00
ae8f82ccb0 nac3core: fix broken tests 2022-01-14 16:28:37 +08:00
4a1a4dc076 nac3core/artiq/standalone: symbol resolver return error msg for type error of host variables 2022-01-14 16:28:34 +08:00
eba9fc8a69 nac3core: add missing location for type inference 2022-01-14 03:05:11 +08:00
4976e89ae2 nac3core: list slice support 2022-01-13 16:53:32 +08:00
82509d60ec remove obvious comment 2022-01-13 12:31:28 +08:00
2579ecbd19 nac3core: irrt module get attribute id using name instead of hard code 2022-01-11 17:25:07 +08:00
44f4c4f028 nac3core: build script use Path::join 2022-01-09 12:06:45 +08:00
8ef9e74aaf move rustfmt.toml upper 2022-01-09 11:31:06 +08:00
b88f17ed42 switch to clang-unwrapped, build IRRT with wasm32 2022-01-09 10:56:28 +08:00
1ee857de6a nac3core: format, fix clippy warning 2022-01-09 01:12:18 +08:00
4a65d82db5 introduce IRRT, implement power
based on code by Yijia
M-Labs/nac3#160
2022-01-09 00:57:50 +08:00
7193e3f328 nac3core: codegen fix empty list llvm type 2021-12-30 05:09:21 +08:00
85e06d431a nac3core: improve some type annotation error messages (#87) 2021-12-28 10:49:14 +08:00
9b3b47ce50 fix broken tests 2021-12-28 01:38:16 +08:00
88f0da7bdd add file name to AST node location 2021-12-28 01:28:55 +08:00
1bd966965e fixed M-Labs/nac3#146 2021-12-27 22:56:50 +08:00
fa04768a77 redo "nac3core: fix #84"
This reverts commit 86005da8e1.
2021-12-27 22:56:26 +08:00
86005da8e1 Revert "nac3core: fix #84"
This reverts commit 0902d8adf4.
2021-12-26 08:35:27 +08:00
5aa6749241 remove num-traits 2021-12-26 00:32:08 +08:00
80d3ab1b0f remove bigints 2021-12-26 00:23:54 +08:00
d2a5cd6d57 update to LLVM 13 2021-12-25 22:49:47 +08:00
9e3f75255e update inkwell. Closes #67 2021-12-25 22:17:06 +08:00
0902d8adf4 nac3core: fix #84 2021-12-23 15:26:48 +08:00
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
0ff995722c Revert "nac3core: add missing expr concrete type check"
This reverts commit cb450372d6.
2021-12-20 18:13:45 +08:00
e2b44a066b return int32 in len(). Closes #141 2021-12-20 17:44:42 +08:00
cb450372d6 nac3core: add missing expr concrete type check 2021-12-19 18:01:49 +08:00
ff27a1697e nac3core: fix for loop type inference 2021-12-19 18:01:49 +08:00
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
b5637a04e9 nac3core: use official implementation for len 2021-12-13 10:44:33 +08:00
2c6601d97c nac3core: fix len on range with step of different sign 2021-12-13 10:44:33 +08:00
82359b81a2 nac3core: fix bool to int conversion 2021-12-13 04:13:43 +08:00
4d2fd9582a nac3core: fix broken tests 2021-12-09 01:37:05 +08:00
b7892ce952 nac3core: add len support for list and range 2021-12-09 01:37:00 +08:00
01d3249646 nac3core: add missing llvm range type 2021-12-09 01:16:05 +08:00
3f73896477 remove a small amount of LLVM bloat
Also avoids libffi.dll dependency on Windows.
2021-12-08 17:41:34 +08:00
4526c28edb Merge branch 'windows' 2021-12-02 22:26:55 +08:00
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
1c31aa6e8e consistent naming 2021-12-02 10:45:46 +08:00
aa2d79fea6 Merge branch 'master' into built_in_floor_ceil 2021-12-02 01:08:55 +08:00
1e6848ab92 nac3core: distinguish i64 and i32 in bool conversion 2021-12-02 01:02:42 +08:00
142f82f987 remove debug prints 2021-12-01 22:48:06 +08:00
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
fa2fe8ed5d nac3core: add ceil and floor 2021-12-01 03:23:58 +08:00
7ede4f15b6 nac3core: move builtin definitions to another file 2021-12-01 02:52:00 +08:00
0fe346106d nac3core: fix converting int to bool (#119) 2021-11-30 03:02:26 +08:00
4b17511b4a Merge branch 'master' into KernelInvariant 2021-11-27 21:29:27 +08:00
7ee82de312 nac3core: fixed weird type inference error 2021-11-27 20:27:46 +08:00
de8fc264d7 fix unsupported default parameter error message 2021-11-23 15:34:44 +08:00
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
49476d06e1 nac3core: clearer comments 2021-11-22 15:06:16 +08:00
664e02cec4 nac3core: fix clippy warning 2021-11-22 14:55:39 +08:00
01b51b62ee nac3core: composer better error msg in for uninit field 2021-11-21 06:11:55 +08:00
d336200bf4 nac3core: fix broken tests due to the fix of rigid typevar handling 2021-11-21 06:11:55 +08:00
a50df6560e nac3core: fix handling on rigid typevar 2021-11-21 06:11:55 +08:00
a9635f0979 nac3core: top level use codegen official get_subst_key 2021-11-21 06:11:55 +08:00
c2706fa720 nac3core: fix polymorphic class method partial instantiation 2021-11-21 06:11:55 +08:00
f5ec103c82 nac3artiq: kernel invariant support 2021-11-20 21:15:15 +08:00
ba08deada6 nac3core: refactor codegen 2021-11-20 19:50:25 +08:00
8ab3ee9cce nac3core: AugAssign support (#82) 2021-11-13 12:24:22 +08:00
96607432c1 nac3core: use Python 3.9 list/tuple annotations in test
Closes #85
2021-11-11 20:05:08 +08:00
ffa89e9308 fix clippy warnings 2021-11-06 23:00:18 +08:00
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
99b29d8ded Merge branch 'master' into with_nac3comment 2021-11-05 20:46:29 +08:00
3db95b120b nac3core: implements bool conversion function 2021-11-05 20:34:34 +08:00
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
b239806558 nac3core: adapt to ast change due to comment support 2021-11-04 15:02:51 +08:00
bf7e2c295a integrate nac3parser 2021-11-03 17:11:00 +08:00
e89bc93b5f ignore expressions in class definition body (#26) 2021-11-02 23:30:12 +08:00
47f563908a basic string support (#30) 2021-11-02 23:22:49 +08:00
0e914ab7e9 composer: add range keyword 2021-11-02 18:56:14 +08:00
613020a717 test: add missing id_to_name entry 2021-11-02 18:34:48 +08:00
624dfe8cd1 upgrade to LLVM 12 2021-11-02 14:00:20 +08:00
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
558c3f03ef nac3core/codegen: list comprehension support 2021-10-24 16:53:43 +08:00
45673b0ecc nac3core/codegen: cleanup 2021-10-24 16:53:43 +08:00
181607008d nac3core/codegen: supports list iter 2021-10-24 14:39:50 +08:00
fb92b6d364 nac3core: supports range iterator 2021-10-23 23:53:36 +08:00
2f6ba69770 nac3core/typecheck: check if value is none 2021-10-23 21:31:14 +08:00
cc83bbc63a nac3core/codegen: fix broken test 2021-10-17 13:07:45 +08:00
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
9850cbe313 nac3core/codegen: optimize for every function
This speeds up compilation and reduces memory usage.
2021-10-17 12:56:11 +08:00
1f5bea2448 nac3core/codegen: refactor according to #23 2021-10-16 22:17:36 +08:00
c4259d14d1 fixed some clippy warnings 2021-10-16 18:08:13 +08:00
26076c37ba nac3core/typecheck: supports recursive type inference 2021-10-16 15:56:49 +08:00
fd0b11087e nac3core: use round instead of rint. Closes #61 2021-10-11 08:18:52 +08:00
77542170fd nac3core: fixes #60 2021-10-10 15:01:06 +08:00
a3ce5be10b nac3core: fixes #32 and #57 2021-10-09 16:20:49 +08:00
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
93270d7227 use forked version of rustpython
to implement Clone for AST nodes
2021-08-25 15:28:32 +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