diff --git a/gitlab-pages/docs/advanced/entrypoints-contracts.md b/gitlab-pages/docs/advanced/entrypoints-contracts.md
index 15fa7cb75..429962a33 100644
--- a/gitlab-pages/docs/advanced/entrypoints-contracts.md
+++ b/gitlab-pages/docs/advanced/entrypoints-contracts.md
@@ -1,24 +1,24 @@
---
id: entrypoints-contracts
-title: Access function and Entrypoints
+title: Main function and Entrypoints
---
## Access Functions
A LIGO contract is made of a series of constant and function
declarations. Only functions having a special type can be called when
-the contract is activated: we called them *access functions*. An
-access function takes two parameters, the *contract parameter* and the
+the contract is activated: we call them *main functions*. A main
+function takes two parameters, the *contract parameter* and the
*on-chain storage*, and returns a pair made of a *list of operations*
and a (new) storage.
When the contract is originated, the initial value of the storage is
-provided. When an access function is later called, only the parameter
-is provided, but the type of an access function contains both.
+provided. When a main function is later called, only the parameter is
+provided, but the type of a main function contains both.
The type of the contract parameter and the storage are up to the
contract designer, but the type for list operations is not. The return
-type of an access function is as follows, assuming that the type
+type of a main function is as follows, assuming that the type
`storage` has been defined elsewhere. (Note that you can use any type
with any name for the storage.)
@@ -42,13 +42,10 @@ type return = (list (operation), storage);
```
-The contract storage can only be modified by activating an access
-function. It is important to understand what that means. What it does
-*not* mean is that some global variable holding the storage is
-modified by the access function. Instead, what it *does* mean is that,
-given the state of the storage *on-chain*, an access function
-specifies how to create another state for it, depending on a
-parameter.
+The contract storage can only be modified by activating a main
+function: given the state of the storage *on-chain*, a main function
+specifies how to create another state for it, depending on the
+contract's parameter.
Here is an example where the storage is a single natural number that
is updated by the parameter.
@@ -89,17 +86,18 @@ let main = ((action, store): (parameter, storage)) : return =>
## Entrypoints
-In LIGO, the design pattern is to have *one* access function that
-dispatches the control flow according to its parameter. Those
-functions called for those actions are called *entrypoints*.
+In LIGO, the design pattern is to have *one* main function called
+`main`, that dispatches the control flow according to its
+parameter. Those functions called for those actions are called
+*entrypoints*.
As an analogy, in the C programming language, the `main` function is
-the unique access function and any function called from it would be an
+the unique main function and any function called from it would be an
entrypoint.
The parameter of the contract is then a variant type, and, depending
on the constructors of that type, different functions in the contract
-are called. In other terms, the unique access function dispatches the
+are called. In other terms, the unique main function dispatches the
control flow depending on a *pattern matching* on the contract
parameter.
@@ -128,7 +126,7 @@ function entry_A (const n : nat; const store : storage) : return is
function entry_B (const s : string; const store : storage) : return is
((nil : list (operation)), store with record [name = s])
-function access (const action : parameter; const store : storage): return is
+function main (const action : parameter; const store : storage): return is
case action of
Action_A (n) -> entry_A (n, store)
| Action_B (s) -> entry_B (s, store)
@@ -154,7 +152,7 @@ let entry_A (n, store : nat * storage) : return =
let entry_B (s, store : string * storage) : return =
([] : operation list), {store with name = s}
-let access (action, store: parameter * storage) : return =
+let main (action, store: parameter * storage) : return =
match action with
Action_A n -> entry_A (n, store)
| Action_B s -> entry_B (s, store)
@@ -179,7 +177,7 @@ let entry_A = ((n, store): (nat, storage)) : return =>
let entry_B = ((s, store): (string, storage)) : return =>
(([] : list (operation)), {...store, name : s});
-let access = ((action, store): (parameter, storage)) : return =>
+let main = ((action, store): (parameter, storage)) : return =>
switch (action) {
| Action_A (n) => entry_A ((n, store))
| Action_B (s) => entry_B ((s, store))
@@ -196,8 +194,8 @@ how those built-ins can be utilized.
### Accepting or Declining Tokens in a Smart Contract
-This example shows how `amount` and `failwith` can be used to decline
-any transaction that sends more tez than `0mutez`, that is, no
+This example shows how `Tezos.amount` and `failwith` can be used to
+decline any transaction that sends more tez than `0tez`, that is, no
incoming tokens are accepted.
@@ -208,11 +206,13 @@ type storage is unit
type return is list (operation) * storage
function deny (const action : parameter; const store : storage) : return is
- if amount > 0mutez then
+ if Tezos.amount > 0tez then
(failwith ("This contract does not accept tokens.") : return)
else ((nil : list (operation)), store)
```
+> Note that `amount` is *deprecated*.
+
```cameligo group=c
type parameter = unit
@@ -220,11 +220,13 @@ type storage = unit
type return = operation list * storage
let deny (action, store : parameter * storage) : return =
- if amount > 0mutez then
- (failwith "This contract does not accept tokens.": return)
+ if Tezos.amount > 0tez then
+ (failwith "This contract does not accept tokens." : return)
else (([] : operation list), store)
```
+> Note that `amount` is *deprecated*.
+
```reasonligo group=c
type parameter = unit;
@@ -232,46 +234,56 @@ type storage = unit;
type return = (list (operation), storage);
let deny = ((action, store): (parameter, storage)) : return => {
- if (amount > 0mutez) {
+ if (Tezos.amount > 0tez) {
(failwith("This contract does not accept tokens."): return); }
else { (([] : list (operation)), store); };
};
```
+> Note that `amount` is *deprecated*.
+
### Access Control
-This example shows how `sender` or `source` can be used to deny access to an entrypoint.
+This example shows how `Tezos.source` can be used to deny access to an
+entrypoint.
```pascaligo group=c
const owner : address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address);
-function filter (const action : parameter; const store : storage) : return is
- if source =/= owner then (failwith ("Access denied.") : return)
- else ((nil : list(operation)), store)
+function main (const action : parameter; const store : storage) : return is
+ if Tezos.source =/= owner then (failwith ("Access denied.") : return)
+ else ((nil : list (operation)), store)
```
+> Note that `source` is *deprecated*.
+
```cameligo group=c
let owner : address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address)
-let filter (action, store: parameter * storage) : return =
- if source <> owner then (failwith "Access denied." : return)
+let main (action, store: parameter * storage) : return =
+ if Tezos.source <> owner then (failwith "Access denied." : return)
else (([] : operation list), store)
```
+> Note that `source` is *deprecated*.
+
```reasonligo group=c
let owner : address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address);
-let access = ((action, store): (parameter, storage)) : storage => {
- if (source != owner) { (failwith ("Access denied.") : return); }
+let main = ((action, store) : (parameter, storage)) : storage => {
+ if (Tezos.source != owner) { (failwith ("Access denied.") : return); }
else { (([] : list (operation)), store); };
};
```
+
+> Note that `source` is *deprecated*.
+
### Inter-Contract Invocations
@@ -329,11 +341,15 @@ const dest : address = ("KT19wgxcuXG9VH4Af5Tpm1vqEKdaMFpznXT3" : address)
function proxy (const action : parameter; const store : storage): return is
block {
- const counter : contract (parameter) = get_contract (dest);
+ const counter : contract (parameter) =
+ case (Tezos.get_contract_opt (dest) : option (contract (parameter))) of
+ Some (contract) -> contract
+ | None -> (failwith ("Contract not found.") : contract (parameter))
+ end;
(* Reuse the parameter in the subsequent
transaction or use another one, `mock_param`. *)
const mock_param : parameter = Increment (5n);
- const op : operation = transaction (action, 0mutez, counter);
+ const op : operation = Tezos.transaction (action, 0tez, counter);
const ops : list (operation) = list [op]
} with (ops, store)
```
@@ -365,14 +381,20 @@ type return = operation list * storage
let dest : address = ("KT19wgxcuXG9VH4Af5Tpm1vqEKdaMFpznXT3" : address)
let proxy (action, store : parameter * storage) : return =
- let counter : parameter contract = Operation.get_contract dest in
+ let counter : parameter contract =
+ match (Tezos.get_contract_opt (dest) : parameter contract option) with
+ Some contract -> contract
+ | None -> (failwith "Contract not found." : parameter contract) in
(* Reuse the parameter in the subsequent
transaction or use another one, `mock_param`. *)
let mock_param : parameter = Increment (5n) in
- let op : operation = Operation.transaction action 0mutez counter
+ let op : operation = Tezos.transaction action 0tez counter
in [op], store
```
+> Note that `Operation.get_contract` and `Operation.transaction` are
+> *deprecated*.
+
```reasonligo skip
// counter.religo
@@ -400,13 +422,20 @@ type return = (list (operation), storage);
let dest : address = ("KT19wgxcuXG9VH4Af5Tpm1vqEKdaMFpznXT3" : address);
let proxy = ((action, store): (parameter, storage)) : return => {
- let counter : contract (parameter) = Operation.get_contract (dest);
+ let counter : contract (parameter) =
+ switch (Tezos.get_contract_opt (dest) : option (contract (parameter))) {
+ | Some (contract) => contract;
+ | None => (failwith ("Contract not found.") : contract (parameter));
+ };
(* Reuse the parameter in the subsequent
transaction or use another one, `mock_param`. *)
let mock_param : parameter = Increment (5n);
- let op : operation = Operation.transaction (action, 0mutez, counter);
+ let op : operation = Tezos.transaction (action, 0tez, counter);
([op], store)
};
```
+> Note that `Operation.get_contract` and `Operation.transaction` are
+> *deprecated*.
+
diff --git a/gitlab-pages/docs/advanced/first-contract.md b/gitlab-pages/docs/advanced/first-contract.md
index 7da4e8cf7..eb63a25c4 100644
--- a/gitlab-pages/docs/advanced/first-contract.md
+++ b/gitlab-pages/docs/advanced/first-contract.md
@@ -11,13 +11,14 @@ We will be implementing a counter contract.
## Dry-running a Contract
Testing a contract can be quite easy if we utilize LIGO's built-in dry
-run feature. Dry-run works by simulating the access function
-execution, as if it were deployed on a real chain. You need to provide
-the following:
+run feature. Dry-run works by simulating the main function execution,
+as if it were deployed on a real chain. You need to provide the
+following:
- `file` - contract to run
- `entrypoint` - name of the function to execute
-- `parameter` - parameter passed to the access function (in a theoretical invocation operation)
+- `parameter` - parameter passed to the main function (in a
+ theoretical invocation operation)
- `storage` - a mock storage value, as if it were stored on a real chain
Here is a full example:
@@ -33,67 +34,86 @@ ligo dry-run src/basic.ligo main Unit Unit
```
-Output of the `dry-run` is the return value of our access function, we
-can see the operations emited - in our case an empty list, and the new
-storage value being returned - which in our case is still `Unit`.
+Output of the `dry-run` is the return value of our main function, we
+can see the operations emitted (in our case an empty list, and the new
+storage value being returned) which in our case is still `Unit`.
## A Counter Contract
Our counter contract will store a single `int` as it's storage, and
will accept an `action` variant in order to re-route our single `main`
-access function to two entrypoints for `addition` and `subtraction`.
+function to two entrypoints for `add` (addition) and `sub`
+(subtraction).
```
-type action is
+type parameter is
Increment of int
| Decrement of int
-function main (const p : action ; const s : int) : (list(operation) * int) is
+type storage is int
+
+type return is list (operation) * storage
+
+function add (const n : int; const store : storage) : storage is store + n
+function sub (const n : int; const store : storage) : storage is store - n
+
+function main (const action : parameter; const store : storage) : return is
((nil : list(operation)),
- (case p of
- | Increment (n) -> s + n
- | Decrement (n) -> s - n
- end))
+ case action of
+ Increment (n) -> add (n, store)
+ | Decrement (n) -> sub (n, store)
+ end)
```
```cameligo
-type action =
-| Increment of int
+type parameter =
+ Increment of int
| Decrement of int
-let main (p, s: action * int) : operation list * int =
- let result =
- match p with
- | Increment n -> s + n
- | Decrement n -> s - n
- in
- (([]: operation list), result)
+type storage = int
+
+type return = (operation) list * storage
+
+let add (n, store : int * storage) : storage = store + n
+let sub (n, store : int * storage) : storage = store - n
+
+let main (action, store : parameter * storage) : operation list * storage =
+ (([]: operation list),
+ (match action with
+ Increment n -> add (n, store)
+ | Decrement n -> sub (n, store)))
```
```reasonligo
-type action =
-| Increment(int)
-| Decrement(int);
+type parameter =
+ Increment (int)
+| Decrement (int)
+;
-let main = (p_s: (action, int)) : (list(operation), int) => {
- let p, s = p_s;
- let result =
- switch (p) {
- | Increment(n) => s + n
- | Decrement(n) => s - n
- };
- (([]: list(operation)), result);
-};
+type storage = int;
+
+type return = (list (operation), storage);
+
+let add = ((n, store) : (int, storage)) : storage => store + n;
+let sub = ((n, store) : (int, storage)) : storage => store - n;
+
+let main = ((action, store) : (parameter, storage)) : return =>
+ (([]: list (operation)),
+ (switch (action) {
+ | Increment (n) => add ((n, store))
+ | Decrement (n) => sub ((n, store))
+ }));
```
-To dry-run the counter contract, we will use the `main` entrypoint, provide a variant parameter of `Increment(5)` and an initial storage value of `5`.
-
+To dry-run the counter contract, we will provide the `main` function
+with a variant parameter of value `Increment (5)` and an initial
+storage value of `5`.
@@ -130,39 +150,30 @@ Command above will output the following Michelson code:
{ parameter (or (int %decrement) (int %increment)) ;
storage int ;
code { DUP ;
- CAR ;
- DIP { DUP } ;
- SWAP ;
CDR ;
DIP { DUP } ;
SWAP ;
+ CAR ;
IF_LEFT
{ DUP ;
- DIP 2 { DUP } ;
- DIG 2 ;
- DIP { DUP } ;
+ DIP { DIP { DUP } ; SWAP } ;
+ PAIR ;
+ DUP ;
+ CDR ;
+ DIP { DUP ; CAR } ;
SUB ;
- SWAP ;
- DROP ;
- SWAP ;
- DROP }
+ DIP { DROP 2 } }
{ DUP ;
- DIP 2 { DUP } ;
- DIG 2 ;
- DIP { DUP } ;
+ DIP { DIP { DUP } ; SWAP } ;
+ PAIR ;
+ DUP ;
+ CDR ;
+ DIP { DUP ; CAR } ;
ADD ;
- SWAP ;
- DROP ;
- SWAP ;
- DROP } ;
+ DIP { DROP 2 } } ;
NIL operation ;
PAIR ;
- SWAP ;
- DROP ;
- SWAP ;
- DROP ;
- SWAP ;
- DROP } }
+ DIP { DROP 2 } } }
```
@@ -179,12 +190,15 @@ ligo compile-storage src/counter.ligo main 5
```
-
-In our case the LIGO storage value maps 1:1 to its Michelson representation, however this will not be the case once the parameter is of a more complex data type, like a record.
+In our case the LIGO storage value maps 1:1 to its Michelson
+representation, however this will not be the case once the parameter
+is of a more complex data type, like a record.
## Invoking a LIGO contract
-Same rules apply for parameters, as apply for translating LIGO storage values to Michelson. We will need to use `compile-parameter` to compile our `action` variant into Michelson, here's how:
+Same rules apply for parameters, as apply for translating LIGO storage
+values to Michelson. We will need to use `compile-parameter` to
+compile our `action` variant into Michelson, here's how:
@@ -194,6 +208,5 @@ ligo compile-parameter src/counter.ligo main 'Increment(5)'
```
-
Now we can use `(Right 5)` which is a Michelson value, to invoke our
-contract - e.g. via `tezos-client`
+contract - e.g., via `tezos-client`
diff --git a/gitlab-pages/docs/advanced/src/counter.ligo b/gitlab-pages/docs/advanced/src/counter.ligo
new file mode 100644
index 000000000..301b662c4
--- /dev/null
+++ b/gitlab-pages/docs/advanced/src/counter.ligo
@@ -0,0 +1,17 @@
+type parameter is
+ Increment of int
+| Decrement of int
+
+type storage is int
+
+type return is list (operation) * storage
+
+function add (const n : int; const store : storage) : storage is store + n
+function sub (const n : int; const store : storage) : storage is store - n
+
+function main (const action : parameter; const store : storage) : return is
+ ((nil : list(operation)),
+ case action of
+ Increment (n) -> add (n, store)
+ | Decrement (n) -> sub (n, store)
+ end)
diff --git a/gitlab-pages/docs/advanced/src/functions.ligo b/gitlab-pages/docs/advanced/src/functions.ligo
new file mode 100644
index 000000000..6e0f83bf5
--- /dev/null
+++ b/gitlab-pages/docs/advanced/src/functions.ligo
@@ -0,0 +1,9 @@
+function multiply (const a : int; const b : int) : int is
+ block {
+ const result : int = a * b
+ } with result
+
+function add (const a : int; const b : int) : int is a + b
+
+function main (const p : unit; const s : unit) : list (operation) * unit is
+ ((nil : list (operation)), s)
diff --git a/gitlab-pages/docs/advanced/src/multiple-entrypoints.ligo b/gitlab-pages/docs/advanced/src/multiple-entrypoints.ligo
new file mode 100644
index 000000000..301b662c4
--- /dev/null
+++ b/gitlab-pages/docs/advanced/src/multiple-entrypoints.ligo
@@ -0,0 +1,17 @@
+type parameter is
+ Increment of int
+| Decrement of int
+
+type storage is int
+
+type return is list (operation) * storage
+
+function add (const n : int; const store : storage) : storage is store + n
+function sub (const n : int; const store : storage) : storage is store - n
+
+function main (const action : parameter; const store : storage) : return is
+ ((nil : list(operation)),
+ case action of
+ Increment (n) -> add (n, store)
+ | Decrement (n) -> sub (n, store)
+ end)
diff --git a/gitlab-pages/docs/advanced/src/variables.ligo b/gitlab-pages/docs/advanced/src/variables.ligo
new file mode 100644
index 000000000..e8e40f1f7
--- /dev/null
+++ b/gitlab-pages/docs/advanced/src/variables.ligo
@@ -0,0 +1,5 @@
+const four : int = 4
+const name : string = "John Doe"
+
+function main (const p : unit; const s : unit) : list (operation) * unit is
+ ((nil : list (operation)), s)
diff --git a/gitlab-pages/docs/advanced/timestamps-addresses.md b/gitlab-pages/docs/advanced/timestamps-addresses.md
index fb2154bc8..b3a4d2391 100644
--- a/gitlab-pages/docs/advanced/timestamps-addresses.md
+++ b/gitlab-pages/docs/advanced/timestamps-addresses.md
@@ -18,23 +18,29 @@ current timestamp value.
```pascaligo group=a
-const today : timestamp = now
+const today : timestamp = Tezos.now
```
+> Note that `now` is *deprecated*.
+
```cameligo group=a
-let today : timestamp = Current.time
+let today : timestamp = Tezos.now
```
+> Note that `Current.time` is *deprecated*.
+
```reasonligo group=a
-let today : timestamp = Current.time;
+let today : timestamp = Tezos.now;
```
+> Note that `Current.time` is *deprecated*.
+
-> When running code, the LIGO CLI option
-> `--predecessor-timestamp` allows you to control what `now` returns.
+> When running code, the LIGO CLI option `--predecessor-timestamp`
+> allows you to control what `Tezos.now` returns.
### Timestamp Arithmetics
@@ -46,31 +52,37 @@ constraints on your smart contracts. Consider the following scenarios.
```pascaligo group=b
-const today : timestamp = now
+const today : timestamp = Tezos.now
const one_day : int = 86400
const in_24_hrs : timestamp = today + one_day
const some_date : timestamp = ("2000-01-01T10:10:10Z" : timestamp)
const one_day_later : timestamp = some_date + one_day
```
+> Note that `now` is *deprecated*.
+
```cameligo group=b
-let today : timestamp = Current.time
+let today : timestamp = Tezos.now
let one_day : int = 86400
let in_24_hrs : timestamp = today + one_day
let some_date : timestamp = ("2000-01-01t10:10:10Z" : timestamp)
let one_day_later : timestamp = some_date + one_day
```
+> Note that `Current.time` is *deprecated*.
+
```reasonligo group=b
-let today : timestamp = Current.time;
+let today : timestamp = Tezos.now;
let one_day : int = 86400;
let in_24_hrs : timestamp = today + one_day;
let some_date : timestamp = ("2000-01-01t10:10:10Z" : timestamp);
let one_day_later : timestamp = some_date + one_day;
```
+> Note that `Current.time` is *deprecated*.
+
#### 24 hours Ago
@@ -78,25 +90,32 @@ let one_day_later : timestamp = some_date + one_day;
```pascaligo group=c
-const today : timestamp = now
+const today : timestamp = Tezos.now
const one_day : int = 86400
const in_24_hrs : timestamp = today - one_day
```
+> Note that `now` is *deprecated*.
+
```cameligo group=c
-let today : timestamp = Current.time
+let today : timestamp = Tezos.now
let one_day : int = 86400
let in_24_hrs : timestamp = today - one_day
```
+> Note that `Current.time` is *deprecated*.
+
```reasonligo group=c
-let today : timestamp = Current.time;
+let today : timestamp = Tezos.now;
let one_day : int = 86400;
let in_24_hrs : timestamp = today - one_day;
```
+> Note that `Current.time` is *deprecated*.
+
+
### Comparing Timestamps
@@ -107,19 +126,26 @@ applying to numbers.
```pascaligo group=c
-const not_tommorow : bool = (now = in_24_hrs)
+const not_tommorow : bool = (Tezos.now = in_24_hrs)
```
+> Note that `now` is *deprecated*.
+
```cameligo group=c
-let not_tomorrow : bool = (Current.time = in_24_hrs)
+let not_tomorrow : bool = (Tezos.now = in_24_hrs)
```
+> Note that `Current.time` is *deprecated*.
+
```reasonligo group=c
-let not_tomorrow : bool = (Current.time == in_24_hrs);
+let not_tomorrow : bool = (Tezos.now == in_24_hrs);
```
+> Note that `Current.time` is *deprecated*.
+
+
## Addresses
diff --git a/gitlab-pages/docs/api/cheat-sheet.md b/gitlab-pages/docs/api/cheat-sheet.md
index 8f8baebdb..9e7020177 100644
--- a/gitlab-pages/docs/api/cheat-sheet.md
+++ b/gitlab-pages/docs/api/cheat-sheet.md
@@ -4,7 +4,7 @@ title: Cheat Sheet
---
-
@@ -30,7 +30,7 @@ Note that this table is not compiled before production and currently needs to be
|Includes|```#include "library.ligo"```|
|Functions (short form)|
function add (const a : int ; const b : int) : int is
block { skip } with a + b
|
|Functions (long form)|
function add (const a : int ; const b : int) : int is
block {
const result: int = a + b;
} with result
|
-| If Statement |
if age < 16
then fail("Too young to drive.");
else const new_id: int = prev_id + 1;
|
+| If Statement |
if age < 16
then failwith ("Too young to drive.");
else const new_id: int = prev_id + 1;
|
|Options|
type middleName is option(string);
const middleName : middleName = Some("Foo");
const middleName : middleName = None;
|
|Assignment| ```const age: int = 5;```|
|Assignment on an existing variable
*⚠️ This feature is not supported at the top-level scope, you can use it e.g. within functions. Works for Records and Maps as well.*| ```age := 18;```, ```p.age := 21``` |
@@ -41,7 +41,7 @@ Note that this table is not compiled before production and currently needs to be
|Maps|
type prices is map(nat, tez);
const prices : prices = map
10n -> 60mutez;
50n -> 30mutez;
100n -> 10mutez;
end
const price: option(tez) = prices[50n];
prices[200n] := 5mutez;
|
|Contracts & Accounts|
const destinationAddress : address = "tz1...";
const contract : contract(unit) = get_contract(destinationAddress);
|
|Transactions|
const payment : operation = transaction(unit, amount, receiver);
|
-|Exception/Failure|`failwith("Your descriptive error message for the user goes here.")`|
+|Exception/Failure|`failwith ("Your descriptive error message for the user goes here.")`|
@@ -63,7 +63,7 @@ Note that this table is not compiled before production and currently needs to be
|Types|`type age = int`, `type name = string` |
|Includes|```#include "library.mligo"```|
|Functions |
let add (a : int) (b : int) : int = a + b
|
-| If Statement |
let new_id: int = if age < 16
then failwith("Too young to drive.")
else prev_id + 1
|
+| If Statement |
let new_id: int = if age < 16
then failwith ("Too young to drive.")
else prev_id + 1
|
|Options|
type middle_name = string option
let middle_name : middle_name = Some "Foo"
let middle_name : middle_name = None
|
|Variable Binding | ```let age: int = 5```|
|Type Annotations| ```("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address)```|
@@ -71,9 +71,9 @@ Note that this table is not compiled before production and currently needs to be
|Variant *(pattern)* matching|
let a: action = Increment 5
match a with
| Increment n -> n + 1
| Decrement n -> n - 1
|
|Records|
type person = {
age: int ;
name: string ;
}
let john : person = {
age = 18;
name = "John Doe";
}
let name: string = john.name
|
|Maps|
type prices = (nat, tez) map
let prices : prices = Map.literal [
(10n, 60mutez);
(50n, 30mutez);
(100n, 10mutez)
]
let price: tez option = Map.find_opt 50n prices
let prices: prices = Map.update 200n (Some 5mutez) prices
|
-|Contracts & Accounts|
let destination_address : address = "tz1..."
let contract : unit contract =
Operation.get_contract destination_address
|
-|Transactions|
let payment : operation =
Operation.transaction unit amount receiver
|
-|Exception/Failure|`failwith("Your descriptive error message for the user goes here.")`|
+|Contracts & Accounts|
let destination_address : address = "tz1..."
let contract : unit contract =
Tezos.get_contract destination_address
|
+|Transactions|
let payment : operation =
Tezos.transaction unit amount receiver
|
+|Exception/Failure|`failwith ("Your descriptive error message for the user goes here.")`|
@@ -95,7 +95,7 @@ Note that this table is not compiled before production and currently needs to be
|Types|`type age = int;`, `type name = string;` |
|Includes|```#include "library.mligo"```|
|Functions |
let add = (a: int, b: int) : int => a + b;
|
-| If Statement |
let new_id: int = if (age < 16) {
failwith("Too young to drive.");
} else { prev_id + 1; }
|
+| If Statement |
let new_id: int = if (age < 16) {
failwith ("Too young to drive.");
} else { prev_id + 1; }
|
|Options|
type middle_name = option(string);
let middle_name : middle_name = Some("Foo");
let middle_name : middle_name = None;
|
|Variable Binding | ```let age: int = 5;```|
|Type Annotations| ```("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address)```|
@@ -103,9 +103,9 @@ Note that this table is not compiled before production and currently needs to be
|Variant *(pattern)* matching|
let a: action = Increment(5);
switch(a) {
| Increment(n) => n + 1
| Decrement(n) => n - 1;
}
|
|Records|
type person = {
age: int,
name: string
}
let john : person = {
age: 18,
name: "John Doe"
};
let name: string = john.name;
|
|Maps|
type prices = map(nat, tez);
let prices : prices = Map.literal([
(10n, 60mutez),
(50n, 30mutez),
(100n, 10mutez)
]);
let price: option(tez) = Map.find_opt(50n, prices);
let prices: prices = Map.update(200n, Some (5mutez), prices);
|
-|Contracts & Accounts|
let destination_address : address = "tz1...";
let contract : contract(unit) =
Operation.get_contract(destination_address);
|
-|Transactions|
let payment : operation =
Operation.transaction (unit, amount, receiver);
|
-|Exception/Failure|`failwith("Your descriptive error message for the user goes here.");`|
+|Contracts & Accounts|
let destination_address : address = "tz1...";
let contract : contract(unit) =
Tezos.get_contract(destination_address);
|
+|Transactions|
let payment : operation =
Tezos.transaction (unit, amount, receiver);
|
+|Exception/Failure|`failwith ("Your descriptive error message for the user goes here.");`|
diff --git a/gitlab-pages/docs/language-basics/boolean-if-else.md b/gitlab-pages/docs/language-basics/boolean-if-else.md
index 8a872d777..e9b38291a 100644
--- a/gitlab-pages/docs/language-basics/boolean-if-else.md
+++ b/gitlab-pages/docs/language-basics/boolean-if-else.md
@@ -11,8 +11,8 @@ value:
```pascaligo group=a
-const a : bool = True // Notice the capital letter
-const b : bool = False // Same.
+const a : bool = True // Also: true
+const b : bool = False // Also: false
```
```cameligo group=a
@@ -137,7 +137,7 @@ state.
type magnitude is Small | Large // See variant types.
function compare (const n : nat) : magnitude is
- if n < 10n then Small (Unit) else Large (Unit) // Unit is needed for now.
+ if n < 10n then Small else Large
```
You can run the `compare` function defined above using the LIGO compiler
@@ -145,7 +145,7 @@ like this:
```shell
ligo run-function
gitlab-pages/docs/language-basics/boolean-if-else/cond.ligo compare 21n'
-# Outputs: Large (Unit)
+# Outputs: Large(Unit)
```
When the branches of the conditional are not a single expression, as
@@ -161,7 +161,7 @@ else skip;
```
As an exception to the rule, the blocks in a conditional branch do not
-need to be introduced by the keywor `block`, so, we could have written
+need to be introduced by the keyword `block`, so we could have written
instead:
```pascaligo skip
if x < y then {
@@ -187,9 +187,15 @@ gitlab-pages/docs/language-basics/boolean-if-else/cond.mligo compare 21n'
# Outputs: Large
```
+> Notice that, as in OCaml, in CameLIGO, if a conditional has a branch
+> `else ()`, that branch can be omitted. The resulting so-called
+> *dangling else* problem is parsed by associating any `else` to the
+> closest previous `then`.
+
+
```reasonligo group=e
-type magnitude = | Small | Large; // See variant types.
+type magnitude = Small | Large; // See variant types.
let compare = (n : nat) : magnitude =>
if (n < 10n) { Small; } else { Large; };
diff --git a/gitlab-pages/docs/language-basics/functions.md b/gitlab-pages/docs/language-basics/functions.md
index d0344a754..b4c81beb1 100644
--- a/gitlab-pages/docs/language-basics/functions.md
+++ b/gitlab-pages/docs/language-basics/functions.md
@@ -4,7 +4,15 @@ title: Functions
---
LIGO functions are the basic building block of contracts. For example,
-entrypoints are functions.
+entrypoints are functions and each smart contract needs a main
+function that dispatches control to the entrypoints (it is not already
+the default entrypoint).
+
+The semantics of function calls in LIGO is that of a *copy of the
+arguments but also of the environment*. In the case of PascaLIGO, this
+means that any mutation (assignment) on variables outside the scope of
+the function will be lost when the function returns, just as the
+mutations inside the functions will be.
## Declaring Functions
@@ -230,10 +238,14 @@ function to all its elements.
```pascaligo group=c
function incr_map (const l : list (int)) : list (int) is
- list_map (function (const i : int) : int is i + 1, l)
+ List.map (function (const i : int) : int is i + 1, l)
```
-You can call the function `incr_map` defined above using the LIGO compiler
-like so:
+
+> Note that `list_map` is *deprecated*.
+
+You can call the function `incr_map` defined above using the LIGO
+compiler like so:
+
```shell
ligo run-function
gitlab-pages/docs/language-basics/src/functions/incr_map.ligo incr_map
diff --git a/gitlab-pages/docs/language-basics/loops.md b/gitlab-pages/docs/language-basics/loops.md
index bb31e124f..ffe27c17e 100644
--- a/gitlab-pages/docs/language-basics/loops.md
+++ b/gitlab-pages/docs/language-basics/loops.md
@@ -79,17 +79,22 @@ let gcd (x,y : nat * nat) : nat =
```
To ease the writing and reading of the iterated functions (here,
-`iter`), two predefined functions are provided: `continue` and `stop`:
+`iter`), two predefined functions are provided: `Loop.resume` and
+`Loop.stop`:
```cameligo group=a
let iter (x,y : nat * nat) : bool * (nat * nat) =
- if y = 0n then stop (x,y) else continue (y, x mod y)
+ if y = 0n then Loop.stop (x,y) else Loop.resume (y, x mod y)
let gcd (x,y : nat * nat) : nat =
let x,y = if x < y then y,x else x,y in
let x,y = Loop.fold_while iter (x,y)
in x
```
+
+> Note that `stop` and `continue` (now `Loop.resume`) are
+> *deprecated*.
+
You can call the function `gcd` defined above using the LIGO compiler
like so:
```shell
@@ -131,11 +136,12 @@ let gcd = ((x,y) : (nat, nat)) : nat => {
```
To ease the writing and reading of the iterated functions (here,
-`iter`), two predefined functions are provided: `continue` and `stop`:
+`iter`), two predefined functions are provided: `Loop.resume` and
+`Loop.stop`:
```reasonligo group=b
let iter = ((x,y) : (nat, nat)) : (bool, (nat, nat)) =>
- if (y == 0n) { stop ((x,y)); } else { continue ((y, x mod y)); };
+ if (y == 0n) { Loop.stop ((x,y)); } else { Loop.resume ((y, x mod y)); };
let gcd = ((x,y) : (nat, nat)) : nat => {
let (x,y) = if (x < y) { (y,x); } else { (x,y); };
@@ -143,6 +149,10 @@ let gcd = ((x,y) : (nat, nat)) : nat => {
x
};
```
+
+> Note that `stop` and `continue` (now `Loop.resume`) are
+> *deprecated*.
+
## Bounded Loops
diff --git a/gitlab-pages/docs/language-basics/maps-records.md b/gitlab-pages/docs/language-basics/maps-records.md
index d691d588e..c9837fb26 100644
--- a/gitlab-pages/docs/language-basics/maps-records.md
+++ b/gitlab-pages/docs/language-basics/maps-records.md
@@ -19,7 +19,7 @@ Let us first consider and example of record type declaration.
-```pascaligo group=a
+```pascaligo group=records1
type user is
record [
id : nat;
@@ -29,7 +29,7 @@ type user is
```
-```cameligo group=a
+```cameligo group=records1
type user = {
id : nat;
is_admin : bool;
@@ -38,7 +38,7 @@ type user = {
```
-```reasonligo group=a
+```reasonligo group=records1
type user = {
id : nat,
is_admin : bool,
@@ -51,7 +51,7 @@ And here is how a record value is defined:
-```pascaligo group=a
+```pascaligo group=records1
const alice : user =
record [
id = 1n;
@@ -61,7 +61,7 @@ const alice : user =
```
-```cameligo group=a
+```cameligo group=records1
let alice : user = {
id = 1n;
is_admin = true;
@@ -70,7 +70,7 @@ let alice : user = {
```
-```reasonligo group=a
+```reasonligo group=records1
let alice : user = {
id : 1n,
is_admin : true,
@@ -86,17 +86,17 @@ operator, like so:
-```pascaligo group=a
+```pascaligo group=records1
const alice_admin : bool = alice.is_admin
```
-```cameligo group=a
+```cameligo group=records1
let alice_admin : bool = alice.is_admin
```
-```reasonligo group=a
+```reasonligo group=records1
let alice_admin : bool = alice.is_admin;
```
@@ -123,7 +123,7 @@ In PascaLIGO, the shape of that expression is `
with
`. The record variable is the record to update and the
record value is the update itself.
-```pascaligo group=b
+```pascaligo group=records2
type point is record [x : int; y : int; z : int]
type vector is record [dx : int; dy : int]
@@ -151,7 +151,7 @@ the blockless function.
The syntax for the functional updates of record in CameLIGO follows
that of OCaml:
-```cameligo group=b
+```cameligo group=records2
type point = {x : int; y : int; z : int}
type vector = {dx : int; dy : int}
@@ -179,7 +179,7 @@ xy_translate "({x=2;y=3;z=1}, {dx=3;dy=4})"
The syntax for the functional updates of record in ReasonLIGO follows
that of ReasonML:
-```reasonligo group=b
+```reasonligo group=records2
type point = {x : int, y : int, z : int};
type vector = {dx : int, dy : int};
@@ -216,7 +216,7 @@ name "patch").
Let us consider defining a function that translates three-dimensional
points on a plane.
-```pascaligo group=c
+```pascaligo group=records3
type point is record [x : int; y : int; z : int]
type vector is record [dx : int; dy : int]
@@ -242,7 +242,7 @@ Of course, we can actually translate the point with only one `patch`,
as the previous example was meant to show that, after the first patch,
the value of `p` indeed changed. So, a shorter version would be
-```pascaligo group=d
+```pascaligo group=records4
type point is record [x : int; y : int; z : int]
type vector is record [dx : int; dy : int]
@@ -267,7 +267,7 @@ Record patches can actually be simulated with functional updates. All
we have to do is *declare a new record value with the same name as the
one we want to update* and use a functional update, like so:
-```pascaligo group=e
+```pascaligo group=records5
type point is record [x : int; y : int; z : int]
type vector is record [dx : int; dy : int]
@@ -298,71 +298,98 @@ values of the same type. The former are called *key* and the latter
is that the type of the keys must be *comparable*, in the Michelson
sense.
+### Declaring a Map
+
Here is how a custom map from addresses to a pair of integers is
defined.
+
-```pascaligo group=f
+```pascaligo group=maps
type move is int * int
type register is map (address, move)
```
-```cameligo group=f
+```cameligo group=maps
type move = int * int
type register = (address, move) map
```
-```reasonligo group=f
+```reasonligo group=maps
type move = (int, int);
type register = map (address, move);
```
-And here is how a map value is defined:
+### Creating an Empty Map
+
+Here is how to create an empty map.
+
+
+
+
+```pascaligo group=maps
+const empty : register = map []
+```
+
+
+```cameligo group=maps
+let empty : register = Map.empty
+```
+
+
+```reasonligo group=maps
+let empty : register = Map.empty
+```
+
+
+### Creating a Non-empty Map
+
+And here is how to create a non-empty map value:
-```pascaligo group=f
+```pascaligo group=maps
const moves : register =
map [
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address) -> (1,2);
("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) -> (0,3)]
```
-> Notice the `->` between the key and its value and `;` to separate
-> individual map entries. The annotated value `("" :
-> address)` means that we cast a string into an address. Also, `map`
-> is a keyword.
+Notice the `->` between the key and its value and `;` to separate
+individual map entries. The annotated value `("" :
+address)` means that we cast a string into an address. Also, `map` is
+a keyword.
-```cameligo group=f
+```cameligo group=maps
let moves : register =
Map.literal [
(("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address), (1,2));
(("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address), (0,3))]
```
-> The `Map.literal` predefined function builds a map from a list of
-> key-value pair tuples, `(, )`. Note also the `;` to
-> separate individual map entries. `("": address)`
-> means that we type-cast a string into an address.
+The `Map.literal` predefined function builds a map from a list of
+key-value pair tuples, `(, )`. Note also the `;` to
+separate individual map entries. `("": address)` means
+that we type-cast a string into an address. -->
-```reasonligo group=f
+```reasonligo group=maps
let moves : register =
Map.literal ([
("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address, (1,2)),
("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address, (0,3))]);
```
-> The `Map.literal` predefined function builds a map from a list of
-> key-value pair tuples, `(, )`. Note also the `;` to
-> separate individual map entries. `("": address)`
-> means that we type-cast a string into an address.
+The `Map.literal` predefined function builds a map from a list of
+key-value pair tuples, `(, )`. Note also the `;` to
+separate individual map entries. `("": address)` means
+that we type-cast a string into an address. -->
@@ -375,19 +402,19 @@ In PascaLIGO, we can use the postfix `[]` operator to read the `move`
value associated to a given key (`address` here) in the register. Here
is an example:
-```pascaligo group=f
+```pascaligo group=maps
const my_balance : option (move) =
moves [("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address)]
```
-```cameligo group=f
+```cameligo group=maps
let my_balance : move option =
Map.find_opt ("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address) moves
```
-```reasonligo group=f
+```reasonligo group=maps
let my_balance : option (move) =
Map.find_opt (("tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN" : address), moves);
```
@@ -400,7 +427,7 @@ the reader to account for a missing key in the map. This requires
-```pascaligo group=f
+```pascaligo group=maps
function force_access (const key : address; const moves : register) : move is
case moves[key] of
Some (move) -> move
@@ -409,7 +436,7 @@ function force_access (const key : address; const moves : register) : move is
```
-```cameligo group=f
+```cameligo group=maps
let force_access (key, moves : address * register) : move =
match Map.find_opt key moves with
Some move -> move
@@ -417,7 +444,7 @@ let force_access (key, moves : address * register) : move =
```
-```reasonligo group=f
+```reasonligo group=maps
let force_access = ((key, moves) : (address, register)) : move => {
switch (Map.find_opt (key, moves)) {
| Some (move) => move
@@ -431,8 +458,7 @@ let force_access = ((key, moves) : (address, register)) : move => {
### Updating a Map
Given a map, we may want to add a new binding, remove one, or modify
-one by changing the value associated to an already existing key. We
-may even want to retain the key but not the associated value. All
+one by changing the value associated to an already existing key. All
those operations are called *updates*.
@@ -443,7 +469,7 @@ The values of a PascaLIGO map can be updated using the usual
assignment syntax `
-## Analyzing the current contract
+## Analyzing the Current Contract
### **`taco-shop.ligo`**
```pascaligo group=a
-type taco_supply is record
- current_stock : nat;
- max_price : tez;
-end
-type taco_shop_storage is map(nat, taco_supply);
+type taco_supply is record [
+ current_stock : nat;
+ max_price : tez
+]
-function buy_taco (const taco_kind_index: nat ; var taco_shop_storage : taco_shop_storage) :
- (list(operation) * taco_shop_storage) is
- begin
- // Retrieve the taco_kind from the contract's storage
- const taco_kind : taco_supply = get_force(taco_kind_index, taco_shop_storage);
-
- const current_purchase_price : tez = taco_kind.max_price / taco_kind.current_stock;
+type taco_shop_storage is map (nat, taco_supply)
+
+type return is list (operation) * taco_shop_storage
+
+function buy_taco (const taco_kind_index : nat ; var taco_shop_storage : taco_shop_storage) : return is
+ block {
+ // Retrieve the taco_kind from the contract's storage or fail
+ const taco_kind : taco_supply =
+ case taco_shop_storage[taco_kind_index] of
+ Some (kind) -> kind
+ | None -> (failwith ("Unknown kind of taco.") : taco_supply)
+ end;
+
+ const current_purchase_price : tez =
+ taco_kind.max_price / taco_kind.current_stock;
if amount =/= current_purchase_price then
- // we won't sell tacos if the amount isn't correct
- failwith("Sorry, the taco you're trying to purchase has a different price");
- else
- // Decrease the stock by 1n, because we've just sold one
- taco_kind.current_stock := abs(taco_kind.current_stock - 1n);
+ // We won't sell tacos if the amount is not correct
+ failwith ("Sorry, the taco you are trying to purchase has a different price");
+ else skip;
+
+ // Decrease the stock by 1n, because we have just sold one
+ taco_kind.current_stock := abs (taco_kind.current_stock - 1n);
// Update the storage with the refreshed taco_kind
- taco_shop_storage[taco_kind_index] := taco_kind;
- end with ((nil : list(operation)), taco_shop_storage)
+ taco_shop_storage[taco_kind_index] := taco_kind
+ } with ((nil : list (operation)), taco_shop_storage)
```
-### Purchase price formula
-Pedro's Taco Shop contract currently enables customers to buy tacos, at a computed price based on a simple formula.
+### Purchase Price Formula
+
+Pedro's Taco Shop contract currently enables customers to buy tacos,
+at a price based on a simple formula.
```pascaligo skip
-const current_purchase_price : tez = taco_kind.max_price / taco_kind.current_stock;
+const current_purchase_price : tez =
+ taco_kind.max_price / taco_kind.current_stock
```
-### Replacing *spendable* smart contracts
-However, due to the [recent protocol upgrade](http://tezos.gitlab.io/mainnet/protocols/004_Pt24m4xi.html) of the Tezos mainnet, Pedro can't access the tokens stored in his Shop's contract directly. This was previously possible via `spendable` smart contracts, which are no longer available in the new protocol. We will have to implement a solution to access tokens from the contract programatically.
+### Replacing *spendable* Smart Contracts
+
+However, due to the
+[recent protocol upgrade](http://tezos.gitlab.io/mainnet/protocols/004_Pt24m4xi.html)
+of the Tezos `mainnet`, Pedro cannot access the tokens stored in his
+shop's contract directly. This was previously possible via *spendable
+smart contracts*, which are no longer available in the new
+protocol. We will have to implement a solution to access tokens from
+the contract programatically.
---
-## Designing a payout scheme
+## Designing a Payout Scheme
-Pedro is a standalone bussines owner, and in our case, he doesn't have to split profits / earnings of the taco shop with anyone. So for the sake of simplicity, we'll payout all the earned XTZ directly to Pedro right after a succesful taco purchase.
+Pedro is a standalone bussines owner, and in our case, he does not
+have to split profits and earnings of the taco shop with anyone. So
+for the sake of simplicity, we will payout all the earned XTZ directly
+to Pedro right after a succesful purchase.
-This means that after all the *purchase conditions* of our contract are met - e.g. correct amount is sent to the contract - we'll not only decrease the supply of the individual purchased *taco kind*, but we'll also transfer this amount in a *subsequent transaction* to Pedro's personal address.
+This means that after all the *purchase conditions* of our contract
+are met, e.g., the correct amount is sent to the contract, we will not
+only decrease the supply of the individual purchased *taco kind*, but
+we will also transfer this amount in a *subsequent transaction* to
+Pedro's personal address.
-## Forging a payout transaction
+## Forging a Payout Transaction
-### Defining the recipient
-In order to send tokens, we will need a receiver address - which in our case will be Pedro's personal account. Additionally we'll wrap the given address as a *`contract(unit)`* - which represents either a contract with no parameters, or an implicit account.
+### Defining the Recipient
+
+In order to send tokens, we will need a receiver address, which, in
+our case, will be Pedro's personal account. Additionally we will wrap
+the given address as a *`contract (unit)`*, which represents either a
+contract with no parameters, or an implicit account.
```pascaligo group=ex1
const ownerAddress : address = ("tz1TGu6TN5GSez2ndXXeDX6LgUDvLzPLqgYV" : address);
-const receiver : contract(unit) = get_contract(ownerAddress);
+const receiver : contract (unit) = get_contract (ownerAddress);
```
-> Would you like to learn more about addresses, contracts and operations in LIGO? Check out the [LIGO cheat sheet](api/cheat-sheet.md)
+> Would you like to learn more about addresses, contracts and
+> operations in LIGO? Check out the
+> [LIGO cheat sheet](api/cheat-sheet.md)
-### Adding the transaction to the list of output operations
-Now we can transfer the `amount` received by `buy_taco` to Pedro's `ownerAddress`. We will do so by forging a `transaction(unit, amount, receiver)` within a list of operations returned at the end of our contract.
+### Adding the Transaction to the List of Output Operations
+Now we can transfer the amount received by `buy_taco` to Pedro's
+`ownerAddress`. We will do so by forging a `transaction (unit, amount,
+receiver)` within a list of operations returned at the end of our
+contract.
```pascaligo group=ex1
-const payoutOperation : operation = transaction(unit, amount, receiver) ;
-const operations : list(operation) = list
- payoutOperation
-end;
+const payoutOperation : operation = transaction (unit, amount, receiver) ;
+const operations : list (operation) = list [payoutOperation];
```
---
-## Finalizing the contract
+## Finalizing the Contract
### **`taco-shop.ligo`**
```pascaligo group=b
-type taco_supply is record
- current_stock : nat;
- max_price : tez;
-end
-type taco_shop_storage is map(nat, taco_supply);
+type taco_supply is record [
+ current_stock : nat;
+ max_price : tez
+]
-const ownerAddress: address = ("tz1TGu6TN5GSez2ndXXeDX6LgUDvLzPLqgYV" : address);
+type taco_shop_storage is map (nat, taco_supply)
-function buy_taco (const taco_kind_index: nat ; var taco_shop_storage : taco_shop_storage) : (list(operation) * taco_shop_storage) is
- begin
- // Retrieve the taco_kind from the contract's storage
- const taco_kind : taco_supply = get_force(taco_kind_index, taco_shop_storage);
-
- const current_purchase_price : tez = taco_kind.max_price / taco_kind.current_stock;
+type return is list (operation) * taco_shop_storage
+
+const ownerAddress : address =
+ ("tz1TGu6TN5GSez2ndXXeDX6LgUDvLzPLqgYV" : address)
+
+function buy_taco (const taco_kind_index : nat ; var taco_shop_storage : taco_shop_storage) : return is
+ block {
+ // Retrieve the taco_kind from the contract's storage or fail
+ const taco_kind : taco_supply =
+ case taco_shop_storage[taco_kind_index] of
+ Some (kind) -> kind
+ | None -> (failwith ("Unknown kind of taco.") : taco_supply)
+ end;
+
+ const current_purchase_price : tez =
+ taco_kind.max_price / taco_kind.current_stock;
if amount =/= current_purchase_price then
- // we won't sell tacos if the amount isn't correct
- failwith("Sorry, the taco you're trying to purchase has a different price");
- else
- // Decrease the stock by 1n, because we've just sold one
- taco_kind.current_stock := abs(taco_kind.current_stock - 1n);
+ // We won't sell tacos if the amount is not correct
+ failwith ("Sorry, the taco you are trying to purchase has a different price");
+ else skip;
+
+ // Decrease the stock by 1n, because we have just sold one
+ taco_kind.current_stock := abs (taco_kind.current_stock - 1n);
// Update the storage with the refreshed taco_kind
taco_shop_storage[taco_kind_index] := taco_kind;
- const receiver : contract(unit) = get_contract(ownerAddress);
- const payoutOperation : operation = transaction(unit, amount, receiver);
- const operations : list(operation) = list
- payoutOperation
- end;
-
- end with (operations, taco_shop_storage)
+ const receiver : contract(unit) = get_contract (ownerAddress);
+ const payoutOperation : operation = transaction (unit, amount, receiver);
+ const operations : list(operation) = list [payoutOperation]
+ } with ((nil : list (operation)), taco_shop_storage)
```
+### Dry-run the Contract
-### Dry-run the contract
-
-To confirm that our contract is valid, we can dry run it. As a result we see a *new operation* in the list of returned operations to be executed subsequently.
+To confirm that our contract is valid, we can dry-run it. As a result,
+we see a *new operation* in the list of returned operations to be
+executed subsequently.
```pascaligo skip
-ligo dry-run taco-shop.ligo --syntax pascaligo --amount 1 buy_taco 1n "map
- 1n -> record
- current_stock = 50n;
- max_price = 50000000mutez;
- end;
- 2n -> record
- current_stock = 20n;
- max_price = 75000000mutez;
- end;
-end"
+ligo dry-run taco-shop.ligo --syntax pascaligo --amount 1 buy_taco 1n "map [
+ 1n -> record [
+ current_stock = 50n;
+ max_price = 50tez
+ ];
+ 2n -> record [
+ current_stock = 20n;
+ max_price = 75tez
+ ];
+]"
```
@@ -150,32 +196,34 @@ end"
-**Done! Our tokens are no longer locked in the contract, and instead they are sent to Pedro's personal account/wallet.**
+**Done! Our tokens are no longer locked in the contract, and instead
+ they are sent to Pedro's personal account/wallet.**
---
-## 👼 Bonus: donating part of the profits
+## 👼 Bonus: Donating Part of the Profits
-Because Pedro is a member of the (STA) Specialty Taco Association, he has decided to donate **10%** of the earnings to the STA. We'll just add a `donationAddress` to the contract, and compute a 10% donation sum from each taco purchase.
+Because Pedro is a member of the Specialty Taco Association (STA), he
+has decided to donate **10%** of the earnings to the STA. We will just
+add a `donationAddress` to the contract, and compute a 10% donation
+sum from each taco purchase.
```pascaligo group=bonus
-const ownerAddress: address = ("tz1TGu6TN5GSez2ndXXeDX6LgUDvLzPLqgYV" : address);
-const donationAddress: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address);
-```
+const ownerAddress : address = ("tz1TGu6TN5GSez2ndXXeDX6LgUDvLzPLqgYV" : address);
+const donationAddress : address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx" : address);
-```pascaligo group=bonus
-const receiver : contract(unit) = get_contract(ownerAddress);
-const donationReceiver : contract(unit) = get_contract(donationAddress);
+const receiver : contract (unit) = get_contract (ownerAddress);
+const donationReceiver : contract(unit) = get_contract (donationAddress);
-const donationAmount: tez = amount / 10n;
+const donationAmount : tez = amount / 10n;
-const operations : list(operation) = list
+const operations : list (operation) = list [
// Pedro will get 90% of the amount
- transaction(unit, amount - donationAmount, receiver);
- transaction(unit, donationAmount, donationReceiver);
-end;
+ transaction (unit, amount - donationAmount, receiver);
+ transaction (unit, donationAmount, donationReceiver)
+];
```
This will result into two operations being subsequently executed on the blockchain:
- Donation transfer (10%)
-- Pedro's profits (90%)
\ No newline at end of file
+- Pedro's profits (90%)
diff --git a/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.ligo b/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.ligo
index b51460bde..8871a9c87 100644
--- a/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.ligo
+++ b/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.ligo
@@ -1,23 +1,33 @@
-type taco_supply is record
+type taco_supply is
+ record [
current_stock : nat;
- max_price : tez;
-end
-type taco_shop_storage is map(nat, taco_supply);
+ max_price : tez
+ ]
-function buy_taco (const taco_kind_index: nat ; var taco_shop_storage : taco_shop_storage) : (list(operation) * taco_shop_storage) is
- begin
- // Retrieve the taco_kind from the contract's storage
- const taco_kind : taco_supply = get_force(taco_kind_index, taco_shop_storage);
-
- const current_purchase_price : tez = taco_kind.max_price / taco_kind.current_stock;
+type taco_shop_storage is map (nat, taco_supply)
+
+type return is list (operation) * taco_shop_storage
+
+function buy_taco (const taco_kind_index : nat ; var taco_shop_storage : taco_shop_storage) : return is
+ block {
+ // Retrieve the taco_kind from the contract's storage or fail
+ const taco_kind : taco_supply =
+ case taco_shop_storage[taco_kind_index] of
+ Some (kind) -> kind
+ | None -> (failwith ("Unknown kind of taco.") : taco_supply)
+ end;
+
+ const current_purchase_price : tez =
+ taco_kind.max_price / taco_kind.current_stock;
if amount =/= current_purchase_price then
- // we won't sell tacos if the amount isn't correct
- fail("Sorry, the taco you're trying to purchase has a different price");
- else
- // Decrease the stock by 1n, because we've just sold one
- taco_kind.current_stock := abs(taco_kind.current_stock - 1n);
+ // We won't sell tacos if the amount is not correct
+ failwith ("Sorry, the taco you are trying to purchase has a different price");
+ else skip;
+
+ // Decrease the stock by 1n, because we have just sold one
+ taco_kind.current_stock := abs (taco_kind.current_stock - 1n);
// Update the storage with the refreshed taco_kind
- taco_shop_storage[taco_kind_index] := taco_kind;
- end with ((nil : list(operation)), taco_shop_storage)
\ No newline at end of file
+ taco_shop_storage[taco_kind_index] := taco_kind
+ } with ((nil : list (operation)), taco_shop_storage)
diff --git a/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.md b/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.md
index 9d2bf5ab2..48dfa29a5 100644
--- a/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.md
+++ b/gitlab-pages/docs/tutorials/get-started/tezos-taco-shop-smart-contract.md
@@ -1,13 +1,18 @@
---
id: tezos-taco-shop-smart-contract
-title: Taco shop smart contract
+title: The Taco Shop Smart Contract
---
-Meet **Pedro**, our *artisan taco chef* who has decided to open a Taco shop on the Tezos blockchain, using a smart contract. He sells two different kinds of tacos, the **el clásico** and the **especial del chef**.
+Meet **Pedro**, our *artisan taco chef*, who has decided to open a
+Taco shop on the Tezos blockchain, using a smart contract. He sells
+two different kinds of tacos: **el Clásico** and the **Especial
+del Chef**.
-To help Pedro open his dream taco shop, we'll implement a smart contract, that will manage supply, pricing & sales of his tacos to the consumers.
+To help Pedro open his dream taco shop, we will implement a smart
+contract that will manage supply, pricing & sales of his tacos to the
+consumers.
@@ -18,95 +23,124 @@ To help Pedro open his dream taco shop, we'll implement a smart contract, that w
## Pricing
-Pedro's tacos are a rare delicacy, so their **price goes up**, as the **stock for the day begins to deplete**.
+Pedro's tacos are a rare delicacy, so their **price goes up** as the
+**stock for the day begins to deplete**.
-Each taco kind, has its own `max_price` that it sells for, and a finite supply for the current sales lifecycle.
+Each taco kind, has its own `max_price` that it sells for, and a
+finite supply for the current sales lifecycle.
-> For the sake of simplicity, we won't implement replenishing of the supply after it runs out.
+> For the sake of simplicity, we will not implement the replenishing
+> of the supply after it has run out.
-### Daily offer
+### Daily Offer
|**kind** |id |**available_stock**| **max_price**|
|---|---|---|---|
-|el clásico | `1n` | `50n` | `50000000mutez` |
-|especial del chef | `2n` | `20n` | `75000000mutez` |
+|Clásico | `1n` | `50n` | `50tez` |
+|Especial del Chef | `2n` | `20n` | `75tez` |
-### Calculating the current purchase price
+### Calculating the Current Purchase Price
-Current purchase price is calculated with the following equation:
+The current purchase price is calculated with the following formula:
```pascaligo skip
current_purchase_price = max_price / available_stock
```
-#### El clásico
+#### El Clásico
|**available_stock**|**max_price**|**current_purchase_price**|
|---|---|---|
-| `50n` | `50000000mutez` | `1tz`|
-| `20n` | `50000000mutez` | `2.5tz` |
-| `5n` | `50000000mutez` | `10tz` |
+| `50n` | `50tez` | `1tez`|
+| `20n` | `50tez` | `2.5tez` |
+| `5n` | `50tez` | `10tez` |
#### Especial del chef
|**available_stock**|**max_price**|**current_purchase_price**|
|---|---|---|
-| `20n` | `75000000mutez` | `3.75tz` |
-| `10n` | `75000000mutez` | `7.5tz`|
-| `5n` | `75000000mutez` | `15tz` |
+| `20n` | `75tez` | `3.75tez` |
+| `10n` | `75tez` | `7.5tez`|
+| `5n` | `75tez` | `15tez` |
---
## Installing LIGO
-In this tutorial, we'll use LIGO's dockerized version for the sake of simplicity. You can find the installation instructions [here](intro/installation.md#dockerized-installation-recommended).
+In this tutorial, we will use LIGO's dockerized version, for the sake
+of simplicity. You can find the installation instructions
+[here](intro/installation.md#dockerized-installation-recommended).
-The best way to install the dockerized LIGO is as a **global executable** through the installation script, as shown in the screenshot below:
+The best way to install the dockerized LIGO is as a **global
+executable** through the installation script, as shown in the
+screenshot below:
Installing the next version of LIGO's CLI
-## Implementing our first entry point
+## Implementing our First `main` Function
-> From now on we'll get a bit more technical. If you run into something we have not covered yet - please try checking out the [LIGO cheat sheet](api/cheat-sheet.md) for some extra tips & tricks.
+> From now on we will get a bit more technical. If you run into
+> something we have not covered yet - please try checking out the
+> [LIGO cheat sheet](api/cheat-sheet.md) for some extra tips & tricks.
-To begin implementing our smart contract, we need an entry point. We'll call it `main` and it'll specify our contract's storage (`int`) and input parameter (`int`). Of course this is not the final storage/parameter of our contract, but it is something to get us started and test our LIGO installation as well.
+To begin implementing our smart contract, we need a *main function*,
+that is the first function being executed. We will call it `main` and
+it will specify our contract's storage (`int`) and input parameter
+(`int`). Of course this is not the final storage/parameter of our
+contract, but it is something to get us started and test our LIGO
+installation as well.
### `taco-shop.ligo`
```pascaligo group=a
-function main (const parameter: int; const contractStorage: int) : (list(operation) * int) is
- block {skip} with ((nil : list(operation)), contractStorage + parameter)
+function main (const parameter : int; const contractStorage : int) :
+list (operation) * int is
+ ((nil : list (operation)), contractStorage + parameter)
```
-Let's break down the contract above to make sure we understand each bit of the LIGO syntax:
+Let us break down the contract above to make sure we understand each
+bit of the LIGO syntax:
-- **`function main`** - definition of a function that serves as an entry point
-- **`(const parameter : int; const contractStorage : int)`** - parameters passed to the function
- - **`const parameter : int`** - parameter provided by a transaction that invokes our contract
- - **`const contractStorage : int`** - definition of our storage (`int`)
-- **`(list(operation) * int)`** - return type of our function, in our case a touple with a list of operations, and an int
-- **`block {skip}`** - our function has no body, so we instruct LIGO to `skip` it
-- **`with ((nil : list(operation)), contractStorage + parameter)`** - essentially a return statement
- - **`(nil : list(operation))`** - a `nil` value annotated as a list of operations, because that's required by our return type specified above
- - **`contractStorage + parameter`** - a new storage value for our contract, sum of previous storage and a transaction parameter
-### Running LIGO for the first time
+- **`function main`** - definition of the main function, which takes
+ a the parameter of the contract and the storage
+- **`(const parameter : int; const contractStorage : int)`** -
+ parameters passed to the function: the first is called `parameter`
+ because it denotes the parameter of a specific invocation of the
+ contract, the second is the storage
+- **`(list (operation) * int)`** - return type of our function, in our
+ case a tuple with a list of operations, and an `int` (new value for
+ the storage after a succesful run of the contract)
+- **`((nil : list (operation)), contractStorage + parameter)`** -
+ essentially a return statement
+- **`(nil : list (operation))`** - a `nil` value annotated as a list
+ of operations, because that is required by our return type specified
+ above
+ - **`contractStorage + parameter`** - a new storage value for our
+ contract, sum of previous storage and a transaction parameter
-To test that we've installed LIGO correctly, and that `taco-shop.ligo` is a valid contract, we'll dry-run it.
+### Running LIGO for the First Time
-> Dry-running is a simulated execution of the smart contract, based on a mock storage value and a parameter.
+To test that we have installed LIGO correctly, and that
+`taco-shop.ligo` is a valid contract, we will dry-run it.
-Our contract has a storage of `int` and accepts a parameter that is also an `int`.
+> Dry-running is a simulated execution of the smart contract, based on
+> a mock storage value and a parameter.
+
+Our contract has a storage of `int` and accepts a parameter that is
+also an `int`.
The `dry-run` command requires a few parameters:
- **contract** *(file path)*
-- **entrypoint** *(name of the entrypoint function in the contract)*
+- **entrypoint** *(name of the main function in the contract)*
- **parameter** *(parameter to execute our contract with)*
- **storage** *(starting storage before our contract's code is executed)*
-
-And outputs what's returned from our entrypoint - in our case a touple containing an empty list (of operations to apply) and the new storage value - which in our case is the sum of the previous storage and the parameter we've used.
+It outputs what is returned from our main function: in our case a
+tuple containing an empty list (of operations to apply) and the new
+storage value, which, in our case, is the sum of the previous storage
+and the parameter we have used for the invocation.
```zsh
# Contract: taco-shop.ligo
-# Entry point: main
+# Main function: main
# Parameter: 4
# Storage: 3
ligo dry-run taco-shop.ligo --syntax pascaligo main 4 3
@@ -124,66 +158,80 @@ ligo dry-run taco-shop.ligo --syntax pascaligo main 4 3
---
-## Designing Taco shop's contract storage
+## Designing the Taco Shop's Contract Storage
-We know that Pedro's Taco Shop serves two kinds of tacos, so we'll need to manage stock individually, per kind. Let's define a type, that will keep the `stock` & `max_price` per kind - in a record with two fields. Additionally, we'll want to combine our `taco_supply` type into a map, consisting of the entire offer of Pedro's shop.
+We know that Pedro's Taco Shop serves two kinds of tacos, so we will
+need to manage stock individually, per kind. Let us define a type,
+that will keep the `stock` & `max_price` per kind in a record with two
+fields. Additionally, we will want to combine our `taco_supply` type
+into a map, consisting of the entire offer of Pedro's shop.
**Taco shop's storage**
```pascaligo group=b
-type taco_supply is record
- current_stock : nat;
- max_price : tez;
-end
+type taco_supply is record [
+ current_stock : nat;
+ max_price : tez
+]
-type taco_shop_storage is map(nat, taco_supply);
+type taco_shop_storage is map (nat, taco_supply)
```
-Next step is to update the `main` entry point to include `taco_shop_storage` in its storage - while doing that let's set the `parameter` to `unit` as well to clear things up.
+Next step is to update the `main` function to include
+`taco_shop_storage` in its storage. In the meanwhile, let us set the
+`parameter` to `unit` as well to clear things up.
**`taco-shop.ligo`**
```pascaligo group=b+
-type taco_supply is record
- current_stock : nat;
- max_price : tez;
-end
-type taco_shop_storage is map(nat, taco_supply);
+type taco_supply is record [
+ current_stock : nat;
+ max_price : tez
+]
-function main (const parameter: unit ; const taco_shop_storage : taco_shop_storage) : (list(operation) * taco_shop_storage) is
- block {skip} with ((nil : list(operation)), taco_shop_storage)
+type taco_shop_storage is map (nat, taco_supply)
+
+type return is list (operation) * taco_shop_storage
+
+function main (const parameter : unit; const taco_shop_storage : taco_shop_storage) : return is
+ ((nil : list (operation)), taco_shop_storage)
```
-### Populating our storage in a dry-run
+### Populating our Storage in a dry-run
-When dry-running a contract, it is crucial to provide a correct initial storage value - in our case the storage is type-checked as `taco_shop_storage`. Reflecting [Pedro's daily offer](tutorials/get-started/tezos-taco-shop-smart-contract.md#daily-offer), our storage's value will be defined as following:
+When dry-running a contract, it is crucial to provide a correct
+initial storage value. In our case the storage is type-checked as
+`taco_shop_storage`. Reflecting
+[Pedro's daily offer](tutorials/get-started/tezos-taco-shop-smart-contract.md#daily-offer),
+our storage's value will be defined as follows:
**Storage value**
```zsh
-map
- 1n -> record
- current_stock = 50n;
- max_price = 50000000mutez;
- end;
- 2n -> record
- current_stock = 20n;
- max_price = 75000000mutez;
- end;
-end
+map [
+ 1n -> record [
+ current_stock = 50n;
+ max_price = 50tez
+ ];
+ 2n -> record [
+ current_stock = 20n;
+ max_price = 75tez
+ ]
+]
```
-> Storage value is a map, with two items in it, both items are records identified by natural numbers `1n` & `2n`.
+> The storage value is a map with two bindings (entries) distinguished
+> by their keys `1n` and `2n`.
**Dry run command with a multi-line storage value**
```zsh
-ligo dry-run taco-shop.ligo --syntax pascaligo main unit "map
- 1n -> record
- current_stock = 50n;
- max_price = 50000000mutez;
- end;
- 2n -> record
- current_stock = 20n;
- max_price = 75000000mutez;
- end;
-end"
+ligo dry-run taco-shop.ligo --syntax pascaligo main unit "map [
+ 1n -> record [
+ current_stock = 50n;
+ max_price = 50tez
+ ];
+ 2n -> record [
+ current_stock = 20n;
+ max_price = 75tez
+ ]
+]"
```
@@ -191,62 +239,84 @@ end"
-*If everything went as expected, the `dry-run` command will return an empty list of operations and the contract's current storage, which is the map of products we've defined based on the daily offer of Pedro's taco shop.*
+*If everything went as expected, the `dry-run` command will return an
+ empty list of operations and the contract's current storage, which is
+ the map of the products we have defined based on the daily offer of
+ Pedro's taco shop.*
---
-## Providing an entrypoint for buying tacos
+## Providing another Access Function for Buying Tacos
-Now that we have our stock well defined in form of storage, we can move on to the actual sales. We'll replace the `main` entrypoint with `buy_taco`, that takes an `id` - effectively a key from our `taco_shop_storage` map. This will allow us to calculate pricing, and if the sale is successful - then we can reduce our stock - because we have sold a taco!
+Now that we have our stock well defined in form of storage, we can
+move on to the actual sales. The `main` function will take a key `id`
+from our `taco_shop_storage` map and will be renamed `buy_taco` for
+more readability. This will allow us to calculate pricing, and if the
+sale is successful, we will be able to reduce our stock because we
+have sold a taco!
-### Selling the tacos for free
+### Selling the Tacos for Free
-Let's start by customizing our contract a bit, we will:
+Let is start by customizing our contract a bit, we will:
-- rename the entrypoint from `main` to `buy_taco`
- rename `parameter` to `taco_kind_index`
-- change `taco_shop_storage` to a `var` instead of a `const`, because we'll want to modify it
+- change `taco_shop_storage` to a `var` instead of a `const`, because
+ we will want to modify it
**`taco-shop.ligo`**
```pascaligo group=c
-type taco_supply is record
+type taco_supply is record [
current_stock : nat;
- max_price : tez;
-end
-type taco_shop_storage is map(nat, taco_supply);
+ max_price : tez
+]
+type taco_shop_storage is map (nat, taco_supply)
-function buy_taco (const taco_kind_index: nat ; var taco_shop_storage : taco_shop_storage) : (list(operation) * taco_shop_storage) is
- block { skip } with ((nil : list(operation)), taco_shop_storage)
+type return is list (operation) * taco_shop_storage
+
+function buy_taco (const taco_kind_index : nat; var taco_shop_storage : taco_shop_storage) : return is
+ ((nil : list (operation)), taco_shop_storage)
```
-#### Decreasing `current_stock` when a taco is sold
+#### Decreasing `current_stock` when a Taco is Sold
-In order to decrease the stock in our contract's storage for a specific taco kind, a few things needs to happen:
+In order to decrease the stock in our contract's storage for a
+specific taco kind, a few things needs to happen:
-- retrieve the `taco_kind` from our storage, based on the `taco_kind_index` provided
-- subtract the `taco_kind.current_stock` by `1n`
- - we can find the absolute (`nat`) value of the subtraction above by using `abs`, otherwise we'd be left with an `int`
-- update the storage, and return it
+- retrieve the `taco_kind` from our storage, based on the
+ `taco_kind_index` provided;
+- subtract the `taco_kind.current_stock` by `1n`;
+- we can find the absolute value of the subtraction above by
+ calling `abs` (otherwise we would be left with an `int`);
+- update the storage, and return it.
**`taco-shop.ligo`**
```pascaligo group=d
-type taco_supply is record
- current_stock : nat;
- max_price : tez;
-end
-type taco_shop_storage is map(nat, taco_supply);
+type taco_supply is record [
+ current_stock : nat;
+ max_price : tez
+]
+
+type taco_shop_storage is map (nat, taco_supply)
+
+type return is list (operation) * taco_shop_storage
+
+function buy_taco (const taco_kind_index : nat; var taco_shop_storage : taco_shop_storage) : return is
+ block {
+ // Retrieve the taco_kind from the contract's storage or fail
+ const taco_kind : taco_supply =
+ case taco_shop_storage[taco_kind_index] of
+ Some (kind) -> kind
+ | None -> (failwith ("Unknown kind of taco.") : taco_supply)
+ end;
+
+ // Decrease the stock by 1n, because we have just sold one
+ taco_kind.current_stock := abs (taco_kind.current_stock - 1n);
-function buy_taco (const taco_kind_index: nat ; var taco_shop_storage : taco_shop_storage) : (list(operation) * taco_shop_storage) is
- begin
- // Retrieve the taco_kind from the contract's storage
- const taco_kind : taco_supply = get_force(taco_kind_index, taco_shop_storage);
- // Decrease the stock by 1n, because we've just sold one
- taco_kind.current_stock := abs(taco_kind.current_stock - 1n);
// Update the storage with the refreshed taco_kind
- taco_shop_storage[taco_kind_index] := taco_kind;
- end with ((nil : list(operation)), taco_shop_storage)
+ taco_shop_storage[taco_kind_index] := taco_kind
+ } with ((nil : list (operation)), taco_shop_storage)
```
@@ -254,67 +324,85 @@ function buy_taco (const taco_kind_index: nat ; var taco_shop_storage : taco_sho
-### Making sure we get paid for our tacos
+### Making Sure We Get Paid for Our Tacos
-In order to make Pedro's taco shop profitable, he needs to stop giving away tacos for free. When a contract is invoked via a transaction, an amount of tezzies to be sent can be specified as well. This amount is accessible within LIGO as `amount`.
+In order to make Pedro's taco shop profitable, he needs to stop giving
+away tacos for free. When a contract is invoked via a transaction, an
+amount of tezzies to be sent can be specified as well. This amount is
+accessible within LIGO as `amount`.
To make sure we get paid, we will:
-- calculate a `current_purchase_price` based on the [equation specified earlier](tutorials/get-started/tezos-taco-shop-smart-contract.md#calculating-the-current-purchase-price)
-- check if the sent `amount` matches the `current_purchase_price`
- - if not, then our contract will `fail` and stop executing
- - if yes, stock for the given `taco_kind` will be decreased and the payment accepted
+- calculate a `current_purchase_price` based on the
+ [equation specified earlier](tutorials/get-started/tezos-taco-shop-smart-contract.md#calculating-the-current-purchase-price)
+- check if the sent `amount` matches the `current_purchase_price`:
+ - if not, then our contract will fail (`failwith`)
+ - otherwise, stock for the given `taco_kind` will be decreased and
+ the payment accepted
**`taco-shop.ligo`**
```pascaligo group=e
-type taco_supply is record
- current_stock : nat;
- max_price : tez;
-end
-type taco_shop_storage is map(nat, taco_supply);
+type taco_supply is record [
+ current_stock : nat;
+ max_price : tez
+]
-function buy_taco (const taco_kind_index: nat ; var taco_shop_storage : taco_shop_storage) : (list(operation) * taco_shop_storage) is
- begin
- // Retrieve the taco_kind from the contract's storage
- const taco_kind : taco_supply = get_force(taco_kind_index, taco_shop_storage);
-
- const current_purchase_price : tez = taco_kind.max_price / taco_kind.current_stock;
+type taco_shop_storage is map (nat, taco_supply)
+
+type return is list (operation) * taco_shop_storage
+
+function buy_taco (const taco_kind_index : nat ; var taco_shop_storage : taco_shop_storage) : return is
+ block {
+ // Retrieve the taco_kind from the contract's storage or fail
+ const taco_kind : taco_supply =
+ case taco_shop_storage[taco_kind_index] of
+ Some (kind) -> kind
+ | None -> (failwith ("Unknown kind of taco.") : taco_supply)
+ end;
+
+ const current_purchase_price : tez =
+ taco_kind.max_price / taco_kind.current_stock;
if amount =/= current_purchase_price then
- // we won't sell tacos if the amount isn't correct
- failwith("Sorry, the taco you're trying to purchase has a different price");
- else
- // Decrease the stock by 1n, because we've just sold one
- taco_kind.current_stock := abs(taco_kind.current_stock - 1n);
+ // We won't sell tacos if the amount is not correct
+ failwith ("Sorry, the taco you are trying to purchase has a different price");
+ else skip;
+
+ // Decrease the stock by 1n, because we have just sold one
+ taco_kind.current_stock := abs (taco_kind.current_stock - 1n);
// Update the storage with the refreshed taco_kind
- taco_shop_storage[taco_kind_index] := taco_kind;
- end with ((nil : list(operation)), taco_shop_storage)
+ taco_shop_storage[taco_kind_index] := taco_kind
+ } with ((nil : list (operation)), taco_shop_storage)
```
-In order to test the `amount` sent, we'll use the `--amount` option of `dry-run`:
+In order to test the `amount` sent, we will use the `--amount` option
+of `dry-run`:
```zsh
-ligo dry-run taco-shop.ligo --syntax pascaligo --amount 1 buy_taco 1n "map
- 1n -> record
- current_stock = 50n;
- max_price = 50000000mutez;
- end;
- 2n -> record
- current_stock = 20n;
- max_price = 75000000mutez;
- end;
-end"
+ligo dry-run taco-shop.ligo --syntax pascaligo --amount 1 buy_taco 1n "map [
+ 1n -> record [
+ current_stock = 50n;
+ max_price = 50tez
+ ];
+ 2n -> record [
+ current_stock = 20n;
+ max_price = 75tez
+ ]
+]"
```
-**Purchasing a taco with 1.0tz**
+
+** Purchasing a Taco with 1tez **
Stock decreases after selling a taco, if the right amount of tezzies is provided
-**Attempting to purchase a taco with 0.7tz**
+**Attempting to Purchase a Taco with 0.7tez**
-
Stock does not decrease after a purchase attempt with a lower than required amount.
+
Stock does not decrease after a purchase attempt
+with an insufficient payment.
@@ -322,9 +410,10 @@ end"
---
-## 💰 Bonus: *Accepting tips above the taco purchase price*
+## 💰 Bonus: *Accepting Tips above the Taco Purchase Price*
-If you'd like to accept tips in your contract as well, simply change the following line, depending on your preference.
+If you would like to accept tips in your contract, simply change the
+following line, depending on your preference.
**Without tips**
```pascaligo skip
diff --git a/gitlab-pages/examples/counter.ligo b/gitlab-pages/examples/counter.ligo
deleted file mode 100644
index 45ce7462a..000000000
--- a/gitlab-pages/examples/counter.ligo
+++ /dev/null
@@ -1,10 +0,0 @@
-type action is
-| Increment of int
-| Decrement of int
-
-function main (const p : action ; const s : int) : (list(operation) * int) is
- block {skip} with ((nil : list(operation)),
- case p of
- | Increment n -> s + n
- | Decrement n -> s - n
- end)
diff --git a/gitlab-pages/examples/functions.ligo b/gitlab-pages/examples/functions.ligo
deleted file mode 100644
index 4f8e4dae1..000000000
--- a/gitlab-pages/examples/functions.ligo
+++ /dev/null
@@ -1,10 +0,0 @@
-function multiply (const a : int ; const b : int) : int is
- begin
- const result : int = a * b ;
- end with result
-
-function add (const a : int ; const b : int) : int is
- block { skip } with a + b
-
-function main (const p : unit ; const s : unit) : (list(operation) * unit) is
- block {skip} with ((nil : list(operation)), s)
\ No newline at end of file
diff --git a/gitlab-pages/examples/multiple-entrypoints.ligo b/gitlab-pages/examples/multiple-entrypoints.ligo
deleted file mode 100644
index 3b77ff009..000000000
--- a/gitlab-pages/examples/multiple-entrypoints.ligo
+++ /dev/null
@@ -1,16 +0,0 @@
-type action is
-| Increment of int
-| Decrement of int
-
-function add (const a : int ; const b : int) : int is
- block { skip } with a + b
-
-function subtract (const a : int ; const b : int) : int is
- block { skip } with a - b
-
-function main (const p : action ; const s : int) : (list(operation) * int) is
- block {skip} with ((nil : list(operation)),
- case p of
- | Increment n -> add(s, n)
- | Decrement n -> subtract(s, n)
- end)
diff --git a/gitlab-pages/examples/variables.ligo b/gitlab-pages/examples/variables.ligo
deleted file mode 100644
index 09254da96..000000000
--- a/gitlab-pages/examples/variables.ligo
+++ /dev/null
@@ -1,5 +0,0 @@
-const four : int = 4;
-const name : string = "John Doe";
-
-function main (const p : unit ; const s : unit) : (list(operation) * unit) is
- block {skip} with ((nil : list(operation)), s)
\ No newline at end of file
diff --git a/gitlab-pages/owner.pp.ligo b/gitlab-pages/owner.pp.ligo
deleted file mode 100644
index e69de29bb..000000000
diff --git a/gitlab-pages/timestamp.pp.ligo b/gitlab-pages/timestamp.pp.ligo
deleted file mode 100644
index e69de29bb..000000000
diff --git a/gitlab-pages/website/versioned_sidebars/version-next-sidebars.json b/gitlab-pages/website/versioned_sidebars/version-next-sidebars.json
index 07fc287dd..5109f0260 100644
--- a/gitlab-pages/website/versioned_sidebars/version-next-sidebars.json
+++ b/gitlab-pages/website/versioned_sidebars/version-next-sidebars.json
@@ -24,9 +24,17 @@
"version-next-advanced/include",
"version-next-advanced/first-contract"
],
- "API": [
+ "API & Reference": [
"version-next-api/cli-commands",
- "version-next-api/cheat-sheet"
+ "version-next-api/cheat-sheet",
+ "version-next-reference/big-map-reference",
+ "version-next-reference/bytes-reference",
+ "version-next-reference/crypto-reference",
+ "version-next-reference/current-reference",
+ "version-next-reference/list-reference",
+ "version-next-reference/map-reference",
+ "version-next-reference/set-reference",
+ "version-next-reference/string-reference"
]
},
"version-next-contributors-docs": {
diff --git a/src/passes/1-parser/cameligo/.links b/src/passes/1-parser/cameligo/.links
index 6f2bb3b81..a3ac060f6 100644
--- a/src/passes/1-parser/cameligo/.links
+++ b/src/passes/1-parser/cameligo/.links
@@ -20,3 +20,4 @@ $HOME/git/ligo/vendors/ligo-utils/simple-utils/region.ml
../shared/LexerUnit.ml
../shared/ParserUnit.ml
Stubs/Simple_utils.ml
+$HOME/git/ligo/_build/default/src/passes/1-parser/cameligo/ParErr.ml
\ No newline at end of file
diff --git a/src/passes/1-parser/cameligo/LexToken.mll b/src/passes/1-parser/cameligo/LexToken.mll
index d16388591..f17ea903a 100644
--- a/src/passes/1-parser/cameligo/LexToken.mll
+++ b/src/passes/1-parser/cameligo/LexToken.mll
@@ -266,7 +266,6 @@ let keywords = [
let reserved =
let open SSet in
empty
- |> add "and"
|> add "as"
|> add "asr"
|> add "class"
diff --git a/src/passes/1-parser/cameligo/LexerMain.ml b/src/passes/1-parser/cameligo/LexerMain.ml
index 5ef471c37..60874bda0 100644
--- a/src/passes/1-parser/cameligo/LexerMain.ml
+++ b/src/passes/1-parser/cameligo/LexerMain.ml
@@ -1,5 +1,7 @@
(* Driver for the CameLIGO lexer *)
+module Region = Simple_utils.Region
+
module IO =
struct
let ext = ".mligo"
diff --git a/src/passes/1-parser/cameligo/Parser.mly b/src/passes/1-parser/cameligo/Parser.mly
index 0901ab875..c8c0470a8 100644
--- a/src/passes/1-parser/cameligo/Parser.mly
+++ b/src/passes/1-parser/cameligo/Parser.mly
@@ -593,10 +593,14 @@ core_expr:
| par(expr ":" type_expr {$1,$2,$3}) { EAnnot $1 }
module_field:
- module_name "." field_name {
+ module_name "." module_fun {
let region = cover $1.region $3.region in
{region; value = $1.value ^ "." ^ $3.value} }
+module_fun:
+ field_name { $1 }
+| "or" { {value="or"; region=$1} }
+
projection:
struct_name "." nsepseq(selection,".") {
let start = $1.region in
diff --git a/src/passes/1-parser/pascaligo/.links b/src/passes/1-parser/pascaligo/.links
index 831099d9e..70b9b360f 100644
--- a/src/passes/1-parser/pascaligo/.links
+++ b/src/passes/1-parser/pascaligo/.links
@@ -24,3 +24,4 @@ $HOME/git/ligo/vendors/ligo-utils/simple-utils/region.ml
../shared/Memo.mli
../shared/Memo.ml
Stubs/Simple_utils.ml
+$HOME/git/ligo/_build/default/src/passes/1-parser/pascaligo/ParErr.ml
\ No newline at end of file
diff --git a/src/passes/1-parser/pascaligo/Parser.mly b/src/passes/1-parser/pascaligo/Parser.mly
index e5afdc3b5..f31407fca 100644
--- a/src/passes/1-parser/pascaligo/Parser.mly
+++ b/src/passes/1-parser/pascaligo/Parser.mly
@@ -98,11 +98,12 @@ sepseq(X,Sep):
(* Inlines *)
-%inline var : "
" { $1 }
-%inline type_name : "" { $1 }
-%inline fun_name : "" { $1 }
-%inline field_name : "" { $1 }
-%inline struct_name : "" { $1 }
+%inline var : "" { $1 }
+%inline type_name : "" { $1 }
+%inline fun_name : "" { $1 }
+%inline field_name : "" { $1 }
+%inline struct_name : "" { $1 }
+%inline module_name : "" { $1 }
(* Main *)
@@ -829,7 +830,7 @@ core_expr:
"" { EArith (Int $1) }
| "" { EArith (Nat $1) }
| "" { EArith (Mutez $1) }
-| var { EVar $1 }
+| "" | module_field { EVar $1 }
| "" { EString (String $1) }
| "" { EBytes $1 }
| "False" { ELogic (BoolExpr (False $1)) }
@@ -902,13 +903,32 @@ path:
var { Name $1 }
| projection { Path $1 }
+module_field:
+ module_name "." module_fun {
+ let region = cover $1.region $3.region in
+ {region; value = $1.value ^ "." ^ $3.value} }
+
+module_fun:
+ field_name { $1 }
+| "map" { {value="map"; region=$1} }
+| "or" { {value="or"; region=$1} }
+| "and" { {value="and"; region=$1} }
+| "remove" { {value="remove"; region=$1} }
+
projection:
struct_name "." nsepseq(selection,".") {
let stop = nsepseq_to_region selection_to_region $3 in
let region = cover $1.region stop
- and value = {struct_name = $1;
- selector = $2;
- field_path = $3}
+ and value = {struct_name=$1; selector=$2; field_path=$3}
+ in {region; value}
+ }
+| module_name "." field_name "." nsepseq(selection,".") {
+ let value = $1.value ^ "." ^ $3.value in
+ let struct_name = {$1 with value} in
+ let start = $1.region in
+ let stop = nsepseq_to_region selection_to_region $5 in
+ let region = cover start stop in
+ let value = {struct_name; selector=$4; field_path=$5}
in {region; value} }
selection:
@@ -939,31 +959,26 @@ record_expr:
update_record:
path "with" ne_injection("record",field_path_assignment){
let region = cover (path_to_region $1) $3.region in
- let value = {
- record = $1;
- kwd_with = $2;
- updates = $3}
+ let value = {record=$1; kwd_with=$2; updates=$3}
in {region; value} }
-
field_assignment:
field_name "=" expr {
let region = cover $1.region (expr_to_region $3)
- and value = {field_name = $1;
- equal = $2;
- field_expr = $3}
+ and value = {field_name=$1; equal=$2; field_expr=$3}
in {region; value} }
field_path_assignment:
nsepseq(field_name,".") "=" expr {
- let region = cover (nsepseq_to_region (fun x -> x.region) $1) (expr_to_region $3)
- and value = {field_path = $1;
- equal = $2;
- field_expr = $3}
+ let start = nsepseq_to_region (fun x -> x.region) $1
+ and stop = expr_to_region $3 in
+ let region = cover start stop
+ and value = {field_path=$1; equal=$2; field_expr=$3}
in {region; value} }
fun_call:
- fun_name arguments {
+ fun_name arguments
+| module_field arguments {
let region = cover $1.region $2.region
in {region; value = (EVar $1),$2} }
diff --git a/src/passes/1-parser/pascaligo/error.messages.checked-in b/src/passes/1-parser/pascaligo/error.messages.checked-in
index 660825a6e..51fc4f532 100644
--- a/src/passes/1-parser/pascaligo/error.messages.checked-in
+++ b/src/passes/1-parser/pascaligo/error.messages.checked-in
@@ -1,6 +1,6 @@
interactive_expr: BigMap LBRACKET Unit ARROW Bytes End
##
-## Ends in an error in state: 130.
+## Ends in an error in state: 144.
##
## injection(BigMap,binding) -> BigMap LBRACKET sep_or_term_list(binding,SEMI) . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -11,26 +11,26 @@ interactive_expr: BigMap LBRACKET Unit ARROW Bytes End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
-## In state 226, spurious reduction of production nsepseq(binding,SEMI) -> binding
-## In state 222, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
+## In state 242, spurious reduction of production nsepseq(binding,SEMI) -> binding
+## In state 238, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
##
interactive_expr: BigMap LBRACKET With
##
-## Ends in an error in state: 123.
+## Ends in an error in state: 137.
##
## injection(BigMap,binding) -> BigMap LBRACKET . sep_or_term_list(binding,SEMI) RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## injection(BigMap,binding) -> BigMap LBRACKET . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -43,7 +43,7 @@ interactive_expr: BigMap LBRACKET With
interactive_expr: BigMap Unit ARROW Bytes RBRACKET
##
-## Ends in an error in state: 234.
+## Ends in an error in state: 250.
##
## injection(BigMap,binding) -> BigMap sep_or_term_list(binding,SEMI) . End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -54,26 +54,26 @@ interactive_expr: BigMap Unit ARROW Bytes RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
-## In state 226, spurious reduction of production nsepseq(binding,SEMI) -> binding
-## In state 222, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
+## In state 242, spurious reduction of production nsepseq(binding,SEMI) -> binding
+## In state 238, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
##
interactive_expr: BigMap With
##
-## Ends in an error in state: 122.
+## Ends in an error in state: 136.
##
## injection(BigMap,binding) -> BigMap . sep_or_term_list(binding,SEMI) End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## injection(BigMap,binding) -> BigMap . End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -88,7 +88,7 @@ interactive_expr: BigMap With
interactive_expr: C_Some With
##
-## Ends in an error in state: 118.
+## Ends in an error in state: 132.
##
## core_expr -> C_Some . arguments [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -100,7 +100,7 @@ interactive_expr: C_Some With
interactive_expr: Case Unit Of C_Some LPAR WILD With
##
-## Ends in an error in state: 262.
+## Ends in an error in state: 278.
##
## par(core_pattern) -> LPAR core_pattern . RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
##
@@ -112,7 +112,7 @@ interactive_expr: Case Unit Of C_Some LPAR WILD With
interactive_expr: Case Unit Of C_Some LPAR With
##
-## Ends in an error in state: 254.
+## Ends in an error in state: 270.
##
## par(core_pattern) -> LPAR . core_pattern RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
##
@@ -124,7 +124,7 @@ interactive_expr: Case Unit Of C_Some LPAR With
interactive_expr: Case Unit Of C_Some With
##
-## Ends in an error in state: 253.
+## Ends in an error in state: 269.
##
## constr_pattern -> C_Some . par(core_pattern) [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
##
@@ -136,7 +136,7 @@ interactive_expr: Case Unit Of C_Some With
interactive_expr: Case Unit Of Constr LPAR WILD With
##
-## Ends in an error in state: 268.
+## Ends in an error in state: 284.
##
## nsepseq(core_pattern,COMMA) -> core_pattern . [ RPAR ]
## nsepseq(core_pattern,COMMA) -> core_pattern . COMMA nsepseq(core_pattern,COMMA) [ RPAR ]
@@ -149,7 +149,7 @@ interactive_expr: Case Unit Of Constr LPAR WILD With
interactive_expr: Case Unit Of Constr LPAR With
##
-## Ends in an error in state: 252.
+## Ends in an error in state: 268.
##
## par(nsepseq(core_pattern,COMMA)) -> LPAR . nsepseq(core_pattern,COMMA) RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
##
@@ -161,7 +161,7 @@ interactive_expr: Case Unit Of Constr LPAR With
interactive_expr: Case Unit Of Constr With
##
-## Ends in an error in state: 251.
+## Ends in an error in state: 267.
##
## constr_pattern -> Constr . tuple_pattern [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
## constr_pattern -> Constr . [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
@@ -174,7 +174,7 @@ interactive_expr: Case Unit Of Constr With
interactive_expr: Case Unit Of LBRACKET VBAR Block
##
-## Ends in an error in state: 239.
+## Ends in an error in state: 255.
##
## case(expr) -> Case expr Of LBRACKET option(VBAR) . cases(expr) RBRACKET [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -186,7 +186,7 @@ interactive_expr: Case Unit Of LBRACKET VBAR Block
interactive_expr: Case Unit Of LBRACKET WILD ARROW Bytes End
##
-## Ends in an error in state: 303.
+## Ends in an error in state: 319.
##
## case(expr) -> Case expr Of LBRACKET option(VBAR) cases(expr) . RBRACKET [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -197,26 +197,26 @@ interactive_expr: Case Unit Of LBRACKET WILD ARROW Bytes End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 301, spurious reduction of production case_clause(expr) -> pattern ARROW expr
-## In state 305, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr)
-## In state 302, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 317, spurious reduction of production case_clause(expr) -> pattern ARROW expr
+## In state 321, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr)
+## In state 318, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR)
##
interactive_expr: Case Unit Of LBRACKET With
##
-## Ends in an error in state: 238.
+## Ends in an error in state: 254.
##
## case(expr) -> Case expr Of LBRACKET . option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -228,7 +228,7 @@ interactive_expr: Case Unit Of LBRACKET With
interactive_expr: Case Unit Of LPAR WILD COMMA With
##
-## Ends in an error in state: 269.
+## Ends in an error in state: 285.
##
## nsepseq(core_pattern,COMMA) -> core_pattern COMMA . nsepseq(core_pattern,COMMA) [ RPAR ]
##
@@ -240,7 +240,7 @@ interactive_expr: Case Unit Of LPAR WILD COMMA With
interactive_expr: Case Unit Of LPAR WILD CONS Bytes ARROW
##
-## Ends in an error in state: 281.
+## Ends in an error in state: 297.
##
## par(cons_pattern) -> LPAR cons_pattern . RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
##
@@ -251,15 +251,15 @@ interactive_expr: Case Unit Of LPAR WILD CONS Bytes ARROW
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 275, spurious reduction of production pattern -> core_pattern
-## In state 274, spurious reduction of production cons_pattern -> core_pattern CONS pattern
+## In state 291, spurious reduction of production pattern -> core_pattern
+## In state 290, spurious reduction of production cons_pattern -> core_pattern CONS pattern
##
interactive_expr: Case Unit Of LPAR WILD CONS With
##
-## Ends in an error in state: 273.
+## Ends in an error in state: 289.
##
## cons_pattern -> core_pattern CONS . pattern [ RPAR ]
##
@@ -271,7 +271,7 @@ interactive_expr: Case Unit Of LPAR WILD CONS With
interactive_expr: Case Unit Of LPAR WILD With
##
-## Ends in an error in state: 272.
+## Ends in an error in state: 288.
##
## cons_pattern -> core_pattern . CONS pattern [ RPAR ]
## nsepseq(core_pattern,COMMA) -> core_pattern . [ RPAR ]
@@ -285,7 +285,7 @@ interactive_expr: Case Unit Of LPAR WILD With
interactive_expr: Case Unit Of LPAR With
##
-## Ends in an error in state: 247.
+## Ends in an error in state: 263.
##
## par(cons_pattern) -> LPAR . cons_pattern RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
## par(nsepseq(core_pattern,COMMA)) -> LPAR . nsepseq(core_pattern,COMMA) RPAR [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
@@ -298,7 +298,7 @@ interactive_expr: Case Unit Of LPAR With
interactive_expr: Case Unit Of List LBRACKET WILD End
##
-## Ends in an error in state: 285.
+## Ends in an error in state: 301.
##
## injection(List,core_pattern) -> List LBRACKET sep_or_term_list(core_pattern,SEMI) . RBRACKET [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
##
@@ -309,15 +309,15 @@ interactive_expr: Case Unit Of List LBRACKET WILD End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 289, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern
-## In state 288, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI)
+## In state 305, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern
+## In state 304, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI)
##
interactive_expr: Case Unit Of List LBRACKET With
##
-## Ends in an error in state: 283.
+## Ends in an error in state: 299.
##
## injection(List,core_pattern) -> List LBRACKET . sep_or_term_list(core_pattern,SEMI) RBRACKET [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
## injection(List,core_pattern) -> List LBRACKET . RBRACKET [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
@@ -330,7 +330,7 @@ interactive_expr: Case Unit Of List LBRACKET With
interactive_expr: Case Unit Of List WILD RBRACKET
##
-## Ends in an error in state: 297.
+## Ends in an error in state: 313.
##
## injection(List,core_pattern) -> List sep_or_term_list(core_pattern,SEMI) . End [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
##
@@ -341,15 +341,15 @@ interactive_expr: Case Unit Of List WILD RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 289, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern
-## In state 288, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI)
+## In state 305, spurious reduction of production nsepseq(core_pattern,SEMI) -> core_pattern
+## In state 304, spurious reduction of production sep_or_term_list(core_pattern,SEMI) -> nsepseq(core_pattern,SEMI)
##
interactive_expr: Case Unit Of List WILD SEMI WILD SEMI With
##
-## Ends in an error in state: 294.
+## Ends in an error in state: 310.
##
## nsepseq(core_pattern,SEMI) -> core_pattern SEMI . nsepseq(core_pattern,SEMI) [ RBRACKET End ]
## seq(__anonymous_0(core_pattern,SEMI)) -> core_pattern SEMI . seq(__anonymous_0(core_pattern,SEMI)) [ RBRACKET End ]
@@ -362,7 +362,7 @@ interactive_expr: Case Unit Of List WILD SEMI WILD SEMI With
interactive_expr: Case Unit Of List WILD SEMI WILD With
##
-## Ends in an error in state: 293.
+## Ends in an error in state: 309.
##
## nsepseq(core_pattern,SEMI) -> core_pattern . [ RBRACKET End ]
## nsepseq(core_pattern,SEMI) -> core_pattern . SEMI nsepseq(core_pattern,SEMI) [ RBRACKET End ]
@@ -376,7 +376,7 @@ interactive_expr: Case Unit Of List WILD SEMI WILD With
interactive_expr: Case Unit Of List WILD SEMI With
##
-## Ends in an error in state: 290.
+## Ends in an error in state: 306.
##
## nsepseq(core_pattern,SEMI) -> core_pattern SEMI . nsepseq(core_pattern,SEMI) [ RBRACKET End ]
## nseq(__anonymous_0(core_pattern,SEMI)) -> core_pattern SEMI . seq(__anonymous_0(core_pattern,SEMI)) [ RBRACKET End ]
@@ -389,7 +389,7 @@ interactive_expr: Case Unit Of List WILD SEMI With
interactive_expr: Case Unit Of List WILD With
##
-## Ends in an error in state: 289.
+## Ends in an error in state: 305.
##
## nsepseq(core_pattern,SEMI) -> core_pattern . [ RBRACKET End ]
## nsepseq(core_pattern,SEMI) -> core_pattern . SEMI nsepseq(core_pattern,SEMI) [ RBRACKET End ]
@@ -403,7 +403,7 @@ interactive_expr: Case Unit Of List WILD With
interactive_expr: Case Unit Of List With
##
-## Ends in an error in state: 246.
+## Ends in an error in state: 262.
##
## injection(List,core_pattern) -> List . sep_or_term_list(core_pattern,SEMI) End [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
## injection(List,core_pattern) -> List . End [ SEMI RPAR RBRACKET End CONS COMMA ARROW ]
@@ -418,7 +418,7 @@ interactive_expr: Case Unit Of List With
interactive_expr: Case Unit Of VBAR Block
##
-## Ends in an error in state: 308.
+## Ends in an error in state: 324.
##
## case(expr) -> Case expr Of option(VBAR) . cases(expr) End [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -430,7 +430,7 @@ interactive_expr: Case Unit Of VBAR Block
interactive_expr: Case Unit Of WILD ARROW Bytes RBRACKET
##
-## Ends in an error in state: 309.
+## Ends in an error in state: 325.
##
## case(expr) -> Case expr Of option(VBAR) cases(expr) . End [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -441,26 +441,26 @@ interactive_expr: Case Unit Of WILD ARROW Bytes RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 301, spurious reduction of production case_clause(expr) -> pattern ARROW expr
-## In state 305, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr)
-## In state 302, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 317, spurious reduction of production case_clause(expr) -> pattern ARROW expr
+## In state 321, spurious reduction of production nsepseq(case_clause(expr),VBAR) -> case_clause(expr)
+## In state 318, spurious reduction of production cases(expr) -> nsepseq(case_clause(expr),VBAR)
##
interactive_expr: Case Unit Of WILD ARROW Bytes Type
##
-## Ends in an error in state: 305.
+## Ends in an error in state: 321.
##
## nsepseq(case_clause(expr),VBAR) -> case_clause(expr) . [ RBRACKET End ]
## nsepseq(case_clause(expr),VBAR) -> case_clause(expr) . VBAR nsepseq(case_clause(expr),VBAR) [ RBRACKET End ]
@@ -472,24 +472,24 @@ interactive_expr: Case Unit Of WILD ARROW Bytes Type
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 301, spurious reduction of production case_clause(expr) -> pattern ARROW expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 317, spurious reduction of production case_clause(expr) -> pattern ARROW expr
##
interactive_expr: Case Unit Of WILD ARROW Bytes VBAR With
##
-## Ends in an error in state: 306.
+## Ends in an error in state: 322.
##
## nsepseq(case_clause(expr),VBAR) -> case_clause(expr) VBAR . nsepseq(case_clause(expr),VBAR) [ RBRACKET End ]
##
@@ -501,7 +501,7 @@ interactive_expr: Case Unit Of WILD ARROW Bytes VBAR With
interactive_expr: Case Unit Of WILD ARROW With
##
-## Ends in an error in state: 300.
+## Ends in an error in state: 316.
##
## case_clause(expr) -> pattern ARROW . expr [ VBAR RBRACKET End ]
##
@@ -513,7 +513,7 @@ interactive_expr: Case Unit Of WILD ARROW With
interactive_expr: Case Unit Of WILD CONS WILD CONS With
##
-## Ends in an error in state: 279.
+## Ends in an error in state: 295.
##
## nsepseq(core_pattern,CONS) -> core_pattern CONS . nsepseq(core_pattern,CONS) [ RPAR ARROW ]
##
@@ -525,7 +525,7 @@ interactive_expr: Case Unit Of WILD CONS WILD CONS With
interactive_expr: Case Unit Of WILD CONS WILD With
##
-## Ends in an error in state: 278.
+## Ends in an error in state: 294.
##
## nsepseq(core_pattern,CONS) -> core_pattern . [ RPAR ARROW ]
## nsepseq(core_pattern,CONS) -> core_pattern . CONS nsepseq(core_pattern,CONS) [ RPAR ARROW ]
@@ -538,7 +538,7 @@ interactive_expr: Case Unit Of WILD CONS WILD With
interactive_expr: Case Unit Of WILD CONS With
##
-## Ends in an error in state: 276.
+## Ends in an error in state: 292.
##
## pattern -> core_pattern CONS . nsepseq(core_pattern,CONS) [ RPAR ARROW ]
##
@@ -550,7 +550,7 @@ interactive_expr: Case Unit Of WILD CONS With
interactive_expr: Case Unit Of WILD RPAR
##
-## Ends in an error in state: 299.
+## Ends in an error in state: 315.
##
## case_clause(expr) -> pattern . ARROW expr [ VBAR RBRACKET End ]
##
@@ -561,14 +561,14 @@ interactive_expr: Case Unit Of WILD RPAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 275, spurious reduction of production pattern -> core_pattern
+## In state 291, spurious reduction of production pattern -> core_pattern
##
interactive_expr: Case Unit Of WILD With
##
-## Ends in an error in state: 275.
+## Ends in an error in state: 291.
##
## pattern -> core_pattern . [ RPAR ARROW ]
## pattern -> core_pattern . CONS nsepseq(core_pattern,CONS) [ RPAR ARROW ]
@@ -581,7 +581,7 @@ interactive_expr: Case Unit Of WILD With
interactive_expr: Case Unit Of With
##
-## Ends in an error in state: 237.
+## Ends in an error in state: 253.
##
## case(expr) -> Case expr Of . option(VBAR) cases(expr) End [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
## case(expr) -> Case expr Of . LBRACKET option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
@@ -594,7 +594,7 @@ interactive_expr: Case Unit Of With
interactive_expr: Case Unit VBAR
##
-## Ends in an error in state: 236.
+## Ends in an error in state: 252.
##
## case(expr) -> Case expr . Of option(VBAR) cases(expr) End [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
## case(expr) -> Case expr . Of LBRACKET option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
@@ -606,23 +606,23 @@ interactive_expr: Case Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
interactive_expr: Case With
##
-## Ends in an error in state: 117.
+## Ends in an error in state: 131.
##
## case(expr) -> Case . expr Of option(VBAR) cases(expr) End [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
## case(expr) -> Case . expr Of LBRACKET option(VBAR) cases(expr) RBRACKET [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
@@ -633,12 +633,65 @@ interactive_expr: Case With
+interactive_expr: Constr DOT And With
+##
+## Ends in an error in state: 169.
+##
+## core_expr -> module_field . [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
+## fun_call -> module_field . arguments [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
+##
+## The known suffix of the stack is as follows:
+## module_field
+##
+
+
+
+interactive_expr: Constr DOT Ident DOT With
+##
+## Ends in an error in state: 120.
+##
+## projection -> Constr DOT Ident DOT . nsepseq(selection,DOT) [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
+##
+## The known suffix of the stack is as follows:
+## Constr DOT Ident DOT
+##
+
+
+
+interactive_expr: Constr DOT Ident With
+##
+## Ends in an error in state: 119.
+##
+## module_fun -> Ident . [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
+## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
+##
+## The known suffix of the stack is as follows:
+## Constr DOT Ident
+##
+
+
+
+interactive_expr: Constr DOT With
+##
+## Ends in an error in state: 115.
+##
+## module_field -> Constr DOT . module_fun [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
+## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
+##
+## The known suffix of the stack is as follows:
+## Constr DOT
+##
+
+
+
interactive_expr: Constr With
##
## Ends in an error in state: 114.
##
## core_expr -> Constr . arguments [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## core_expr -> Constr . [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
+## module_field -> Constr . DOT module_fun [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
+## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
## The known suffix of the stack is as follows:
## Constr
@@ -836,7 +889,7 @@ interactive_expr: Function With
interactive_expr: Ident DOT Ident ASS
##
-## Ends in an error in state: 133.
+## Ends in an error in state: 147.
##
## fun_call_or_par_or_projection -> projection . option(arguments) [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## path -> projection . [ With LBRACKET ]
@@ -848,15 +901,15 @@ interactive_expr: Ident DOT Ident ASS
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 321, spurious reduction of production nsepseq(selection,DOT) -> selection
-## In state 324, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT)
+## In state 123, spurious reduction of production nsepseq(selection,DOT) -> selection
+## In state 335, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT)
##
interactive_expr: Ident DOT Int DOT With
##
-## Ends in an error in state: 322.
+## Ends in an error in state: 124.
##
## nsepseq(selection,DOT) -> selection DOT . nsepseq(selection,DOT) [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
##
@@ -868,7 +921,7 @@ interactive_expr: Ident DOT Int DOT With
interactive_expr: Ident DOT Int While
##
-## Ends in an error in state: 321.
+## Ends in an error in state: 123.
##
## nsepseq(selection,DOT) -> selection . [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
## nsepseq(selection,DOT) -> selection . DOT nsepseq(selection,DOT) [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
@@ -881,7 +934,7 @@ interactive_expr: Ident DOT Int While
interactive_expr: Ident DOT With
##
-## Ends in an error in state: 318.
+## Ends in an error in state: 334.
##
## projection -> Ident DOT . nsepseq(selection,DOT) [ With VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE LBRACKET GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
##
@@ -893,7 +946,7 @@ interactive_expr: Ident DOT With
interactive_expr: Ident LBRACKET Unit VBAR
##
-## Ends in an error in state: 218.
+## Ends in an error in state: 234.
##
## brackets(expr) -> LBRACKET expr . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
##
@@ -904,23 +957,23 @@ interactive_expr: Ident LBRACKET Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
interactive_expr: Ident LBRACKET With
##
-## Ends in an error in state: 217.
+## Ends in an error in state: 233.
##
## brackets(expr) -> LBRACKET . expr RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ASS ARROW ]
##
@@ -932,7 +985,7 @@ interactive_expr: Ident LBRACKET With
interactive_expr: Ident LPAR Unit COMMA With
##
-## Ends in an error in state: 316.
+## Ends in an error in state: 332.
##
## nsepseq(expr,COMMA) -> expr COMMA . nsepseq(expr,COMMA) [ RPAR ]
##
@@ -944,7 +997,7 @@ interactive_expr: Ident LPAR Unit COMMA With
interactive_expr: Ident LPAR Unit VBAR
##
-## Ends in an error in state: 315.
+## Ends in an error in state: 331.
##
## nsepseq(expr,COMMA) -> expr . [ RPAR ]
## nsepseq(expr,COMMA) -> expr . COMMA nsepseq(expr,COMMA) [ RPAR ]
@@ -956,16 +1009,16 @@ interactive_expr: Ident LPAR Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
@@ -999,7 +1052,7 @@ interactive_expr: Ident While
interactive_expr: Ident With Record Ident DOT With
##
-## Ends in an error in state: 141.
+## Ends in an error in state: 155.
##
## nsepseq(field_name,DOT) -> Ident DOT . nsepseq(field_name,DOT) [ EQ ]
##
@@ -1011,7 +1064,7 @@ interactive_expr: Ident With Record Ident DOT With
interactive_expr: Ident With Record Ident EQ Bytes RBRACKET
##
-## Ends in an error in state: 214.
+## Ends in an error in state: 230.
##
## ne_injection(Record,field_path_assignment) -> Record sep_or_term_list(field_path_assignment,SEMI) . End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1022,26 +1075,26 @@ interactive_expr: Ident With Record Ident EQ Bytes RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 171, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
-## In state 207, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment
-## In state 146, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 187, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
+## In state 223, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment
+## In state 160, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI)
##
interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
##
-## Ends in an error in state: 212.
+## Ends in an error in state: 228.
##
## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACKET End ]
## seq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACKET End ]
@@ -1054,7 +1107,7 @@ interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR
##
-## Ends in an error in state: 211.
+## Ends in an error in state: 227.
##
## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACKET End ]
## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACKET End ]
@@ -1067,24 +1120,24 @@ interactive_expr: Ident With Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 171, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 187, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
##
interactive_expr: Ident With Record Ident EQ Bytes SEMI With
##
-## Ends in an error in state: 208.
+## Ends in an error in state: 224.
##
## nsepseq(field_path_assignment,SEMI) -> field_path_assignment SEMI . nsepseq(field_path_assignment,SEMI) [ RBRACKET End ]
## nseq(__anonymous_0(field_path_assignment,SEMI)) -> field_path_assignment SEMI . seq(__anonymous_0(field_path_assignment,SEMI)) [ RBRACKET End ]
@@ -1097,7 +1150,7 @@ interactive_expr: Ident With Record Ident EQ Bytes SEMI With
interactive_expr: Ident With Record Ident EQ Bytes VBAR
##
-## Ends in an error in state: 207.
+## Ends in an error in state: 223.
##
## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . [ RBRACKET End ]
## nsepseq(field_path_assignment,SEMI) -> field_path_assignment . SEMI nsepseq(field_path_assignment,SEMI) [ RBRACKET End ]
@@ -1110,24 +1163,24 @@ interactive_expr: Ident With Record Ident EQ Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 171, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 187, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
##
interactive_expr: Ident With Record Ident EQ With
##
-## Ends in an error in state: 148.
+## Ends in an error in state: 162.
##
## field_path_assignment -> nsepseq(field_name,DOT) EQ . expr [ SEMI RBRACKET End ]
##
@@ -1139,7 +1192,7 @@ interactive_expr: Ident With Record Ident EQ With
interactive_expr: Ident With Record Ident With
##
-## Ends in an error in state: 140.
+## Ends in an error in state: 154.
##
## nsepseq(field_name,DOT) -> Ident . [ EQ ]
## nsepseq(field_name,DOT) -> Ident . DOT nsepseq(field_name,DOT) [ EQ ]
@@ -1152,7 +1205,7 @@ interactive_expr: Ident With Record Ident With
interactive_expr: Ident With Record LBRACKET Ident EQ Bytes End
##
-## Ends in an error in state: 143.
+## Ends in an error in state: 157.
##
## ne_injection(Record,field_path_assignment) -> Record LBRACKET sep_or_term_list(field_path_assignment,SEMI) . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1163,26 +1216,26 @@ interactive_expr: Ident With Record LBRACKET Ident EQ Bytes End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 171, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
-## In state 207, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment
-## In state 146, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 187, spurious reduction of production field_path_assignment -> nsepseq(field_name,DOT) EQ expr
+## In state 223, spurious reduction of production nsepseq(field_path_assignment,SEMI) -> field_path_assignment
+## In state 160, spurious reduction of production sep_or_term_list(field_path_assignment,SEMI) -> nsepseq(field_path_assignment,SEMI)
##
interactive_expr: Ident With Record LBRACKET With
##
-## Ends in an error in state: 139.
+## Ends in an error in state: 153.
##
## ne_injection(Record,field_path_assignment) -> Record LBRACKET . sep_or_term_list(field_path_assignment,SEMI) RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1194,7 +1247,7 @@ interactive_expr: Ident With Record LBRACKET With
interactive_expr: Ident With Record With
##
-## Ends in an error in state: 138.
+## Ends in an error in state: 152.
##
## ne_injection(Record,field_path_assignment) -> Record . sep_or_term_list(field_path_assignment,SEMI) End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## ne_injection(Record,field_path_assignment) -> Record . LBRACKET sep_or_term_list(field_path_assignment,SEMI) RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -1207,7 +1260,7 @@ interactive_expr: Ident With Record With
interactive_expr: Ident With With
##
-## Ends in an error in state: 137.
+## Ends in an error in state: 151.
##
## update_record -> path With . ne_injection(Record,field_path_assignment) [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1219,7 +1272,7 @@ interactive_expr: Ident With With
interactive_expr: If Unit Then Unit Else With
##
-## Ends in an error in state: 330.
+## Ends in an error in state: 341.
##
## cond_expr -> If expr Then expr option(SEMI) Else . expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -1231,7 +1284,7 @@ interactive_expr: If Unit Then Unit Else With
interactive_expr: If Unit Then Unit SEMI EQ
##
-## Ends in an error in state: 329.
+## Ends in an error in state: 340.
##
## cond_expr -> If expr Then expr option(SEMI) . Else expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -1243,7 +1296,7 @@ interactive_expr: If Unit Then Unit SEMI EQ
interactive_expr: If Unit Then Unit VBAR
##
-## Ends in an error in state: 328.
+## Ends in an error in state: 339.
##
## cond_expr -> If expr Then expr . option(SEMI) Else expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -1254,23 +1307,23 @@ interactive_expr: If Unit Then Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
interactive_expr: If Unit Then With
##
-## Ends in an error in state: 327.
+## Ends in an error in state: 338.
##
## cond_expr -> If expr Then . expr option(SEMI) Else expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -1282,7 +1335,7 @@ interactive_expr: If Unit Then With
interactive_expr: If Unit VBAR
##
-## Ends in an error in state: 326.
+## Ends in an error in state: 337.
##
## cond_expr -> If expr . Then expr option(SEMI) Else expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
##
@@ -1293,16 +1346,16 @@ interactive_expr: If Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
@@ -1321,7 +1374,7 @@ interactive_expr: If With
interactive_expr: LPAR Bytes RPAR With
##
-## Ends in an error in state: 150.
+## Ends in an error in state: 164.
##
## fun_call_or_par_or_projection -> par(expr) . option(arguments) [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1333,7 +1386,7 @@ interactive_expr: LPAR Bytes RPAR With
interactive_expr: LPAR If Unit Then Bytes Else Bytes VBAR
##
-## Ends in an error in state: 334.
+## Ends in an error in state: 345.
##
## par(expr) -> LPAR expr . RPAR [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LPAR LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## tuple_comp -> expr . COMMA nsepseq(expr,COMMA) [ RPAR ]
@@ -1345,25 +1398,25 @@ interactive_expr: LPAR If Unit Then Bytes Else Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 331, spurious reduction of production cond_expr -> If expr Then expr option(SEMI) Else expr
-## In state 205, spurious reduction of production expr -> cond_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 342, spurious reduction of production cond_expr -> If expr Then expr option(SEMI) Else expr
+## In state 221, spurious reduction of production expr -> cond_expr
##
interactive_expr: LPAR Unit COLON Ident VBAR
##
-## Ends in an error in state: 340.
+## Ends in an error in state: 351.
##
## annot_expr -> LPAR disj_expr COLON type_expr . RPAR [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1384,7 +1437,7 @@ interactive_expr: LPAR Unit COLON Ident VBAR
interactive_expr: LPAR Unit COLON With
##
-## Ends in an error in state: 339.
+## Ends in an error in state: 350.
##
## annot_expr -> LPAR disj_expr COLON . type_expr RPAR [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1396,7 +1449,7 @@ interactive_expr: LPAR Unit COLON With
interactive_expr: LPAR Unit COMMA With
##
-## Ends in an error in state: 336.
+## Ends in an error in state: 347.
##
## tuple_comp -> expr COMMA . nsepseq(expr,COMMA) [ RPAR ]
##
@@ -1408,7 +1461,7 @@ interactive_expr: LPAR Unit COMMA With
interactive_expr: LPAR Unit VBAR
##
-## Ends in an error in state: 338.
+## Ends in an error in state: 349.
##
## annot_expr -> LPAR disj_expr . COLON type_expr RPAR [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## disj_expr -> disj_expr . Or conj_expr [ RPAR Or COMMA COLON ]
@@ -1421,15 +1474,15 @@ interactive_expr: LPAR Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
##
@@ -1450,7 +1503,7 @@ interactive_expr: LPAR With
interactive_expr: List LBRACKET Unit End
##
-## Ends in an error in state: 344.
+## Ends in an error in state: 355.
##
## injection(List,expr) -> List LBRACKET sep_or_term_list(expr,SEMI) . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1461,25 +1514,25 @@ interactive_expr: List LBRACKET Unit End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 348, spurious reduction of production nsepseq(expr,SEMI) -> expr
-## In state 347, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 359, spurious reduction of production nsepseq(expr,SEMI) -> expr
+## In state 358, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
##
interactive_expr: List LBRACKET With
##
-## Ends in an error in state: 342.
+## Ends in an error in state: 353.
##
## injection(List,expr) -> List LBRACKET . sep_or_term_list(expr,SEMI) RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## injection(List,expr) -> List LBRACKET . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -1492,7 +1545,7 @@ interactive_expr: List LBRACKET With
interactive_expr: List Unit RBRACKET
##
-## Ends in an error in state: 356.
+## Ends in an error in state: 367.
##
## injection(List,expr) -> List sep_or_term_list(expr,SEMI) . End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1503,18 +1556,18 @@ interactive_expr: List Unit RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 348, spurious reduction of production nsepseq(expr,SEMI) -> expr
-## In state 347, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 359, spurious reduction of production nsepseq(expr,SEMI) -> expr
+## In state 358, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
##
@@ -1548,7 +1601,7 @@ interactive_expr: MINUS With
interactive_expr: Map LBRACKET Unit ARROW Bytes End
##
-## Ends in an error in state: 361.
+## Ends in an error in state: 372.
##
## injection(Map,binding) -> Map LBRACKET sep_or_term_list(binding,SEMI) . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1559,26 +1612,26 @@ interactive_expr: Map LBRACKET Unit ARROW Bytes End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
-## In state 226, spurious reduction of production nsepseq(binding,SEMI) -> binding
-## In state 222, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
+## In state 242, spurious reduction of production nsepseq(binding,SEMI) -> binding
+## In state 238, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
##
interactive_expr: Map LBRACKET With
##
-## Ends in an error in state: 359.
+## Ends in an error in state: 370.
##
## injection(Map,binding) -> Map LBRACKET . sep_or_term_list(binding,SEMI) RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## injection(Map,binding) -> Map LBRACKET . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -1591,7 +1644,7 @@ interactive_expr: Map LBRACKET With
interactive_expr: Map Unit ARROW Bytes RBRACKET
##
-## Ends in an error in state: 364.
+## Ends in an error in state: 375.
##
## injection(Map,binding) -> Map sep_or_term_list(binding,SEMI) . End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1602,26 +1655,26 @@ interactive_expr: Map Unit ARROW Bytes RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
-## In state 226, spurious reduction of production nsepseq(binding,SEMI) -> binding
-## In state 222, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
+## In state 242, spurious reduction of production nsepseq(binding,SEMI) -> binding
+## In state 238, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
##
interactive_expr: Map Unit ARROW Bytes SEMI Unit ARROW Bytes SEMI With
##
-## Ends in an error in state: 231.
+## Ends in an error in state: 247.
##
## nsepseq(binding,SEMI) -> binding SEMI . nsepseq(binding,SEMI) [ RBRACKET End ]
## seq(__anonymous_0(binding,SEMI)) -> binding SEMI . seq(__anonymous_0(binding,SEMI)) [ RBRACKET End ]
@@ -1634,7 +1687,7 @@ interactive_expr: Map Unit ARROW Bytes SEMI Unit ARROW Bytes SEMI With
interactive_expr: Map Unit ARROW Bytes SEMI Unit ARROW Bytes VBAR
##
-## Ends in an error in state: 230.
+## Ends in an error in state: 246.
##
## nsepseq(binding,SEMI) -> binding . [ RBRACKET End ]
## nsepseq(binding,SEMI) -> binding . SEMI nsepseq(binding,SEMI) [ RBRACKET End ]
@@ -1647,24 +1700,24 @@ interactive_expr: Map Unit ARROW Bytes SEMI Unit ARROW Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
##
interactive_expr: Map Unit ARROW Bytes SEMI With
##
-## Ends in an error in state: 227.
+## Ends in an error in state: 243.
##
## nsepseq(binding,SEMI) -> binding SEMI . nsepseq(binding,SEMI) [ RBRACKET End ]
## nseq(__anonymous_0(binding,SEMI)) -> binding SEMI . seq(__anonymous_0(binding,SEMI)) [ RBRACKET End ]
@@ -1677,7 +1730,7 @@ interactive_expr: Map Unit ARROW Bytes SEMI With
interactive_expr: Map Unit ARROW Bytes VBAR
##
-## Ends in an error in state: 226.
+## Ends in an error in state: 242.
##
## nsepseq(binding,SEMI) -> binding . [ RBRACKET End ]
## nsepseq(binding,SEMI) -> binding . SEMI nsepseq(binding,SEMI) [ RBRACKET End ]
@@ -1690,24 +1743,24 @@ interactive_expr: Map Unit ARROW Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
##
interactive_expr: Map Unit ARROW With
##
-## Ends in an error in state: 224.
+## Ends in an error in state: 240.
##
## binding -> expr ARROW . expr [ SEMI RBRACKET End ]
##
@@ -1719,7 +1772,7 @@ interactive_expr: Map Unit ARROW With
interactive_expr: Map Unit VBAR
##
-## Ends in an error in state: 223.
+## Ends in an error in state: 239.
##
## binding -> expr . ARROW expr [ SEMI RBRACKET End ]
##
@@ -1730,16 +1783,16 @@ interactive_expr: Map Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
@@ -1761,7 +1814,7 @@ interactive_expr: Map With
interactive_expr: Not Bytes With
##
-## Ends in an error in state: 152.
+## Ends in an error in state: 166.
##
## add_expr -> mult_expr . [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## mult_expr -> mult_expr . TIMES unary_expr [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -1788,7 +1841,7 @@ interactive_expr: Not With
interactive_expr: Record Ident EQ Bytes RBRACKET
##
-## Ends in an error in state: 379.
+## Ends in an error in state: 390.
##
## record_expr -> Record sep_or_term_list(field_assignment,SEMI) . End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1799,26 +1852,26 @@ interactive_expr: Record Ident EQ Bytes RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 367, spurious reduction of production field_assignment -> Ident EQ expr
-## In state 372, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
-## In state 371, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 378, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 383, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
+## In state 382, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
##
interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
##
-## Ends in an error in state: 377.
+## Ends in an error in state: 388.
##
## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACKET End ]
## seq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACKET End ]
@@ -1831,7 +1884,7 @@ interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes SEMI With
interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR
##
-## Ends in an error in state: 376.
+## Ends in an error in state: 387.
##
## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACKET End ]
## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACKET End ]
@@ -1844,24 +1897,24 @@ interactive_expr: Record Ident EQ Bytes SEMI Ident EQ Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 367, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 378, spurious reduction of production field_assignment -> Ident EQ expr
##
interactive_expr: Record Ident EQ Bytes SEMI With
##
-## Ends in an error in state: 373.
+## Ends in an error in state: 384.
##
## nsepseq(field_assignment,SEMI) -> field_assignment SEMI . nsepseq(field_assignment,SEMI) [ RBRACKET End ]
## nseq(__anonymous_0(field_assignment,SEMI)) -> field_assignment SEMI . seq(__anonymous_0(field_assignment,SEMI)) [ RBRACKET End ]
@@ -1874,7 +1927,7 @@ interactive_expr: Record Ident EQ Bytes SEMI With
interactive_expr: Record Ident EQ Bytes VBAR
##
-## Ends in an error in state: 372.
+## Ends in an error in state: 383.
##
## nsepseq(field_assignment,SEMI) -> field_assignment . [ RBRACKET End ]
## nsepseq(field_assignment,SEMI) -> field_assignment . SEMI nsepseq(field_assignment,SEMI) [ RBRACKET End ]
@@ -1887,17 +1940,17 @@ interactive_expr: Record Ident EQ Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 367, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 378, spurious reduction of production field_assignment -> Ident EQ expr
##
@@ -1928,7 +1981,7 @@ interactive_expr: Record Ident With
interactive_expr: Record LBRACKET Ident EQ Bytes End
##
-## Ends in an error in state: 368.
+## Ends in an error in state: 379.
##
## record_expr -> Record LBRACKET sep_or_term_list(field_assignment,SEMI) . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1939,19 +1992,19 @@ interactive_expr: Record LBRACKET Ident EQ Bytes End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 367, spurious reduction of production field_assignment -> Ident EQ expr
-## In state 372, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
-## In state 371, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 378, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 383, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
+## In state 382, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
##
@@ -1983,7 +2036,7 @@ interactive_expr: Record With
interactive_expr: Set LBRACKET Unit End
##
-## Ends in an error in state: 383.
+## Ends in an error in state: 394.
##
## injection(Set,expr) -> Set LBRACKET sep_or_term_list(expr,SEMI) . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -1994,25 +2047,25 @@ interactive_expr: Set LBRACKET Unit End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 348, spurious reduction of production nsepseq(expr,SEMI) -> expr
-## In state 347, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 359, spurious reduction of production nsepseq(expr,SEMI) -> expr
+## In state 358, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
##
interactive_expr: Set LBRACKET With
##
-## Ends in an error in state: 381.
+## Ends in an error in state: 392.
##
## injection(Set,expr) -> Set LBRACKET . sep_or_term_list(expr,SEMI) RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## injection(Set,expr) -> Set LBRACKET . RBRACKET [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -2025,7 +2078,7 @@ interactive_expr: Set LBRACKET With
interactive_expr: Set Unit RBRACKET
##
-## Ends in an error in state: 386.
+## Ends in an error in state: 397.
##
## injection(Set,expr) -> Set sep_or_term_list(expr,SEMI) . End [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Contains Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -2036,25 +2089,25 @@ interactive_expr: Set Unit RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 348, spurious reduction of production nsepseq(expr,SEMI) -> expr
-## In state 347, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 359, spurious reduction of production nsepseq(expr,SEMI) -> expr
+## In state 358, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
##
interactive_expr: Set Unit SEMI Unit SEMI With
##
-## Ends in an error in state: 353.
+## Ends in an error in state: 364.
##
## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET End ]
## seq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET End ]
@@ -2067,7 +2120,7 @@ interactive_expr: Set Unit SEMI Unit SEMI With
interactive_expr: Set Unit SEMI Unit VBAR
##
-## Ends in an error in state: 352.
+## Ends in an error in state: 363.
##
## nsepseq(expr,SEMI) -> expr . [ RBRACKET End ]
## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET End ]
@@ -2080,23 +2133,23 @@ interactive_expr: Set Unit SEMI Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
interactive_expr: Set Unit SEMI With
##
-## Ends in an error in state: 349.
+## Ends in an error in state: 360.
##
## nsepseq(expr,SEMI) -> expr SEMI . nsepseq(expr,SEMI) [ RBRACKET End ]
## nseq(__anonymous_0(expr,SEMI)) -> expr SEMI . seq(__anonymous_0(expr,SEMI)) [ RBRACKET End ]
@@ -2109,7 +2162,7 @@ interactive_expr: Set Unit SEMI With
interactive_expr: Set Unit VBAR
##
-## Ends in an error in state: 348.
+## Ends in an error in state: 359.
##
## nsepseq(expr,SEMI) -> expr . [ RBRACKET End ]
## nsepseq(expr,SEMI) -> expr . SEMI nsepseq(expr,SEMI) [ RBRACKET End ]
@@ -2122,16 +2175,16 @@ interactive_expr: Set Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
@@ -2153,7 +2206,7 @@ interactive_expr: Set With
interactive_expr: Unit And With
##
-## Ends in an error in state: 202.
+## Ends in an error in state: 218.
##
## conj_expr -> conj_expr And . set_membership [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2165,7 +2218,7 @@ interactive_expr: Unit And With
interactive_expr: Unit CAT With
##
-## Ends in an error in state: 178.
+## Ends in an error in state: 194.
##
## cat_expr -> cons_expr CAT . cat_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2177,7 +2230,7 @@ interactive_expr: Unit CAT With
interactive_expr: Unit COLON
##
-## Ends in an error in state: 172.
+## Ends in an error in state: 188.
##
## disj_expr -> disj_expr . Or conj_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
## expr -> disj_expr . [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Of Function From End Else EOF Const COMMA Block Begin Attributes ARROW ]
@@ -2189,22 +2242,22 @@ interactive_expr: Unit COLON
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
##
interactive_expr: Unit CONS With
##
-## Ends in an error in state: 185.
+## Ends in an error in state: 201.
##
## cons_expr -> add_expr CONS . cons_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -2216,7 +2269,7 @@ interactive_expr: Unit CONS With
interactive_expr: Unit Contains With
##
-## Ends in an error in state: 175.
+## Ends in an error in state: 191.
##
## set_membership -> core_expr Contains . set_membership [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2228,7 +2281,7 @@ interactive_expr: Unit Contains With
interactive_expr: Unit EQ With
##
-## Ends in an error in state: 198.
+## Ends in an error in state: 214.
##
## comp_expr -> comp_expr EQ . cat_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2240,7 +2293,7 @@ interactive_expr: Unit EQ With
interactive_expr: Unit GE With
##
-## Ends in an error in state: 196.
+## Ends in an error in state: 212.
##
## comp_expr -> comp_expr GE . cat_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2252,7 +2305,7 @@ interactive_expr: Unit GE With
interactive_expr: Unit GT With
##
-## Ends in an error in state: 194.
+## Ends in an error in state: 210.
##
## comp_expr -> comp_expr GT . cat_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2264,7 +2317,7 @@ interactive_expr: Unit GT With
interactive_expr: Unit LE With
##
-## Ends in an error in state: 192.
+## Ends in an error in state: 208.
##
## comp_expr -> comp_expr LE . cat_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2276,7 +2329,7 @@ interactive_expr: Unit LE With
interactive_expr: Unit LT With
##
-## Ends in an error in state: 190.
+## Ends in an error in state: 206.
##
## comp_expr -> comp_expr LT . cat_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2288,7 +2341,7 @@ interactive_expr: Unit LT With
interactive_expr: Unit MINUS Unit With
##
-## Ends in an error in state: 184.
+## Ends in an error in state: 200.
##
## add_expr -> add_expr MINUS mult_expr . [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## mult_expr -> mult_expr . TIMES unary_expr [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -2303,7 +2356,7 @@ interactive_expr: Unit MINUS Unit With
interactive_expr: Unit MINUS With
##
-## Ends in an error in state: 183.
+## Ends in an error in state: 199.
##
## add_expr -> add_expr MINUS . mult_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -2315,7 +2368,7 @@ interactive_expr: Unit MINUS With
interactive_expr: Unit Mod With
##
-## Ends in an error in state: 168.
+## Ends in an error in state: 184.
##
## mult_expr -> mult_expr Mod . unary_expr [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -2327,7 +2380,7 @@ interactive_expr: Unit Mod With
interactive_expr: Unit NE With
##
-## Ends in an error in state: 188.
+## Ends in an error in state: 204.
##
## comp_expr -> comp_expr NE . cat_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of NE LT LE GT GE Function From End Else EQ EOF Const COMMA COLON Block Begin Attributes And ARROW ]
##
@@ -2339,7 +2392,7 @@ interactive_expr: Unit NE With
interactive_expr: Unit Or With
##
-## Ends in an error in state: 173.
+## Ends in an error in state: 189.
##
## disj_expr -> disj_expr Or . conj_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes ARROW ]
##
@@ -2351,7 +2404,7 @@ interactive_expr: Unit Or With
interactive_expr: Unit PLUS Unit With
##
-## Ends in an error in state: 182.
+## Ends in an error in state: 198.
##
## add_expr -> add_expr PLUS mult_expr . [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
## mult_expr -> mult_expr . TIMES unary_expr [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -2366,7 +2419,7 @@ interactive_expr: Unit PLUS Unit With
interactive_expr: Unit PLUS With
##
-## Ends in an error in state: 181.
+## Ends in an error in state: 197.
##
## add_expr -> add_expr PLUS . mult_expr [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE PLUS Or Of NE MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -2378,7 +2431,7 @@ interactive_expr: Unit PLUS With
interactive_expr: Unit SLASH With
##
-## Ends in an error in state: 166.
+## Ends in an error in state: 182.
##
## mult_expr -> mult_expr SLASH . unary_expr [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -2390,7 +2443,7 @@ interactive_expr: Unit SLASH With
interactive_expr: Unit TIMES With
##
-## Ends in an error in state: 153.
+## Ends in an error in state: 167.
##
## mult_expr -> mult_expr TIMES . unary_expr [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
##
@@ -2402,7 +2455,7 @@ interactive_expr: Unit TIMES With
interactive_expr: Unit VBAR
##
-## Ends in an error in state: 570.
+## Ends in an error in state: 586.
##
## interactive_expr -> expr . EOF [ # ]
##
@@ -2413,23 +2466,23 @@ interactive_expr: Unit VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
interactive_expr: Unit With
##
-## Ends in an error in state: 174.
+## Ends in an error in state: 190.
##
## set_membership -> core_expr . Contains set_membership [ VBAR Type To Then SEMI RPAR RBRACKET RBRACE Or Of Function From End Else EOF Const COMMA COLON Block Begin Attributes And ARROW ]
## unary_expr -> core_expr . [ VBAR Type To Then TIMES SLASH SEMI RPAR RBRACKET RBRACE PLUS Or Of NE Mod MINUS LT LE GT GE Function From End Else EQ EOF Const CONS COMMA COLON CAT Block Begin Attributes And ARROW ]
@@ -2442,7 +2495,7 @@ interactive_expr: Unit With
interactive_expr: With
##
-## Ends in an error in state: 568.
+## Ends in an error in state: 584.
##
## interactive_expr' -> . interactive_expr [ # ]
##
@@ -2454,7 +2507,7 @@ interactive_expr: With
contract: Attributes LBRACKET String End
##
-## Ends in an error in state: 514.
+## Ends in an error in state: 530.
##
## ne_injection(Attributes,String) -> Attributes LBRACKET sep_or_term_list(String,SEMI) . RBRACKET [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2465,15 +2518,15 @@ contract: Attributes LBRACKET String End
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 506, spurious reduction of production nsepseq(String,SEMI) -> String
-## In state 517, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI)
+## In state 522, spurious reduction of production nsepseq(String,SEMI) -> String
+## In state 533, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI)
##
contract: Attributes LBRACKET With
##
-## Ends in an error in state: 513.
+## Ends in an error in state: 529.
##
## ne_injection(Attributes,String) -> Attributes LBRACKET . sep_or_term_list(String,SEMI) RBRACKET [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2485,7 +2538,7 @@ contract: Attributes LBRACKET With
contract: Attributes String End Attributes String End SEMI With
##
-## Ends in an error in state: 563.
+## Ends in an error in state: 579.
##
## seq(declaration) -> declaration . seq(declaration) [ EOF ]
##
@@ -2497,7 +2550,7 @@ contract: Attributes String End Attributes String End SEMI With
contract: Attributes String End SEMI With
##
-## Ends in an error in state: 561.
+## Ends in an error in state: 577.
##
## nseq(declaration) -> declaration . seq(declaration) [ EOF ]
##
@@ -2509,7 +2562,7 @@ contract: Attributes String End SEMI With
contract: Attributes String End With
##
-## Ends in an error in state: 556.
+## Ends in an error in state: 572.
##
## attr_decl -> open_attr_decl . option(SEMI) [ Type Function EOF Const Attributes ]
##
@@ -2521,7 +2574,7 @@ contract: Attributes String End With
contract: Attributes String RBRACKET
##
-## Ends in an error in state: 518.
+## Ends in an error in state: 534.
##
## ne_injection(Attributes,String) -> Attributes sep_or_term_list(String,SEMI) . End [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2532,15 +2585,15 @@ contract: Attributes String RBRACKET
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 506, spurious reduction of production nsepseq(String,SEMI) -> String
-## In state 517, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI)
+## In state 522, spurious reduction of production nsepseq(String,SEMI) -> String
+## In state 533, spurious reduction of production sep_or_term_list(String,SEMI) -> nsepseq(String,SEMI)
##
contract: Attributes String SEMI String SEMI With
##
-## Ends in an error in state: 509.
+## Ends in an error in state: 525.
##
## nsepseq(String,SEMI) -> String SEMI . nsepseq(String,SEMI) [ RBRACKET End ]
## seq(__anonymous_0(String,SEMI)) -> String SEMI . seq(__anonymous_0(String,SEMI)) [ RBRACKET End ]
@@ -2553,7 +2606,7 @@ contract: Attributes String SEMI String SEMI With
contract: Attributes String SEMI String With
##
-## Ends in an error in state: 508.
+## Ends in an error in state: 524.
##
## nsepseq(String,SEMI) -> String . [ RBRACKET End ]
## nsepseq(String,SEMI) -> String . SEMI nsepseq(String,SEMI) [ RBRACKET End ]
@@ -2567,7 +2620,7 @@ contract: Attributes String SEMI String With
contract: Attributes String SEMI With
##
-## Ends in an error in state: 507.
+## Ends in an error in state: 523.
##
## nsepseq(String,SEMI) -> String SEMI . nsepseq(String,SEMI) [ RBRACKET End ]
## nseq(__anonymous_0(String,SEMI)) -> String SEMI . seq(__anonymous_0(String,SEMI)) [ RBRACKET End ]
@@ -2580,7 +2633,7 @@ contract: Attributes String SEMI With
contract: Attributes String With
##
-## Ends in an error in state: 506.
+## Ends in an error in state: 522.
##
## nsepseq(String,SEMI) -> String . [ RBRACKET End ]
## nsepseq(String,SEMI) -> String . SEMI nsepseq(String,SEMI) [ RBRACKET End ]
@@ -2594,7 +2647,7 @@ contract: Attributes String With
contract: Attributes With
##
-## Ends in an error in state: 505.
+## Ends in an error in state: 521.
##
## ne_injection(Attributes,String) -> Attributes . sep_or_term_list(String,SEMI) End [ Type SEMI RBRACE Function End EOF Const Attributes ]
## ne_injection(Attributes,String) -> Attributes . LBRACKET sep_or_term_list(String,SEMI) RBRACKET [ Type SEMI RBRACE Function End EOF Const Attributes ]
@@ -2607,7 +2660,7 @@ contract: Attributes With
contract: Const Ident COLON Ident EQ Bytes VBAR
##
-## Ends in an error in state: 554.
+## Ends in an error in state: 570.
##
## const_decl -> open_const_decl . option(SEMI) [ Type Function EOF Const Attributes ]
##
@@ -2618,25 +2671,25 @@ contract: Const Ident COLON Ident EQ Bytes VBAR
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 463, spurious reduction of production unqualified_decl(EQ) -> Ident COLON type_expr EQ expr
-## In state 464, spurious reduction of production open_const_decl -> Const unqualified_decl(EQ)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 478, spurious reduction of production unqualified_decl(EQ) -> Ident COLON type_expr EQ expr
+## In state 479, spurious reduction of production open_const_decl -> Const unqualified_decl(EQ)
##
contract: Const Ident COLON Ident EQ With
##
-## Ends in an error in state: 462.
+## Ends in an error in state: 477.
##
## unqualified_decl(EQ) -> Ident COLON type_expr EQ . expr [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2648,7 +2701,7 @@ contract: Const Ident COLON Ident EQ With
contract: Const Ident COLON Ident VBAR
##
-## Ends in an error in state: 461.
+## Ends in an error in state: 476.
##
## unqualified_decl(EQ) -> Ident COLON type_expr . EQ expr [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2669,7 +2722,7 @@ contract: Const Ident COLON Ident VBAR
contract: Const Ident COLON With
##
-## Ends in an error in state: 460.
+## Ends in an error in state: 475.
##
## unqualified_decl(EQ) -> Ident COLON . type_expr EQ expr [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2681,7 +2734,7 @@ contract: Const Ident COLON With
contract: Const Ident With
##
-## Ends in an error in state: 459.
+## Ends in an error in state: 474.
##
## unqualified_decl(EQ) -> Ident . COLON type_expr EQ expr [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2693,7 +2746,7 @@ contract: Const Ident With
contract: Const With
##
-## Ends in an error in state: 458.
+## Ends in an error in state: 473.
##
## open_const_decl -> Const . unqualified_decl(EQ) [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -2705,7 +2758,7 @@ contract: Const With
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of LBRACKET VBAR Block
##
-## Ends in an error in state: 469.
+## Ends in an error in state: 484.
##
## case(if_clause) -> Case expr Of LBRACKET option(VBAR) . cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2717,7 +2770,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of LBRACKET WILD ARROW Skip End
##
-## Ends in an error in state: 497.
+## Ends in an error in state: 513.
##
## case(if_clause) -> Case expr Of LBRACKET option(VBAR) cases(if_clause) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2728,15 +2781,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 499, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause)
-## In state 496, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR)
+## In state 515, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause)
+## In state 512, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of LBRACKET With
##
-## Ends in an error in state: 468.
+## Ends in an error in state: 483.
##
## case(if_clause) -> Case expr Of LBRACKET . option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2748,7 +2801,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of VBAR Block
##
-## Ends in an error in state: 502.
+## Ends in an error in state: 518.
##
## case(if_clause) -> Case expr Of option(VBAR) . cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2760,7 +2813,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of WILD ARROW Skip RBRACKET
##
-## Ends in an error in state: 503.
+## Ends in an error in state: 519.
##
## case(if_clause) -> Case expr Of option(VBAR) cases(if_clause) . End [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2771,15 +2824,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 499, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause)
-## In state 496, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR)
+## In state 515, spurious reduction of production nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause)
+## In state 512, spurious reduction of production cases(if_clause) -> nsepseq(case_clause(if_clause),VBAR)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of WILD ARROW Skip VBAR With
##
-## Ends in an error in state: 500.
+## Ends in an error in state: 516.
##
## nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) VBAR . nsepseq(case_clause(if_clause),VBAR) [ RBRACKET End ]
##
@@ -2791,7 +2844,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of WILD ARROW Skip With
##
-## Ends in an error in state: 499.
+## Ends in an error in state: 515.
##
## nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) . [ RBRACKET End ]
## nsepseq(case_clause(if_clause),VBAR) -> case_clause(if_clause) . VBAR nsepseq(case_clause(if_clause),VBAR) [ RBRACKET End ]
@@ -2804,7 +2857,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of WILD ARROW With
##
-## Ends in an error in state: 471.
+## Ends in an error in state: 486.
##
## case_clause(if_clause) -> pattern ARROW . if_clause [ VBAR RBRACKET End ]
##
@@ -2816,7 +2869,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of WILD RPAR
##
-## Ends in an error in state: 470.
+## Ends in an error in state: 485.
##
## case_clause(if_clause) -> pattern . ARROW if_clause [ VBAR RBRACKET End ]
##
@@ -2827,14 +2880,14 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 275, spurious reduction of production pattern -> core_pattern
+## In state 291, spurious reduction of production pattern -> core_pattern
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit Of With
##
-## Ends in an error in state: 467.
+## Ends in an error in state: 482.
##
## case(if_clause) -> Case expr Of . option(VBAR) cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ]
## case(if_clause) -> Case expr Of . LBRACKET option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -2847,7 +2900,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case Unit VBAR
##
-## Ends in an error in state: 466.
+## Ends in an error in state: 481.
##
## case(if_clause) -> Case expr . Of option(VBAR) cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ]
## case(if_clause) -> Case expr . Of LBRACKET option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -2859,23 +2912,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Case With
##
-## Ends in an error in state: 465.
+## Ends in an error in state: 480.
##
## case(if_clause) -> Case . expr Of option(VBAR) cases(if_clause) End [ VBAR SEMI RBRACKET RBRACE End Else ]
## case(if_clause) -> Case . expr Of LBRACKET option(VBAR) cases(if_clause) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -2886,9 +2939,34 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
+contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Constr DOT And With
+##
+## Ends in an error in state: 493.
+##
+## fun_call -> module_field . arguments [ VBAR SEMI RBRACKET RBRACE End Else ]
+##
+## The known suffix of the stack is as follows:
+## module_field
+##
+
+
+
+contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Constr With
+##
+## Ends in an error in state: 472.
+##
+## module_field -> Constr . DOT module_fun [ LPAR ]
+## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ LBRACKET ASS ]
+##
+## The known suffix of the stack is as follows:
+## Constr
+##
+
+
+
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident ARROW Ident With
##
-## Ends in an error in state: 445.
+## Ends in an error in state: 459.
##
## for_loop -> For Ident option(arrow_clause) . In collection expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2900,7 +2978,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident ARROW With
##
-## Ends in an error in state: 443.
+## Ends in an error in state: 457.
##
## arrow_clause -> ARROW . Ident [ In ]
##
@@ -2912,7 +2990,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident ASS Bytes To Unit VBAR
##
-## Ends in an error in state: 456.
+## Ends in an error in state: 470.
##
## for_loop -> For var_assign To expr . block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2923,23 +3001,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident ASS Bytes To With
##
-## Ends in an error in state: 455.
+## Ends in an error in state: 469.
##
## for_loop -> For var_assign To . expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2951,7 +3029,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident ASS Bytes VBAR
##
-## Ends in an error in state: 454.
+## Ends in an error in state: 468.
##
## for_loop -> For var_assign . To expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -2962,24 +3040,24 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 442, spurious reduction of production var_assign -> Ident ASS expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 456, spurious reduction of production var_assign -> Ident ASS expr
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident ASS With
##
-## Ends in an error in state: 441.
+## Ends in an error in state: 455.
##
## var_assign -> Ident ASS . expr [ To ]
##
@@ -2991,7 +3069,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident In Set Unit VBAR
##
-## Ends in an error in state: 451.
+## Ends in an error in state: 465.
##
## for_loop -> For Ident option(arrow_clause) In collection expr . block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3002,23 +3080,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident In Set With
##
-## Ends in an error in state: 450.
+## Ends in an error in state: 464.
##
## for_loop -> For Ident option(arrow_clause) In collection . expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3030,7 +3108,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident In With
##
-## Ends in an error in state: 446.
+## Ends in an error in state: 460.
##
## for_loop -> For Ident option(arrow_clause) In . collection expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3042,7 +3120,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For Ident With
##
-## Ends in an error in state: 440.
+## Ends in an error in state: 454.
##
## for_loop -> For Ident . option(arrow_clause) In collection expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
## var_assign -> Ident . ASS expr [ To ]
@@ -3055,7 +3133,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin For With
##
-## Ends in an error in state: 439.
+## Ends in an error in state: 453.
##
## for_loop -> For . var_assign To expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
## for_loop -> For . Ident option(arrow_clause) In collection expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3068,7 +3146,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Ident ASS With
##
-## Ends in an error in state: 483.
+## Ends in an error in state: 499.
##
## assignment -> lhs ASS . rhs [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3080,7 +3158,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Ident DOT Ident With
##
-## Ends in an error in state: 477.
+## Ends in an error in state: 492.
##
## lhs -> path . [ ASS ]
## map_lookup -> path . brackets(expr) [ ASS ]
@@ -3092,16 +3170,16 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 321, spurious reduction of production nsepseq(selection,DOT) -> selection
-## In state 324, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT)
-## In state 406, spurious reduction of production path -> projection
+## In state 123, spurious reduction of production nsepseq(selection,DOT) -> selection
+## In state 335, spurious reduction of production projection -> Ident DOT nsepseq(selection,DOT)
+## In state 420, spurious reduction of production path -> projection
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Ident LBRACKET Bytes RBRACKET With
##
-## Ends in an error in state: 482.
+## Ends in an error in state: 498.
##
## assignment -> lhs . ASS rhs [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3113,7 +3191,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Ident With
##
-## Ends in an error in state: 438.
+## Ends in an error in state: 452.
##
## fun_call -> Ident . arguments [ VBAR SEMI RBRACKET RBRACE End Else ]
## path -> Ident . [ LBRACKET ASS ]
@@ -3127,7 +3205,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If Unit Then LBRACE Skip End
##
-## Ends in an error in state: 534.
+## Ends in an error in state: 550.
##
## clause_block -> LBRACE sep_or_term_list(statement,SEMI) . RBRACE [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3138,15 +3216,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 520, spurious reduction of production nsepseq(statement,SEMI) -> statement
-## In state 537, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI)
+## In state 536, spurious reduction of production nsepseq(statement,SEMI) -> statement
+## In state 553, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If Unit Then LBRACE With
##
-## Ends in an error in state: 437.
+## Ends in an error in state: 451.
##
## clause_block -> LBRACE . sep_or_term_list(statement,SEMI) RBRACE [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3158,7 +3236,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If Unit Then Skip Else With
##
-## Ends in an error in state: 540.
+## Ends in an error in state: 556.
##
## conditional -> If expr Then if_clause option(SEMI) Else . if_clause [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3170,7 +3248,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If Unit Then Skip SEMI EQ
##
-## Ends in an error in state: 539.
+## Ends in an error in state: 555.
##
## conditional -> If expr Then if_clause option(SEMI) . Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3182,7 +3260,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If Unit Then Skip With
##
-## Ends in an error in state: 538.
+## Ends in an error in state: 554.
##
## conditional -> If expr Then if_clause . option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3194,7 +3272,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If Unit Then With
##
-## Ends in an error in state: 436.
+## Ends in an error in state: 450.
##
## conditional -> If expr Then . if_clause option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3206,7 +3284,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If Unit VBAR
##
-## Ends in an error in state: 435.
+## Ends in an error in state: 449.
##
## conditional -> If expr . Then if_clause option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3217,23 +3295,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin If With
##
-## Ends in an error in state: 434.
+## Ends in an error in state: 448.
##
## conditional -> If . expr Then if_clause option(SEMI) Else if_clause [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3243,9 +3321,45 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
+contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Constr DOT Ident With
+##
+## Ends in an error in state: 419.
+##
+## projection -> Constr DOT Ident . DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else ]
+##
+## The known suffix of the stack is as follows:
+## Constr DOT Ident
+##
+
+
+
+contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Constr DOT With
+##
+## Ends in an error in state: 418.
+##
+## projection -> Constr DOT . Ident DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else ]
+##
+## The known suffix of the stack is as follows:
+## Constr DOT
+##
+
+
+
+contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Constr With
+##
+## Ends in an error in state: 417.
+##
+## projection -> Constr . DOT Ident DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else ]
+##
+## The known suffix of the stack is as follows:
+## Constr
+##
+
+
+
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident VBAR
##
-## Ends in an error in state: 411.
+## Ends in an error in state: 425.
##
## map_patch -> Patch path . With ne_injection(Map,binding) [ VBAR SEMI RBRACKET RBRACE End Else ]
## record_patch -> Patch path . With ne_injection(Record,field_assignment) [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3258,14 +3372,14 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 405, spurious reduction of production path -> Ident
+## In state 416, spurious reduction of production path -> Ident
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident While
##
-## Ends in an error in state: 405.
+## Ends in an error in state: 416.
##
## path -> Ident . [ With VBAR SEMI RBRACKET RBRACE End Else ]
## projection -> Ident . DOT nsepseq(selection,DOT) [ With VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3278,7 +3392,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Map LBRACKET Unit ARROW Bytes End
##
-## Ends in an error in state: 427.
+## Ends in an error in state: 441.
##
## ne_injection(Map,binding) -> Map LBRACKET sep_or_term_list(binding,SEMI) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3289,26 +3403,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
-## In state 226, spurious reduction of production nsepseq(binding,SEMI) -> binding
-## In state 222, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
+## In state 242, spurious reduction of production nsepseq(binding,SEMI) -> binding
+## In state 238, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Map LBRACKET With
##
-## Ends in an error in state: 426.
+## Ends in an error in state: 440.
##
## ne_injection(Map,binding) -> Map LBRACKET . sep_or_term_list(binding,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3320,7 +3434,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Map Unit ARROW Bytes RBRACKET
##
-## Ends in an error in state: 429.
+## Ends in an error in state: 443.
##
## ne_injection(Map,binding) -> Map sep_or_term_list(binding,SEMI) . End [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3331,26 +3445,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 225, spurious reduction of production binding -> expr ARROW expr
-## In state 226, spurious reduction of production nsepseq(binding,SEMI) -> binding
-## In state 222, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 241, spurious reduction of production binding -> expr ARROW expr
+## In state 242, spurious reduction of production nsepseq(binding,SEMI) -> binding
+## In state 238, spurious reduction of production sep_or_term_list(binding,SEMI) -> nsepseq(binding,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Map With
##
-## Ends in an error in state: 425.
+## Ends in an error in state: 439.
##
## ne_injection(Map,binding) -> Map . sep_or_term_list(binding,SEMI) End [ VBAR SEMI RBRACKET RBRACE End Else ]
## ne_injection(Map,binding) -> Map . LBRACKET sep_or_term_list(binding,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3363,7 +3477,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Record Ident EQ Bytes RBRACKET
##
-## Ends in an error in state: 423.
+## Ends in an error in state: 437.
##
## ne_injection(Record,field_assignment) -> Record sep_or_term_list(field_assignment,SEMI) . End [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3374,26 +3488,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 367, spurious reduction of production field_assignment -> Ident EQ expr
-## In state 372, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
-## In state 371, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 378, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 383, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
+## In state 382, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Record LBRACKET Ident EQ Bytes End
##
-## Ends in an error in state: 421.
+## Ends in an error in state: 435.
##
## ne_injection(Record,field_assignment) -> Record LBRACKET sep_or_term_list(field_assignment,SEMI) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3404,26 +3518,26 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 367, spurious reduction of production field_assignment -> Ident EQ expr
-## In state 372, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
-## In state 371, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 378, spurious reduction of production field_assignment -> Ident EQ expr
+## In state 383, spurious reduction of production nsepseq(field_assignment,SEMI) -> field_assignment
+## In state 382, spurious reduction of production sep_or_term_list(field_assignment,SEMI) -> nsepseq(field_assignment,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Record LBRACKET With
##
-## Ends in an error in state: 420.
+## Ends in an error in state: 434.
##
## ne_injection(Record,field_assignment) -> Record LBRACKET . sep_or_term_list(field_assignment,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3435,7 +3549,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Record With
##
-## Ends in an error in state: 419.
+## Ends in an error in state: 433.
##
## ne_injection(Record,field_assignment) -> Record . sep_or_term_list(field_assignment,SEMI) End [ VBAR SEMI RBRACKET RBRACE End Else ]
## ne_injection(Record,field_assignment) -> Record . LBRACKET sep_or_term_list(field_assignment,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3448,7 +3562,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Set LBRACKET Unit End
##
-## Ends in an error in state: 415.
+## Ends in an error in state: 429.
##
## ne_injection(Set,expr) -> Set LBRACKET sep_or_term_list(expr,SEMI) . RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3459,25 +3573,25 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 348, spurious reduction of production nsepseq(expr,SEMI) -> expr
-## In state 347, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 359, spurious reduction of production nsepseq(expr,SEMI) -> expr
+## In state 358, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Set LBRACKET With
##
-## Ends in an error in state: 414.
+## Ends in an error in state: 428.
##
## ne_injection(Set,expr) -> Set LBRACKET . sep_or_term_list(expr,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3489,7 +3603,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Set Unit RBRACKET
##
-## Ends in an error in state: 417.
+## Ends in an error in state: 431.
##
## ne_injection(Set,expr) -> Set sep_or_term_list(expr,SEMI) . End [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3500,25 +3614,25 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 348, spurious reduction of production nsepseq(expr,SEMI) -> expr
-## In state 347, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 359, spurious reduction of production nsepseq(expr,SEMI) -> expr
+## In state 358, spurious reduction of production sep_or_term_list(expr,SEMI) -> nsepseq(expr,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With Set With
##
-## Ends in an error in state: 413.
+## Ends in an error in state: 427.
##
## ne_injection(Set,expr) -> Set . sep_or_term_list(expr,SEMI) End [ VBAR SEMI RBRACKET RBRACE End Else ]
## ne_injection(Set,expr) -> Set . LBRACKET sep_or_term_list(expr,SEMI) RBRACKET [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3531,7 +3645,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch Ident With With
##
-## Ends in an error in state: 412.
+## Ends in an error in state: 426.
##
## map_patch -> Patch path With . ne_injection(Map,binding) [ VBAR SEMI RBRACKET RBRACE End Else ]
## record_patch -> Patch path With . ne_injection(Record,field_assignment) [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3545,7 +3659,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Patch With
##
-## Ends in an error in state: 410.
+## Ends in an error in state: 424.
##
## map_patch -> Patch . path With ne_injection(Map,binding) [ VBAR SEMI RBRACKET RBRACE End Else ]
## record_patch -> Patch . path With ne_injection(Record,field_assignment) [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3559,7 +3673,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Remove Unit From Map With
##
-## Ends in an error in state: 408.
+## Ends in an error in state: 422.
##
## map_remove -> Remove expr From Map . path [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3571,7 +3685,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Remove Unit From Set With
##
-## Ends in an error in state: 404.
+## Ends in an error in state: 415.
##
## set_remove -> Remove expr From Set . path [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3583,7 +3697,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Remove Unit From With
##
-## Ends in an error in state: 403.
+## Ends in an error in state: 414.
##
## map_remove -> Remove expr From . Map path [ VBAR SEMI RBRACKET RBRACE End Else ]
## set_remove -> Remove expr From . Set path [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3596,7 +3710,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Remove Unit VBAR
##
-## Ends in an error in state: 402.
+## Ends in an error in state: 413.
##
## map_remove -> Remove expr . From Map path [ VBAR SEMI RBRACKET RBRACE End Else ]
## set_remove -> Remove expr . From Set path [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3608,23 +3722,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Remove With
##
-## Ends in an error in state: 401.
+## Ends in an error in state: 412.
##
## map_remove -> Remove . expr From Map path [ VBAR SEMI RBRACKET RBRACE End Else ]
## set_remove -> Remove . expr From Set path [ VBAR SEMI RBRACKET RBRACE End Else ]
@@ -3637,7 +3751,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Skip End While
##
-## Ends in an error in state: 548.
+## Ends in an error in state: 564.
##
## open_fun_decl -> Function Ident parameters COLON type_expr Is block . With expr [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -3649,7 +3763,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Skip End With With
##
-## Ends in an error in state: 549.
+## Ends in an error in state: 565.
##
## open_fun_decl -> Function Ident parameters COLON type_expr Is block With . expr [ Type SEMI RBRACE Function End EOF Const Attributes ]
##
@@ -3661,7 +3775,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Skip RBRACE
##
-## Ends in an error in state: 542.
+## Ends in an error in state: 558.
##
## block -> Begin sep_or_term_list(statement,SEMI) . End [ With VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3672,15 +3786,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 520, spurious reduction of production nsepseq(statement,SEMI) -> statement
-## In state 537, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI)
+## In state 536, spurious reduction of production nsepseq(statement,SEMI) -> statement
+## In state 553, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Skip SEMI Skip SEMI With
##
-## Ends in an error in state: 523.
+## Ends in an error in state: 539.
##
## nsepseq(statement,SEMI) -> statement SEMI . nsepseq(statement,SEMI) [ RBRACE End ]
## seq(__anonymous_0(statement,SEMI)) -> statement SEMI . seq(__anonymous_0(statement,SEMI)) [ RBRACE End ]
@@ -3693,7 +3807,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Skip SEMI Skip With
##
-## Ends in an error in state: 522.
+## Ends in an error in state: 538.
##
## nsepseq(statement,SEMI) -> statement . [ RBRACE End ]
## nsepseq(statement,SEMI) -> statement . SEMI nsepseq(statement,SEMI) [ RBRACE End ]
@@ -3707,7 +3821,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Skip SEMI With
##
-## Ends in an error in state: 521.
+## Ends in an error in state: 537.
##
## nsepseq(statement,SEMI) -> statement SEMI . nsepseq(statement,SEMI) [ RBRACE End ]
## nseq(__anonymous_0(statement,SEMI)) -> statement SEMI . seq(__anonymous_0(statement,SEMI)) [ RBRACE End ]
@@ -3720,7 +3834,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Skip With
##
-## Ends in an error in state: 520.
+## Ends in an error in state: 536.
##
## nsepseq(statement,SEMI) -> statement . [ RBRACE End ]
## nsepseq(statement,SEMI) -> statement . SEMI nsepseq(statement,SEMI) [ RBRACE End ]
@@ -3734,7 +3848,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Var Ident COLON Ident ASS With
##
-## Ends in an error in state: 397.
+## Ends in an error in state: 408.
##
## unqualified_decl(ASS) -> Ident COLON type_expr ASS . expr [ SEMI RBRACE End ]
##
@@ -3746,7 +3860,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Var Ident COLON Ident VBAR
##
-## Ends in an error in state: 396.
+## Ends in an error in state: 407.
##
## unqualified_decl(ASS) -> Ident COLON type_expr . ASS expr [ SEMI RBRACE End ]
##
@@ -3767,7 +3881,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Var Ident COLON With
##
-## Ends in an error in state: 395.
+## Ends in an error in state: 406.
##
## unqualified_decl(ASS) -> Ident COLON . type_expr ASS expr [ SEMI RBRACE End ]
##
@@ -3779,7 +3893,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Var Ident With
##
-## Ends in an error in state: 394.
+## Ends in an error in state: 405.
##
## unqualified_decl(ASS) -> Ident . COLON type_expr ASS expr [ SEMI RBRACE End ]
##
@@ -3791,7 +3905,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin Var With
##
-## Ends in an error in state: 393.
+## Ends in an error in state: 404.
##
## open_var_decl -> Var . unqualified_decl(ASS) [ SEMI RBRACE End ]
##
@@ -3803,7 +3917,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin While Unit VBAR
##
-## Ends in an error in state: 391.
+## Ends in an error in state: 402.
##
## while_loop -> While expr . block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3814,23 +3928,23 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin While With
##
-## Ends in an error in state: 390.
+## Ends in an error in state: 401.
##
## while_loop -> While . expr block [ VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3842,7 +3956,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin With
##
-## Ends in an error in state: 392.
+## Ends in an error in state: 403.
##
## block -> Begin . sep_or_term_list(statement,SEMI) End [ With VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3854,7 +3968,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Begin
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Block LBRACE Skip End
##
-## Ends in an error in state: 545.
+## Ends in an error in state: 561.
##
## block -> Block LBRACE sep_or_term_list(statement,SEMI) . RBRACE [ With VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3865,15 +3979,15 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Block
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 520, spurious reduction of production nsepseq(statement,SEMI) -> statement
-## In state 537, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI)
+## In state 536, spurious reduction of production nsepseq(statement,SEMI) -> statement
+## In state 553, spurious reduction of production sep_or_term_list(statement,SEMI) -> nsepseq(statement,SEMI)
##
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Block LBRACE With
##
-## Ends in an error in state: 389.
+## Ends in an error in state: 400.
##
## block -> Block LBRACE . sep_or_term_list(statement,SEMI) RBRACE [ With VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3885,7 +3999,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Block
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Block With
##
-## Ends in an error in state: 388.
+## Ends in an error in state: 399.
##
## block -> Block . LBRACE sep_or_term_list(statement,SEMI) RBRACE [ With VBAR SEMI RBRACKET RBRACE End Else ]
##
@@ -3897,7 +4011,7 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Block
contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Bytes VBAR
##
-## Ends in an error in state: 552.
+## Ends in an error in state: 568.
##
## fun_decl -> open_fun_decl . option(SEMI) [ Type Function EOF Const Attributes ]
##
@@ -3908,17 +4022,17 @@ contract: Function Ident LPAR Const Ident COLON Ident RPAR COLON Ident Is Bytes
## This implies that, although the LR(1) items shown above provide an
## accurate view of the past (what has been recognized so far), they
## may provide an INCOMPLETE view of the future (what was expected next).
-## In state 174, spurious reduction of production unary_expr -> core_expr
-## In state 126, spurious reduction of production mult_expr -> unary_expr
-## In state 152, spurious reduction of production add_expr -> mult_expr
-## In state 180, spurious reduction of production cons_expr -> add_expr
-## In state 177, spurious reduction of production cat_expr -> cons_expr
-## In state 200, spurious reduction of production comp_expr -> cat_expr
-## In state 187, spurious reduction of production set_membership -> comp_expr
-## In state 128, spurious reduction of production conj_expr -> set_membership
-## In state 204, spurious reduction of production disj_expr -> conj_expr
-## In state 172, spurious reduction of production expr -> disj_expr
-## In state 547, spurious reduction of production open_fun_decl -> Function Ident parameters COLON type_expr Is expr
+## In state 190, spurious reduction of production unary_expr -> core_expr
+## In state 140, spurious reduction of production mult_expr -> unary_expr
+## In state 166, spurious reduction of production add_expr -> mult_expr
+## In state 196, spurious reduction of production cons_expr -> add_expr
+## In state 193, spurious reduction of production cat_expr -> cons_expr
+## In state 216, spurious reduction of production comp_expr -> cat_expr
+## In state 203, spurious reduction of production set_membership -> comp_expr
+## In state 142, spurious reduction of production conj_expr -> set_membership
+## In state 220, spurious reduction of production disj_expr -> conj_expr
+## In state 188, spurious reduction of production expr -> disj_expr
+## In state 563, spurious reduction of production open_fun_decl -> Function Ident parameters COLON type_expr Is expr
##
diff --git a/src/passes/1-parser/reasonligo/.links b/src/passes/1-parser/reasonligo/.links
index 543bf9ea3..d93e4b610 100644
--- a/src/passes/1-parser/reasonligo/.links
+++ b/src/passes/1-parser/reasonligo/.links
@@ -25,4 +25,5 @@ Stubs/Parser_cameligo.ml
../cameligo/ParserLog.mli
../cameligo/ParserLog.ml
../cameligo/Scoping.mli
-../cameligo/Scoping.ml
\ No newline at end of file
+../cameligo/Scoping.ml
+$HOME/git/ligo/_build/default/src/passes/1-parser/reasonligo/ParErr.ml
\ No newline at end of file
diff --git a/src/passes/1-parser/reasonligo/LexToken.mll b/src/passes/1-parser/reasonligo/LexToken.mll
index e4689082a..842c0fee1 100644
--- a/src/passes/1-parser/reasonligo/LexToken.mll
+++ b/src/passes/1-parser/reasonligo/LexToken.mll
@@ -238,12 +238,9 @@ let keywords = [
(fun reg -> True reg);
(fun reg -> Type reg)]
-(* See: http://caml.inria.fr/pub/docs/manual-ocaml/lex.html#sec86 and
- https://github.com/facebook/reason/blob/master/src/reason-parser/reason_parser.mly *)
let reserved =
let open SSet in
empty
- |> add "and"
|> add "as"
|> add "asr"
|> add "begin"
diff --git a/src/passes/1-parser/reasonligo/LexerMain.ml b/src/passes/1-parser/reasonligo/LexerMain.ml
index f0589990c..7e8e063da 100644
--- a/src/passes/1-parser/reasonligo/LexerMain.ml
+++ b/src/passes/1-parser/reasonligo/LexerMain.ml
@@ -1,5 +1,7 @@
(* Driver for the ReasonLIGO lexer *)
+module Region = Simple_utils.Region
+
module IO =
struct
let ext = ".religo"
diff --git a/src/passes/1-parser/reasonligo/Parser.mly b/src/passes/1-parser/reasonligo/Parser.mly
index 48765c19a..defde2e55 100644
--- a/src/passes/1-parser/reasonligo/Parser.mly
+++ b/src/passes/1-parser/reasonligo/Parser.mly
@@ -24,22 +24,22 @@ type 'a sequence_or_record =
let (<@) f g x = f (g x)
-(**
- Covert nsepseq to a chain of TFun's.
-
+(**
+ Covert nsepseq to a chain of TFun's.
+
Necessary to handle cases like:
`type foo = (int, int) => int;`
*)
-let rec nsepseq_to_curry hd rest =
- match hd, rest with
- | hd, (sep, item) :: rest ->
+let rec nsepseq_to_curry hd rest =
+ match hd, rest with
+ | hd, (sep, item) :: rest ->
let start = type_expr_to_region hd in
let stop = nsepseq_to_region type_expr_to_region (hd, rest) in
- let region = cover start stop in
+ let region = cover start stop in
TFun {
- value = hd, sep, (nsepseq_to_curry item rest);
+ value = hd, sep, (nsepseq_to_curry item rest);
region
- }
+ }
| hd, [] -> hd
(* END HEADER *)
@@ -178,34 +178,34 @@ type_expr:
cartesian | sum_type | record_type { $1 }
type_expr_func:
- "=>" cartesian {
+ "=>" cartesian {
$1, $2
}
cartesian:
core_type { $1 }
-| type_name type_expr_func {
+| type_name type_expr_func {
let (arrow, c) = $2 in
let value = TVar $1, arrow, c in
let region = cover $1.region (type_expr_to_region c) in
TFun { region; value }
}
-| "(" cartesian ")" type_expr_func {
+| "(" cartesian ")" type_expr_func {
let (arrow, c) = $4 in
let value = $2, arrow, c in
let region = cover $1 (type_expr_to_region c) in
TFun { region; value }
}
| "(" cartesian "," nsepseq(cartesian,",") ")" type_expr_func? {
- match $6 with
- | Some (arrow, c) ->
+ match $6 with
+ | Some (arrow, c) ->
let (hd, rest) = Utils.nsepseq_cons $2 $3 $4 in
- let rest = rest @ [(arrow, c)] in
+ let rest = rest @ [(arrow, c)] in
nsepseq_to_curry hd rest
| None ->
let value = Utils.nsepseq_cons $2 $3 $4 in
let region = cover $1 $5 in
- TProd {region; value}
+ TProd {region; value}
}
core_type:
@@ -515,30 +515,30 @@ fun_expr:
_
}; _ }; region} ->
- let expr_to_type = function
+ let expr_to_type = function
| EVar v -> TVar v
| e -> let open! SyntaxError
in raise (Error (WrongFunctionArguments e))
in
let type_expr = (
match type_expr with
- | TProd {value; _} ->
+ | TProd {value; _} ->
let (hd, rest) = value in
- let rest = rest @ [(arrow, expr_to_type body)] in
- nsepseq_to_curry hd rest
- | e ->
+ let rest = rest @ [(arrow, expr_to_type body)] in
+ nsepseq_to_curry hd rest
+ | e ->
TFun {
value = e, arrow, expr_to_type body;
region = fun_region
- }
+ }
)
- in
+ in
PTyped {
value = {
pattern;
colon;
type_expr
- };
+ };
region;
}, []
| EPar {value = {inside = fun_arg; _ }; _} ->
@@ -552,7 +552,7 @@ fun_expr:
arg_to_pattern (fst fun_args), bindings
| EUnit _ as e ->
arg_to_pattern e, []
- | EVar _ as e ->
+ | EVar _ as e ->
arg_to_pattern e, []
| e -> let open! SyntaxError
in raise (Error (WrongFunctionArguments e))
@@ -834,10 +834,13 @@ core_expr:
| par(expr) { EPar $1 }
module_field:
- module_name "." field_name {
- let region = cover $1.region $3.region
- and value = $1.value ^ "." ^ $3.value
- in {region; value} }
+ module_name "." module_fun {
+ let region = cover $1.region $3.region in
+ {region; value = $1.value ^ "." ^ $3.value} }
+
+module_fun:
+ field_name { $1 }
+| "or" { {value="or"; region=$1} }
selection:
"[" "" "]" selection {
diff --git a/src/passes/1-parser/shared/Lexer.mll b/src/passes/1-parser/shared/Lexer.mll
index 8b213f70b..569486ef7 100644
--- a/src/passes/1-parser/shared/Lexer.mll
+++ b/src/passes/1-parser/shared/Lexer.mll
@@ -499,7 +499,7 @@ module Make (Token: TOKEN) : (S with module Token = Token) =
| Error Token.Non_canonical_zero ->
fail region Non_canonical_zero
- let mk_tz state buffer =
+ let mk_tez state buffer =
let region, lexeme, state = sync state buffer in
let lexeme = Str.string_before lexeme (String.index lexeme 't') in
let lexeme = Z.mul (Z.of_int 1_000_000) (Z.of_string lexeme) in
@@ -508,7 +508,7 @@ module Make (Token: TOKEN) : (S with module Token = Token) =
| Error Token.Non_canonical_zero ->
fail region Non_canonical_zero
- let format_tz s =
+ let format_tez s =
match String.index s '.' with
index ->
let len = String.length s in
@@ -522,10 +522,11 @@ module Make (Token: TOKEN) : (S with module Token = Token) =
if Z.equal Z.one should_be_1 then Some (Q.num mutez) else None
| exception Not_found -> assert false
- let mk_tz_decimal state buffer =
+ let mk_tez_decimal state buffer =
let region, lexeme, state = sync state buffer in
+ let lexeme = Str.(global_replace (regexp "_") "" lexeme) in
let lexeme = Str.string_before lexeme (String.index lexeme 't') in
- match format_tz lexeme with
+ match format_tez lexeme with
None -> assert false
| Some tz ->
match Token.mk_mutez (Z.to_string tz ^ "mutez") region with
@@ -573,7 +574,7 @@ let nl = ['\n' '\r'] | "\r\n"
let blank = ' ' | '\t'
let digit = ['0'-'9']
let natural = digit | digit (digit | '_')* digit
-let decimal = digit+ '.' digit+
+let decimal = natural '.' natural
let small = ['a'-'z']
let capital = ['A'-'Z']
let letter = small | capital
@@ -624,9 +625,9 @@ and scan state = parse
| natural 'n' { mk_nat state lexbuf |> enqueue }
| natural "mutez" { mk_mutez state lexbuf |> enqueue }
| natural "tz"
-| natural "tez" { mk_tz state lexbuf |> enqueue }
+| natural "tez" { mk_tez state lexbuf |> enqueue }
| decimal "tz"
-| decimal "tez" { mk_tz_decimal state lexbuf |> enqueue }
+| decimal "tez" { mk_tez_decimal state lexbuf |> enqueue }
| natural { mk_int state lexbuf |> enqueue }
| symbol { mk_sym state lexbuf |> enqueue }
| eof { mk_eof state lexbuf |> enqueue }
diff --git a/src/passes/operators/operators.ml b/src/passes/operators/operators.ml
index 456c0172a..7cc7f556d 100644
--- a/src/passes/operators/operators.ml
+++ b/src/passes/operators/operators.ml
@@ -35,8 +35,8 @@ module Simplify = struct
let unit_expr = make_t @@ T_constant TC_unit
let type_constants s =
- match s with
- | "chain_id" -> ok TC_chain_id
+ match s with
+ "chain_id" -> ok TC_chain_id
| "unit" -> ok TC_unit
| "string" -> ok TC_string
| "bytes" -> ok TC_bytes
@@ -50,95 +50,196 @@ module Simplify = struct
| "key_hash" -> ok TC_key_hash
| "signature" -> ok TC_signature
| "timestamp" -> ok TC_timestamp
- | _ -> simple_fail @@ "Not a type_constant " ^ s
+ | _ -> simple_fail @@ "Not a built-in type (" ^ s ^ ")."
let type_operators s =
- match s with
- | "list" -> ok @@ TC_list unit_expr
+ match s with
+ "list" -> ok @@ TC_list unit_expr
| "option" -> ok @@ TC_option unit_expr
| "set" -> ok @@ TC_set unit_expr
| "map" -> ok @@ TC_map (unit_expr,unit_expr)
| "big_map" -> ok @@ TC_big_map (unit_expr,unit_expr)
| "contract" -> ok @@ TC_contract unit_expr
- | _ -> simple_fail @@ "Not a typ_operator " ^ s
+ | _ -> simple_fail @@ "Not a built-in type (" ^ s ^ ")."
module Pascaligo = struct
-
let constants = function
- | "assert" -> ok C_ASSERTION
- | "get_chain_id" -> ok C_CHAIN_ID
- | "transaction" -> ok C_CALL
- | "get_contract" -> ok C_CONTRACT
- | "get_contract_opt"-> ok C_CONTRACT_OPT
- | "get_entrypoint" -> ok C_CONTRACT_ENTRYPOINT
- | "get_entrypoint_opt" -> ok C_CONTRACT_ENTRYPOINT_OPT
- | "size" -> ok C_SIZE
- | "int" -> ok C_INT
- | "abs" -> ok C_ABS
- | "is_nat" -> ok C_IS_NAT
- | "amount" -> ok C_AMOUNT
- | "balance" -> ok C_BALANCE
- | "now" -> ok C_NOW
- | "unit" -> ok C_UNIT
- | "source" -> ok C_SOURCE
- | "sender" -> ok C_SENDER
- | "failwith" -> ok C_FAILWITH
- | "bitwise_or" -> ok C_OR
- | "bitwise_and" -> ok C_AND
- | "bitwise_xor" -> ok C_XOR
- | "bitwise_lsl" -> ok C_LSL
- | "bitwise_lsr" -> ok C_LSR
- | "string_concat" -> ok C_CONCAT
- | "string_slice" -> ok C_SLICE
- | "crypto_check" -> ok C_CHECK_SIGNATURE
- | "crypto_hash_key" -> ok C_HASH_KEY
- | "bytes_concat" -> ok C_CONCAT
- | "bytes_slice" -> ok C_SLICE
- | "bytes_pack" -> ok C_BYTES_PACK
- | "bytes_unpack" -> ok C_BYTES_UNPACK
- | "set_empty" -> ok C_SET_EMPTY
- | "set_mem" -> ok C_SET_MEM
- | "set_add" -> ok C_SET_ADD
- | "set_remove" -> ok C_SET_REMOVE
- | "set_iter" -> ok C_SET_ITER
- | "set_fold" -> ok C_SET_FOLD
- | "list_iter" -> ok C_LIST_ITER
- | "list_fold" -> ok C_LIST_FOLD
- | "list_map" -> ok C_LIST_MAP
- | "get_force" -> ok C_MAP_FIND
- | "map_iter" -> ok C_MAP_ITER
- | "map_map" -> ok C_MAP_MAP
- | "map_fold" -> ok C_MAP_FOLD
- | "map_remove" -> ok C_MAP_REMOVE
- | "map_update" -> ok C_MAP_UPDATE
- | "map_get" -> ok C_MAP_FIND_OPT
- | "map_mem" -> ok C_MAP_MEM
- | "sha_256" -> ok C_SHA256
- | "sha_512" -> ok C_SHA512
- | "blake2b" -> ok C_BLAKE2b
- | "cons" -> ok C_CONS
- | "EQ" -> ok C_EQ
- | "NEQ" -> ok C_NEQ
- | "NEG" -> ok C_NEG
- | "ADD" -> ok C_ADD
- | "SUB" -> ok C_SUB
- | "TIMES" -> ok C_MUL
- | "DIV" -> ok C_DIV
- | "MOD" -> ok C_MOD
- | "NOT" -> ok C_NOT
- | "AND" -> ok C_AND
- | "OR" -> ok C_OR
- | "GT" -> ok C_GT
- | "GE" -> ok C_GE
- | "LT" -> ok C_LT
- | "LE" -> ok C_LE
- | "CONS" -> ok C_CONS
- | "address" -> ok C_ADDRESS
- | "self_address" -> ok C_SELF_ADDRESS
- | "implicit_account"-> ok C_IMPLICIT_ACCOUNT
- | "set_delegate" -> ok C_SET_DELEGATE
- | _ -> simple_fail "Not a PascaLIGO constant"
+ (* Tezos module (ex-Michelson) *)
+
+ | "Tezos.chain_id" -> ok C_CHAIN_ID
+ | "chain_id" -> ok C_CHAIN_ID (* Deprecated *)
+ | "get_chain_id" -> ok C_CHAIN_ID (* Deprecated *)
+ | "Tezos.balance" -> ok C_BALANCE
+ | "balance" -> ok C_BALANCE (* Deprecated *)
+ | "Tezos.now" -> ok C_NOW
+ | "now" -> ok C_NOW (* Deprecated *)
+ | "Tezos.amount" -> ok C_AMOUNT
+ | "amount" -> ok C_AMOUNT (* Deprecated *)
+ | "Tezos.sender" -> ok C_SENDER
+ | "sender" -> ok C_SENDER (* Deprecated *)
+ | "Tezos.address" -> ok C_ADDRESS
+ | "address" -> ok C_ADDRESS (* Deprecated *)
+ | "Tezos.self_address" -> ok C_SELF_ADDRESS
+ | "self_address" -> ok C_SELF_ADDRESS (* Deprecated *)
+ | "Tezos.implicit_account" -> ok C_IMPLICIT_ACCOUNT
+ | "implicit_account" -> ok C_IMPLICIT_ACCOUNT (* Deprecated *)
+ | "Tezos.source" -> ok C_SOURCE
+ | "source" -> ok C_SOURCE (* Deprecated *)
+ | "Tezos.failwith" -> ok C_FAILWITH
+ | "failwith" -> ok C_FAILWITH
+
+ | "Tezos.transaction" -> ok C_CALL
+ | "transaction" -> ok C_CALL (* Deprecated *)
+ | "Tezos.set_delegate" -> ok C_SET_DELEGATE
+ | "set_delegate" -> ok C_SET_DELEGATE (* Deprecated *)
+ | "get_contract" -> ok C_CONTRACT (* Deprecated *)
+ | "Tezos.get_contract_opt" -> ok C_CONTRACT_OPT
+ | "get_contract_opt" -> ok C_CONTRACT_OPT (* Deprecated *)
+ | "get_entrypoint" -> ok C_CONTRACT_ENTRYPOINT (* Deprecated *)
+ | "Tezos.get_entrypoint_opt" -> ok C_CONTRACT_ENTRYPOINT_OPT
+ | "get_entrypoint_opt" -> ok C_CONTRACT_ENTRYPOINT_OPT (* Deprecated *)
+
+ | "Michelson.is_nat" -> ok C_IS_NAT (* Deprecated *)
+ | "is_nat" -> ok C_IS_NAT
+ | "int" -> ok C_INT
+ | "abs" -> ok C_ABS
+ | "unit" -> ok C_UNIT
+
+ | "NEG" -> ok C_NEG
+ | "ADD" -> ok C_ADD
+ | "SUB" -> ok C_SUB
+ | "TIMES" -> ok C_MUL
+ | "DIV" -> ok C_DIV
+ | "MOD" -> ok C_MOD
+ | "EQ" -> ok C_EQ
+ | "NOT" -> ok C_NOT
+ | "AND" -> ok C_AND
+ | "OR" -> ok C_OR
+ | "GT" -> ok C_GT
+ | "GE" -> ok C_GE
+ | "LT" -> ok C_LT
+ | "LE" -> ok C_LE
+ | "CONS" -> ok C_CONS
+ | "cons" -> ok C_CONS (* Deprecated *)
+ | "NEQ" -> ok C_NEQ
+
+ (* Crypto module *)
+
+ | "Crypto.check" -> ok C_CHECK_SIGNATURE
+ | "crypto_check" -> ok C_CHECK_SIGNATURE (* Deprecated *)
+ | "Crypto.hash_key" -> ok C_HASH_KEY
+ | "crypto_hash_key" -> ok C_HASH_KEY (* Deprecated *)
+ | "Crypto.blake2b" -> ok C_BLAKE2b
+ | "blake2b" -> ok C_BLAKE2b (* Deprecated *)
+ | "Crypto.sha256" -> ok C_SHA256
+ | "sha_256" -> ok C_SHA256 (* Deprecated *)
+ | "Crypto.sha512" -> ok C_SHA512
+ | "sha_512" -> ok C_SHA512 (* Deprecated *)
+
+ (* Bytes module *)
+
+ | "Bytes.pack" -> ok C_BYTES_PACK
+ | "bytes_pack" -> ok C_BYTES_PACK (* Deprecated *)
+ | "Bytes.unpack" -> ok C_BYTES_UNPACK
+ | "bytes_unpack" -> ok C_BYTES_UNPACK (* Deprecated *)
+ | "Bytes.length" -> ok C_SIZE
+ | "Bytes.size" -> ok C_SIZE
+ | "bytes_concat" -> ok C_CONCAT (* Deprecated *)
+ | "Bytes.concat" -> ok C_CONCAT
+ | "Bytes.slice" -> ok C_SLICE
+ | "bytes_slice" -> ok C_SLICE (* Deprecated *)
+ | "Bytes.sub" -> ok C_SLICE
+
+ (* List module *)
+
+ | "List.length" -> ok C_SIZE
+ | "List.size" -> ok C_SIZE
+ | "list_size" -> ok C_SIZE (* Deprecated *)
+ | "List.iter" -> ok C_LIST_ITER
+ | "list_iter" -> ok C_LIST_ITER (* Deprecated *)
+ | "List.map" -> ok C_LIST_MAP
+ | "list_map" -> ok C_LIST_MAP (* Deprecated *)
+ | "List.fold" -> ok C_LIST_FOLD
+ | "list_fold" -> ok C_LIST_FOLD (* Deprecated *)
+
+ (* Set module *)
+
+ | "Set.size" -> ok C_SIZE
+ | "set_size" -> ok C_SIZE (* Deprecated *)
+ | "set_empty" -> ok C_SET_EMPTY (* Deprecated *)
+ | "Set.mem" -> ok C_SET_MEM
+ | "set_mem" -> ok C_SET_MEM (* Deprecated *)
+ | "Set.add" -> ok C_SET_ADD
+ | "set_add" -> ok C_SET_ADD (* Deprecated *)
+ | "Set.remove" -> ok C_SET_REMOVE
+ | "set_remove" -> ok C_SET_REMOVE (* Deprecated *)
+ | "Set.iter" -> ok C_SET_ITER
+ | "set_iter" -> ok C_SET_ITER (* Deprecated *)
+ | "Set.fold" -> ok C_SET_FOLD
+ | "set_fold" -> ok C_SET_FOLD (* Deprecated *)
+
+ (* Map module *)
+
+ | "get_force" -> ok C_MAP_FIND (* Deprecated *)
+ | "map_get" -> ok C_MAP_FIND_OPT (* Deprecated *)
+ | "Map.find_opt" -> ok C_MAP_FIND_OPT
+ | "Map.update" -> ok C_MAP_UPDATE
+ | "map_update" -> ok C_MAP_UPDATE (* Deprecated *)
+ | "map_remove" -> ok C_MAP_REMOVE (* Deprecated *)
+ | "Map.iter" -> ok C_MAP_ITER
+ | "map_iter" -> ok C_MAP_ITER (* Deprecated *)
+ | "Map.map" -> ok C_MAP_MAP
+ | "map_map" -> ok C_MAP_MAP (* Deprecated *)
+ | "Map.fold" -> ok C_MAP_FOLD
+ | "map_fold" -> ok C_MAP_FOLD (* Deprecated *)
+ | "Map.mem" -> ok C_MAP_MEM
+ | "map_mem" -> ok C_MAP_MEM (* Deprecated *)
+ | "Map.size" -> ok C_SIZE
+ | "map_size" -> ok C_SIZE (* Deprecated *)
+
+ (* Big_map module *)
+
+ | "Big_map.find_opt" -> ok C_MAP_FIND_OPT
+ | "Big_map.update" -> ok C_MAP_UPDATE
+ | "Big_map.literal" -> ok C_BIG_MAP_LITERAL
+ | "Big_map.empty" -> ok C_BIG_MAP_EMPTY
+ | "Big_map.size" -> ok C_SIZE
+ | "Big_map.mem" -> ok C_MAP_MEM
+ | "Big_map.iter" -> ok C_MAP_ITER
+ | "Big_map.map" -> ok C_MAP_MAP
+ | "Big_map.fold" -> ok C_MAP_FOLD
+ | "Big_map.remove" -> ok C_MAP_REMOVE
+
+ (* Bitwise module *)
+
+ | "Bitwise.or" -> ok C_OR
+ | "bitwise_or" -> ok C_OR (* Deprecated *)
+ | "Bitwise.and" -> ok C_AND
+ | "bitwise_and" -> ok C_AND (* Deprecated *)
+ | "Bitwise.xor" -> ok C_XOR
+ | "bitwise_xor" -> ok C_XOR (* Deprecated *)
+ | "Bitwise.shift_left" -> ok C_LSL
+ | "bitwise_lsl" -> ok C_LSL (* Deprecated *)
+ | "Bitwise.shift_right" -> ok C_LSR
+ | "bitwise_lsr" -> ok C_LSR (* Deprecated *)
+
+ (* String module *)
+
+ | "String.length" -> ok C_SIZE
+ | "String.size" -> ok C_SIZE
+ | "String.slice" -> ok C_SLICE
+ | "string_slice" -> ok C_SLICE (* Deprecated *)
+ | "String.sub" -> ok C_SLICE
+ | "String.concat" -> ok C_CONCAT
+ | "string_concat" -> ok C_CONCAT (* Deprecated *)
+
+ (* Others *)
+
+ | "assert" -> ok C_ASSERTION
+ | "size" -> ok C_SIZE (* Deprecated *)
+
+ | _ -> simple_fail "Not a PascaLIGO built-in."
let type_constants = type_constants
let type_operators = type_operators
@@ -147,119 +248,163 @@ module Simplify = struct
module Cameligo = struct
let constants = function
- | "assert" -> ok C_ASSERTION
- | "chain_id" -> ok C_CHAIN_ID
- | "Current.balance" -> ok C_BALANCE
- | "balance" -> ok C_BALANCE
- | "Current.time" -> ok C_NOW
- | "time" -> ok C_NOW
- | "Current.amount" -> ok C_AMOUNT
- | "amount" -> ok C_AMOUNT
- | "Current.sender" -> ok C_SENDER
- | "Current.address" -> ok C_ADDRESS
- | "Current.self_address" -> ok C_SELF_ADDRESS
- | "Current.implicit_account" -> ok C_IMPLICIT_ACCOUNT
- | "sender" -> ok C_SENDER
- | "Current.source" -> ok C_SOURCE
- | "source" -> ok C_SOURCE
- | "Current.failwith" -> ok C_FAILWITH
- | "failwith" -> ok C_FAILWITH
+ (* Tezos (ex-Michelson, ex-Current, ex-Operation) *)
- | "Crypto.blake2b" -> ok C_BLAKE2b
- | "Crypto.sha256" -> ok C_SHA256
- | "Crypto.sha512" -> ok C_SHA512
- | "Crypto.hash_key" -> ok C_HASH_KEY
- | "Crypto.check" -> ok C_CHECK_SIGNATURE
+ | "Tezos.chain_id" -> ok C_CHAIN_ID
+ | "chain_id" -> ok C_CHAIN_ID (* Deprecated *)
+ | "Tezos.balance" -> ok C_BALANCE
+ | "Current.balance" -> ok C_BALANCE (* Deprecated *)
+ | "balance" -> ok C_BALANCE (* Deprecated *)
+ | "Tezos.now" -> ok C_NOW
+ | "Current.time" -> ok C_NOW (* Deprecated *)
+ | "time" -> ok C_NOW (* Deprecated *)
+ | "Tezos.amount" -> ok C_AMOUNT
+ | "Current.amount" -> ok C_AMOUNT (* Deprecated *)
+ | "amount" -> ok C_AMOUNT (* Deprecated *)
+ | "Tezos.sender" -> ok C_SENDER
+ | "Current.sender" -> ok C_SENDER (* Deprecated *)
+ | "sender" -> ok C_SENDER (* Deprecated *)
+ | "Tezos.address" -> ok C_ADDRESS
+ | "Current.address" -> ok C_ADDRESS (* Deprecated *)
+ | "Tezos.self_address" -> ok C_SELF_ADDRESS
+ | "Current.self_address" -> ok C_SELF_ADDRESS (* Deprecated *)
+ | "Tezos.implicit_account" -> ok C_IMPLICIT_ACCOUNT
+ | "Current.implicit_account" -> ok C_IMPLICIT_ACCOUNT (* Deprecated *)
+ | "Tezos.source" -> ok C_SOURCE
+ | "Current.source" -> ok C_SOURCE (* Deprecated *)
+ | "source" -> ok C_SOURCE (* Deprecated *)
+ | "Tezos.failwith" -> ok C_FAILWITH
+ | "Current.failwith" -> ok C_FAILWITH (* Deprecated *)
+ | "failwith" -> ok C_FAILWITH
- | "Bytes.pack" -> ok C_BYTES_PACK
- | "Bytes.unpack" -> ok C_BYTES_UNPACK
- | "Bytes.length" -> ok C_SIZE
- | "Bytes.size" -> ok C_SIZE
- | "Bytes.concat" -> ok C_CONCAT
- | "Bytes.slice" -> ok C_SLICE
- | "Bytes.sub" -> ok C_SLICE
+ | "Tezos.transaction" -> ok C_CALL
+ | "Operation.transaction" -> ok C_CALL (* Deprecated *)
+ | "Tezos.set_delegate" -> ok C_SET_DELEGATE (* Deprecated *)
+ | "Operation.set_delegate" -> ok C_SET_DELEGATE (* Deprecated *)
+ | "Operation.get_contract" -> ok C_CONTRACT (* Deprecated *)
+ | "Tezos.get_contract_opt" -> ok C_CONTRACT_OPT
+ | "Operation.get_contract_opt" -> ok C_CONTRACT_OPT (* Deprecated *)
+ | "Operation.get_entrypoint" -> ok C_CONTRACT_ENTRYPOINT (* Deprecated *)
+ | "Tezos.get_entrypoint_opt" -> ok C_CONTRACT_ENTRYPOINT_OPT
+ | "Operation.get_entrypoint_opt" -> ok C_CONTRACT_ENTRYPOINT_OPT (* Deprecated *)
- | "Set.mem" -> ok C_SET_MEM
- | "Set.iter" -> ok C_SET_ITER
- | "Set.empty" -> ok C_SET_EMPTY
- | "Set.literal" -> ok C_SET_LITERAL
- | "Set.add" -> ok C_SET_ADD
- | "Set.remove" -> ok C_SET_REMOVE
- | "Set.fold" -> ok C_SET_FOLD
- | "Set.size" -> ok C_SIZE
+ | "Michelson.is_nat" -> ok C_IS_NAT (* Deprecated *)
+ | "is_nat" -> ok C_IS_NAT
+ | "int" -> ok C_INT
+ | "abs" -> ok C_ABS
+ | "unit" -> ok C_UNIT
- | "Map.find_opt" -> ok C_MAP_FIND_OPT
- | "Map.find" -> ok C_MAP_FIND
- | "Map.update" -> ok C_MAP_UPDATE
- | "Map.add" -> ok C_MAP_ADD
- | "Map.remove" -> ok C_MAP_REMOVE
- | "Map.iter" -> ok C_MAP_ITER
- | "Map.map" -> ok C_MAP_MAP
- | "Map.fold" -> ok C_MAP_FOLD
- | "Map.mem" -> ok C_MAP_MEM
- | "Map.empty" -> ok C_MAP_EMPTY
- | "Map.literal" -> ok C_MAP_LITERAL
- | "Map.size" -> ok C_SIZE
+ | "NEG" -> ok C_NEG
+ | "ADD" -> ok C_ADD
+ | "SUB" -> ok C_SUB
+ | "TIMES" -> ok C_MUL
+ | "DIV" -> ok C_DIV
+ | "MOD" -> ok C_MOD
+ | "EQ" -> ok C_EQ
+ | "NOT" -> ok C_NOT
+ | "AND" -> ok C_AND
+ | "OR" -> ok C_OR
+ | "GT" -> ok C_GT
+ | "GE" -> ok C_GE
+ | "LT" -> ok C_LT
+ | "LE" -> ok C_LE
+ | "CONS" -> ok C_CONS
+ | "NEQ" -> ok C_NEQ
- | "Big_map.find_opt" -> ok C_MAP_FIND_OPT
- | "Big_map.find" -> ok C_MAP_FIND
- | "Big_map.update" -> ok C_MAP_UPDATE
- | "Big_map.add" -> ok C_MAP_ADD
- | "Big_map.remove" -> ok C_MAP_REMOVE
- | "Big_map.literal" -> ok C_BIG_MAP_LITERAL
- | "Big_map.empty" -> ok C_BIG_MAP_EMPTY
+ (* Crypto module *)
- | "Bitwise.lor" -> ok C_OR
- | "Bitwise.land" -> ok C_AND
- | "Bitwise.lxor" -> ok C_XOR
- | "Bitwise.shift_left" -> ok C_LSL
- | "Bitwise.shift_right" -> ok C_LSR
+ | "Crypto.check" -> ok C_CHECK_SIGNATURE
+ | "Crypto.hash_key" -> ok C_HASH_KEY
+ | "Crypto.blake2b" -> ok C_BLAKE2b
+ | "Crypto.sha256" -> ok C_SHA256
+ | "Crypto.sha512" -> ok C_SHA512
- | "String.length" -> ok C_SIZE
- | "String.size" -> ok C_SIZE
- | "String.slice" -> ok C_SLICE
- | "String.sub" -> ok C_SLICE
- | "String.concat" -> ok C_CONCAT
+ (* Bytes module *)
- | "List.length" -> ok C_SIZE
- | "List.size" -> ok C_SIZE
- | "List.iter" -> ok C_LIST_ITER
- | "List.map" -> ok C_LIST_MAP
- | "List.fold" -> ok C_LIST_FOLD
+ | "Bytes.pack" -> ok C_BYTES_PACK
+ | "Bytes.unpack" -> ok C_BYTES_UNPACK
+ | "Bytes.length" -> ok C_SIZE
+ | "Bytes.size" -> ok C_SIZE
+ | "Bytes.concat" -> ok C_CONCAT
+ | "Bytes.slice" -> ok C_SLICE
+ | "Bytes.sub" -> ok C_SLICE
- | "Loop.fold_while" -> ok C_FOLD_WHILE
- | "continue" -> ok C_CONTINUE
- | "stop" -> ok C_STOP
+ (* List module *)
- | "Operation.transaction" -> ok C_CALL
- | "Operation.set_delegate" -> ok C_SET_DELEGATE
- | "Operation.get_contract" -> ok C_CONTRACT
- | "Operation.get_contract_opt" -> ok C_CONTRACT_OPT
- | "Operation.get_entrypoint" -> ok C_CONTRACT_ENTRYPOINT
- | "Operation.get_entrypoint_opt" -> ok C_CONTRACT_ENTRYPOINT_OPT
- | "int" -> ok C_INT
- | "abs" -> ok C_ABS
- | "unit" -> ok C_UNIT
+ | "List.length" -> ok C_SIZE
+ | "List.size" -> ok C_SIZE
+ | "List.iter" -> ok C_LIST_ITER
+ | "List.map" -> ok C_LIST_MAP
+ | "List.fold" -> ok C_LIST_FOLD
- | "NEG" -> ok C_NEG
- | "ADD" -> ok C_ADD
- | "SUB" -> ok C_SUB
- | "TIMES" -> ok C_MUL
- | "DIV" -> ok C_DIV
- | "MOD" -> ok C_MOD
- | "EQ" -> ok C_EQ
- | "NOT" -> ok C_NOT
- | "AND" -> ok C_AND
- | "OR" -> ok C_OR
- | "GT" -> ok C_GT
- | "GE" -> ok C_GE
- | "LT" -> ok C_LT
- | "LE" -> ok C_LE
- | "CONS" -> ok C_CONS
- | "NEQ" -> ok C_NEQ
+ (* Set module *)
- | "Michelson.is_nat" -> ok C_IS_NAT
- | _ -> simple_fail "Not a constant"
+ | "Set.mem" -> ok C_SET_MEM
+ | "Set.iter" -> ok C_SET_ITER
+ | "Set.empty" -> ok C_SET_EMPTY
+ | "Set.literal" -> ok C_SET_LITERAL
+ | "Set.add" -> ok C_SET_ADD
+ | "Set.remove" -> ok C_SET_REMOVE
+ | "Set.fold" -> ok C_SET_FOLD
+ | "Set.size" -> ok C_SIZE
+
+ (* Map module *)
+
+ | "Map.find_opt" -> ok C_MAP_FIND_OPT
+ | "Map.find" -> ok C_MAP_FIND (* Deprecated *)
+ | "Map.update" -> ok C_MAP_UPDATE
+ | "Map.add" -> ok C_MAP_ADD
+ | "Map.remove" -> ok C_MAP_REMOVE
+ | "Map.iter" -> ok C_MAP_ITER
+ | "Map.map" -> ok C_MAP_MAP
+ | "Map.fold" -> ok C_MAP_FOLD
+ | "Map.mem" -> ok C_MAP_MEM
+ | "Map.empty" -> ok C_MAP_EMPTY
+ | "Map.literal" -> ok C_MAP_LITERAL
+ | "Map.size" -> ok C_SIZE
+
+ (* Big_map module *)
+
+ | "Big_map.find_opt" -> ok C_MAP_FIND_OPT
+ | "Big_map.find" -> ok C_MAP_FIND
+ | "Big_map.update" -> ok C_MAP_UPDATE
+ | "Big_map.add" -> ok C_MAP_ADD
+ | "Big_map.remove" -> ok C_MAP_REMOVE
+ | "Big_map.literal" -> ok C_BIG_MAP_LITERAL
+ | "Big_map.empty" -> ok C_BIG_MAP_EMPTY
+
+ (* Bitwise module *)
+
+ | "Bitwise.or" -> ok C_OR
+ | "Bitwise.lor" -> ok C_OR (* Deprecated *)
+ | "Bitwise.and" -> ok C_AND
+ | "Bitwise.land" -> ok C_AND (* Deprecated *)
+ | "Bitwise.xor" -> ok C_XOR
+ | "Bitwise.lxor" -> ok C_XOR (* Deprecated *)
+ | "Bitwise.shift_left" -> ok C_LSL
+ | "Bitwise.shift_right" -> ok C_LSR
+
+ (* String module *)
+
+ | "String.length" -> ok C_SIZE
+ | "String.size" -> ok C_SIZE
+ | "String.slice" -> ok C_SLICE
+ | "String.sub" -> ok C_SLICE
+ | "String.concat" -> ok C_CONCAT
+
+ (* Loop module *)
+
+ | "Loop.fold_while" -> ok C_FOLD_WHILE
+ | "Loop.resume" -> ok C_CONTINUE
+ | "continue" -> ok C_CONTINUE (* Deprecated *)
+ | "Loop.stop" -> ok C_STOP
+ | "stop" -> ok C_STOP (* Deprecated *)
+
+ (* Others *)
+
+ | "assert" -> ok C_ASSERTION
+
+ | _ -> simple_fail "Not a CameLIGO built-in."
let type_constants = type_constants
let type_operators = type_operators
@@ -821,19 +966,19 @@ module Typer = struct
let%bind key = get_t_set set in
if eq_1 elt key
then ok @@ t_bool ()
- else fail @@ Operator_errors.type_error "Set_mem: elt and set don't match" elt key ()
+ else fail @@ Operator_errors.type_error "Set.mem: elt and set don't match" elt key ()
let set_add = typer_2 "SET_ADD" @@ fun elt set ->
let%bind key = get_t_set set in
if eq_1 elt key
then ok set
- else fail @@ Operator_errors.type_error "Set_add: elt and set don't match" elt key ()
+ else fail @@ Operator_errors.type_error "Set.add: elt and set don't match" elt key ()
let set_remove = typer_2 "SET_REMOVE" @@ fun elt set ->
let%bind key = get_t_set set in
if eq_1 elt key
then ok set
- else fail @@ Operator_errors.type_error "Set_remove: elt and set don't match" key elt ()
+ else fail @@ Operator_errors.type_error "Set.remove: elt and set don't match" key elt ()
let set_iter = typer_2 "SET_ITER" @@ fun body set ->
let%bind (arg , res) = get_t_function body in
diff --git a/src/test/contracts/bitwise_arithmetic.ligo b/src/test/contracts/bitwise_arithmetic.ligo
index 0a0d1079a..5818a47b5 100644
--- a/src/test/contracts/bitwise_arithmetic.ligo
+++ b/src/test/contracts/bitwise_arithmetic.ligo
@@ -1,11 +1,7 @@
// Test PascaLIGO bitwise operators
-function or_op (const n : nat) : nat is bitwise_or (n, 4n)
-
-function and_op (const n : nat) : nat is bitwise_and (n, 7n)
-
-function xor_op (const n : nat) : nat is bitwise_xor (n, 7n)
-
-function lsl_op (const n : nat) : nat is bitwise_lsl (n, 7n)
-
-function lsr_op (const n : nat) : nat is bitwise_lsr (n, 7n)
+function or_op (const n : nat) : nat is Bitwise.or (n, 4n)
+function and_op (const n : nat) : nat is Bitwise.and (n, 7n)
+function xor_op (const n : nat) : nat is Bitwise.xor (n, 7n)
+function lsl_op (const n : nat) : nat is Bitwise.shift_left (n, 7n)
+function lsr_op (const n : nat) : nat is Bitwise.shift_right (n, 7n)
diff --git a/src/test/contracts/bitwise_arithmetic.mligo b/src/test/contracts/bitwise_arithmetic.mligo
index a56375f81..d79cbe348 100644
--- a/src/test/contracts/bitwise_arithmetic.mligo
+++ b/src/test/contracts/bitwise_arithmetic.mligo
@@ -1,7 +1,7 @@
(* Test CameLIGO bitwise operators *)
-let or_op (n: nat) : nat = Bitwise.lor n 4n
-let and_op (n: nat) : nat = Bitwise.land n 7n
-let xor_op (n: nat) : nat = Bitwise.lxor n 7n
+let or_op (n: nat) : nat = Bitwise.or n 4n
+let and_op (n: nat) : nat = Bitwise.and n 7n
+let xor_op (n: nat) : nat = Bitwise.xor n 7n
let lsl_op (n: nat) : nat = Bitwise.shift_left n 7n
let lsr_op (n: nat) : nat = Bitwise.shift_right n 7n
diff --git a/src/test/contracts/bitwise_arithmetic.religo b/src/test/contracts/bitwise_arithmetic.religo
index 2cc390b8a..e75821c3a 100644
--- a/src/test/contracts/bitwise_arithmetic.religo
+++ b/src/test/contracts/bitwise_arithmetic.religo
@@ -1,7 +1,7 @@
/* Test ReasonLigo bitwise operators */
-let or_op = (n: nat): nat => Bitwise.lor(n, 4n);
-let and_op = (n: nat): nat => Bitwise.land(n, 7n);
-let xor_op = (n: nat): nat => Bitwise.lxor(n, 7n);
-let lsl_op = (n: nat) : nat => Bitwise.shift_left(n, 7n);
-let lsr_op = (n: nat) : nat => Bitwise.shift_right(n, 7n);
\ No newline at end of file
+let or_op = (n : nat) : nat => Bitwise.or (n, 4n);
+let and_op = (n : nat) : nat => Bitwise.and (n, 7n);
+let xor_op = (n : nat) : nat => Bitwise.xor (n, 7n);
+let lsl_op = (n : nat) : nat => Bitwise.shift_left (n, 7n);
+let lsr_op = (n : nat) : nat => Bitwise.shift_right (n, 7n);
\ No newline at end of file