Hi, Marc.
I found some typo in the updated draft.
1. In section 4.3 "Using the cfg form", The code example follows the
text "The backward control flow passes through the branch CFG term
before the defer expression is evaluated. It invokes finish with the
result of (+ x 3), and the corresponding CFG term binds the CFG variable
y to that result, 5."
(let ([x 1] [y 2])
(cfg
(branch ([(e1) (return)]
[(e2) (return [x 3])])
(if (odd? y) (e1) (e2)))
(+ x 10)
Missing two right parenthese in the last line "(+ x 10)", it should be
"(+ x 10)))"
2. Also in section 4.3, The example follows text "In the example above,
there is a (statically possible) control-flow path from the entry block
to the first return CFG term that does not pass through a definition of
the CFG variable x. Compare with the following two examples:"
(let ([x 1] [y 2])
(cfg
(branch ([(e1) (return [x #f])]
[(e2) (return [x 3])])
(if (odd? y) (e1) (e2)))
(+ x 10)
Ditto, The last line also missed two right parethese (should be "(+ x
10)))"
3. In section 5.3 "CFG Expressions", The last code example
(let ([x 'outer] [y 'outer])
(cfg (let* ([c (permute ([p (finally ([y 'inner])
(let ([a x]) (go p)))])
(return [a a]))])
(permute/tail ([(p) (finally ([b y])
(let ([x 'inner]) (go p)))])
(go c)))
(list a b)))
The label "(p)" in "permute/tail" seems to be a syntax error, since
"(label)" is the syntax for free labels defined by "define-cfg-label",
maybe you mean "p"?
--
Retrieve my PGP public key:
执行下列命令以获取我的 PGP 公有密钥:
gpg --recv-keys B3EBC086AB0EBC0F45E0B4D433DB374BCEE4D9DC
Zihao / 閱卜錄