Gaith Hallak 7b6eba5319
Introduce contract-level compile-time constants (#432)
* Allow compile-time constants as toplevel declarations

* Remove the test that fails on toplevel consts

* Warn when shadowing a constant

* Allow records to be used as compile time constants

* Allow data constructors in compile-time constants

* Disable some warnings for toplevel constants

Since variables and functions cannot be used in the definition of
a compile time constants, the following warnings are not going to be
reported:

* Used/Unused variable
* Used/Unused function

* Do not reverse constants declarations

* Add tests for all valid expressions

* Add test for accessing const from namespace

* Revert "Do not reverse constants declarations"

This reverts commit c4647fadacd134866e4be9c2ab4b0d54870a35fd.

* Add test for assigining constant to a constant

* Show empty map or record error when assigning to const

* Report all invalid constant expressions before fail

* Allow accessing records fields in toplevel consts

* Undo a mistake

* Add test for warning on const shadowing

* Show error message when using pattern matching for consts

* Remove unused error

* Ban toplevel constants in contract interfaces

* Varibles rename

* Change the error message for invalid_const_id

* Make constants public in namespaces and private in contracts

* Add a warning about unused constants in contracts

* Use ban_when_const for function applications

* Test for qualified access of constants in functions

* Add failing tests

* Add test for the unused const warning

* Update CHANGELOG

* Update all_syntax test file

* Treat expr and type inside bound as bound

* Allow typed ids to be used for constants

* List valid exprs in the error message for invalid exprs

* Fix tests

* Update the docs about constants

* Update syntax docs

* Check validity of const exprs in a separate functions

* Call both resolve_const and resolve_fun from resolve_var
2023-04-12 14:20:41 +03:00
..
2020-02-03 12:52:00 +01:00
2019-06-14 10:27:07 +02:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2019-09-12 21:17:01 +02:00
2019-06-28 09:42:28 +02:00
2019-02-08 14:16:06 +01:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2023-01-12 16:23:36 +03:00
2019-06-28 09:42:28 +02:00
2019-02-08 14:16:06 +01:00
2019-02-08 14:16:06 +01:00
2019-09-03 16:51:04 +02:00
2019-07-22 13:56:45 +02:00
2019-07-22 13:56:45 +02:00
2019-06-28 09:42:28 +02:00
2019-02-08 14:16:06 +01:00
2019-01-25 16:09:31 +01:00
2019-07-22 13:56:45 +02:00
2019-06-28 09:42:28 +02:00
2020-01-15 09:41:03 +01:00
2019-08-05 14:33:53 +02:00
2022-06-17 13:09:07 +04:00
2022-05-10 15:33:59 +02:00
2020-02-24 15:35:54 +01:00
2019-06-28 09:42:28 +02:00
2019-09-03 16:51:04 +02:00
2019-09-03 16:51:04 +02:00