-
Notifications
You must be signed in to change notification settings - Fork 2
/
Continuing.cbs
59 lines (48 loc) · 1.25 KB
/
Continuing.cbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
### Continuing
[
Datatype continuing
Funcon continued
Funcon finalise-continuing
Funcon continue
Funcon handle-continue
]
Meta-variables
T <: values
Datatype
continuing ::= continued
/*
`continued` is a reason for abrupt termination.
*/
Funcon
finalise-continuing(X:=>T) : =>T|null-type
~> finalise-abrupting(X)
/*
`finalise-continuing(X)` handles abrupt termination of `X` due to executing
`continue`.
*/
Funcon
continue : =>empty-type
~> abrupt(continued)
/*
`continue` abruptly terminates all enclosing computations until it is handled.
*/
Funcon
handle-continue(_:=>null-type) : =>null-type
/*
`handle-continue(X)` terminates normally when `X` terminates abruptly for the
reason `continued`.
*/
Rule
X --abrupted( )-> X'
------------------------------------------------------
handle-continue(X) --abrupted( )-> handle-continue(X')
Rule
X --abrupted(continued)-> _
--------------------------------------------
handle-continue(X) --abrupted( )-> null-value
Rule
X --abrupted(V:~continuing)-> X'
------------------------------------------------------
handle-continue(X) --abrupted(V)-> handle-continue(X')
Rule
handle-continue(null-value) ~> null-value