An as chain's refusals quote the whole condition, and narrowing after an as is tested.
This commit is contained in:
parent
0598949fcb
commit
87709618f9
@ -1473,7 +1473,7 @@ and as_chain p (x : Form.t) lvl =
|
|||||||
sym gt.loc g
|
sym gt.loc g
|
||||||
| tk -> failk "as-name" (where_ p) "as takes the name to bind, and found %s" (show tk)
|
| tk -> failk "as-name" (where_ p) "as takes the name to bind, and found %s" (show tk)
|
||||||
in
|
in
|
||||||
let bound = Form.make (Form.List [ sym at.loc "as"; g; e ]) last.loc in
|
let bound = mk p last.loc (Form.List [ sym at.loc "as"; g; e ]) in
|
||||||
let rest =
|
let rest =
|
||||||
match (peek p).tok with
|
match (peek p).tok with
|
||||||
| NAME "and" ->
|
| NAME "and" ->
|
||||||
@ -1489,7 +1489,7 @@ and as_chain p (x : Form.t) lvl =
|
|||||||
in
|
in
|
||||||
match before @ (bound :: rest) with
|
match before @ (bound :: rest) with
|
||||||
| [ one ] -> one
|
| [ one ] -> one
|
||||||
| xs -> Form.make (Form.List (sym x.loc "and" :: xs)) x.loc
|
| xs -> mk p x.loc (Form.List (sym x.loc "and" :: xs))
|
||||||
|
|
||||||
(* The if an [if let] head was read into, rewritten to (if-let [P v] then
|
(* The if an [if let] head was read into, rewritten to (if-let [P v] then
|
||||||
else): [(if [P v] a b)], [(when [P v] body ...)] and an elif chain's
|
else): [(if [P v] a b)], [(when [P v] body ...)] and an elif chain's
|
||||||
|
|||||||
@ -81,6 +81,8 @@ fn main()
|
|||||||
let n: i32? = Some(40)
|
let n: i32? = Some(40)
|
||||||
if n? and half(n) as h and n + h > 50
|
if n? and half(n) as h and n + h > 50
|
||||||
println(n + h)
|
println(n + h)
|
||||||
|
if half(6) as h and n? and n + h > 40
|
||||||
|
println(n + h)
|
||||||
;; while: pop while the next cell is empty.
|
;; while: pop while the next cell is empty.
|
||||||
let i = 1
|
let i = 1
|
||||||
let seen = 0
|
let seen = 0
|
||||||
|
|||||||
@ -2279,7 +2279,7 @@ let () =
|
|||||||
(* e as g inside an and chain, typed and dyn (decision 136). *)
|
(* e as g inside an and chain, typed and dyn (decision 136). *)
|
||||||
("as-chain.fln",
|
("as-chain.fln",
|
||||||
"empty -1\nelse sees the outer g 100\nafter 100\n-3\nfalse\n3 5\nnot less\n40 -1\n\
|
"empty -1\nelse sees the outer g 100\nafter 100\n-3\nfalse\n3 5\nnot less\n40 -1\n\
|
||||||
empty big other half other\n1 2 3 ran 1\n4\n1 3 stopped\n3\n60\n-4 5\n");
|
empty big other half other\n1 2 3 ran 1\n4\n1 3 stopped\n3\n60\n43\n-4 5\n");
|
||||||
("as-chain-dyn.fln", "dog nobody ann\n4 nil nil\n6 2\n5\n-1\n") ];
|
("as-chain-dyn.fln", "dog nobody ann\n4 nil nil\n6 2\n5\n-1\n") ];
|
||||||
(* x! over nothing traps at its site and names the expression. *)
|
(* x! over nothing traps at its site and names the expression. *)
|
||||||
List.iter
|
List.iter
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user