
* 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
22 lines
676 B
Plaintext
22 lines
676 B
Plaintext
main contract C =
|
|
record account = { name : string,
|
|
balance : int }
|
|
|
|
let one = 1
|
|
let opt = Some(5)
|
|
let acc = { name = "str", balance = 100000 }
|
|
let mpp = {["foo"] = 19, ["bar"] = 42}
|
|
|
|
let c01 = [x | x <- [1,2,3,4,5]]
|
|
let c02 = [x + k | x <- [1,2,3,4,5], let k = x*x]
|
|
let c03 = [x + y | x <- [1,2,3,4,5], let k = x*x, if (k > 5), y <- [k, k+1, k+2]]
|
|
let c04 = if (one > 2) 3 else 4
|
|
let c05 = switch (opt)
|
|
Some(x) => x
|
|
None => 2
|
|
let c07 = acc{ balance = one }
|
|
let c08 = mpp["foo"]
|
|
let c09 = mpp["non" = 10]
|
|
let c10 = mpp{["foo"] = 20}
|
|
let c11 = (x) => x + 1
|