David Mak
457d3b6cd7
core: Refactor generic constants to `Literal`
...
Better matches the syntax of `typing.Literal`.
2023-12-16 18:40:48 +08:00
David Mak
5f692debd8
core: Add PrimitiveStore into Unifier
...
This will be used during unification between a const generic variable
and a `Literal`.
2023-12-16 18:40:48 +08:00
David Mak
b47ac1b89b
core: Minor formatting cleanup
2023-12-15 17:46:44 +08:00
David Mak
a19f1065e3
meta: Refactor to use more let-else bindings
2023-12-12 16:31:14 +08:00
David Mak
32746c37be
core: Refactor to return errors by HashSet
2023-12-12 15:41:59 +08:00
David Mak
02933753ca
core: Apply clippy pedantic changes
2023-12-11 15:16:23 +08:00
David Mak
d304afd333
meta: Apply clippy suggested changes
2023-12-11 15:16:23 +08:00
David Mak
4dc5dbb856
meta: Replace equality assertion with assert_eq
...
Emits a more useful assertion message.
2023-12-11 15:16:23 +08:00
David Mak
fd9f66b8d9
meta: Remove redundant casts and brackets
2023-12-11 15:16:23 +08:00
David Mak
5182453bd9
meta: Remove redundant path prefixes
2023-12-11 15:16:23 +08:00
David Mak
031e660f18
core: Initial implementation for const generics
2023-12-08 18:02:11 +08:00
David Mak
b6dfcfcc38
core: Move some SymbolValue functions to symbol_resolver.rs
2023-12-08 18:00:51 +08:00
David Mak
68b97347b1
core: Infer builtins name list using builtin declaration list
2023-12-08 17:29:34 +08:00
David Mak
875d534de4
ast: Use `{filename}:{row}:{col}` for location output
2023-12-08 15:48:54 +08:00
David Mak
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
David Mak
0af1e37e99
core: Prefix all NumPy/SciPy functions with np_/sp_spec
2023-11-23 13:35:23 +08:00
David Mak
10538b5296
core: Update insta snapshots
2023-11-09 13:00:27 +08:00
David Mak
08a5050f9a
core: Implement non-trivial builtin functions using IRRT
2023-11-06 12:57:23 +08:00
David Mak
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
David Mak
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
David Mak
2e055e8ab1
core: Replace rint implementation with LLVM intrinsic
2023-11-04 13:35:53 +08:00
David Mak
c6b9aefe00
core: Fix int32-to-uint64 conversion
...
This conversion should be sign-extended.
2023-11-03 16:24:26 +08:00
David Mak
8ad09748d0
core: Fix conversion from float to unsigned types
...
These conversions also need to wraparound.
2023-11-03 16:24:26 +08:00
David Mak
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
David Mak
ff1fed112c
core: Rework gamma/gammaln to match SciPy behavior
...
Matches behavior for infinities and NaNs.
2023-11-01 18:03:29 +08:00
David Mak
36a6a7b8cd
core: Replace TopLevelDef comments with documentation
2023-11-01 18:03:29 +08:00
David Mak
2b635a0b97
core: Implement numpy and scipy functions
2023-11-01 18:03:29 +08:00
David Mak
60ad100fbb
core: Implement and expose {isinf,isnan}
2023-11-01 18:03:29 +08:00
David Mak
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
David Mak
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
David Mak
95810d4229
core: Remove {ceil64,floor64,round,round64}
...
These are not present in NumPy or Artiq.
2023-11-01 18:03:29 +08:00
David Mak
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
David Mak
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
David Mak
6dfc43c8b0
core: Add name to build_gep_and_load
2023-09-22 17:16:29 +08:00
z78078
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
ychenfo
ffac37dc48
nac3core: fix exception type in primitive store
2022-05-29 19:14:00 +08:00
Sebastien Bourdeauducq
a321b13bec
fix typos
2022-04-27 11:08:10 +08:00
wylited
35b6459c58
nac3core: replace paramter with parameter
2022-04-13 15:42:26 +08:00
wylited
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
Sebastien Bourdeauducq
f5a6d29106
update insta snapshots
2022-04-12 09:56:49 +08:00
Sebastien Bourdeauducq
ca07cb66cd
format typevars consistently
2022-04-12 09:28:17 +08:00
ychenfo
0e0871bc38
nac3core, artiq: to_basic_value_enum takes an argument indicating the expected type
2022-04-10 01:28:22 +08:00
ychenfo
c29cbf6ddd
nac3core: add bound check for list slice
2022-04-05 18:21:46 +08:00
ychenfo
c3156afebd
nac3core: fix broken tests
2022-03-30 04:05:47 +08:00
ychenfo
388c9b7241
nac3core: better check and err msg for default param
2022-03-30 04:05:47 +08:00
ychenfo
6ab73a223c
nac3core/artiq: support default param of option type
2022-03-30 04:05:47 +08:00
ychenfo
26a4834254
fix warnings
2022-03-26 18:52:08 +08:00
ychenfo
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
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
pca006132
41d62f7325
nac3core/toplevel: fixed typevar substitution bug
2022-03-23 00:25:10 +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
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
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
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
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
Sebastien Bourdeauducq
17792b76b7
rename exception symbols
2022-02-23 11:04:35 +08:00
pca006132
3ad25c8f07
nac3core: sort error messages for determinism
2022-02-22 14:33:43 +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
b18626b149
Fix compilation and test failures
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
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
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
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
4976e89ae2
nac3core: list slice support
2022-01-13 16:53:32 +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
Sebastien Bourdeauducq
80d3ab1b0f
remove bigints
2021-12-26 00:23:54 +08:00
Sebastien Bourdeauducq
9e3f75255e
update inkwell. Closes #67
2021-12-25 22:17:06 +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
e2b44a066b
return int32 in len(). Closes #141
2021-12-20 17:44:42 +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
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
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
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
ba08deada6
nac3core: refactor codegen
2021-11-20 19:50:25 +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
pca006132
fb92b6d364
nac3core: supports range iterator
2021-10-23 23:53:36 +08:00
pca006132
c4259d14d1
fixed some clippy warnings
2021-10-16 18:08:13 +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
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
105d605e6d
nac3core: fix clippy warnings
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
a508baae20
added syscall annotation
...
and temporarily disabled the keyword check for top-level functions
2021-09-22 17:58:46 +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
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