blob: b4d8528d717c436a56e6f9500e23c0c1fe62a6c1 (
plain) (
blame)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
|
definition module uFPL.Sim
from Data.Map import :: Map
import uFPL
from uFPL.C import :: Signedness
:: UFPLException
= LiftException String
| NoShareException ISharedRef
| WriteToROShare ISharedRef
| RunException
instance toString UFPLException
:: ReadOrWrite = ReadOnly | ReadWrite
:: IShared
= ISharedInt String Int ReadOrWrite
| ISharedUInt String Int ReadOrWrite
| ISharedLong String Int ReadOrWrite
| ISharedULong String Int ReadOrWrite
| ISharedBool String Bool ReadOrWrite
:: ISharedRef :== String
:: IShares :== [IShared]
:: IExpr
= ILitInt Int
| ILitBool Bool
| ILitChar Char
| IShared ISharedRef
| IAdd IExpr IExpr
| ISub IExpr IExpr
| IMul IExpr IExpr
| IDiv IExpr IExpr
| IEq IExpr IExpr
| ILt IExpr IExpr
| IAnd IExpr IExpr
| IOr IExpr IExpr
| IIf IExpr IExpr IExpr
:: ITrigger
= IChange ISharedRef
| IBecomes ISharedRef IExpr
| ITAnd ITrigger ITrigger
| ITOr ITrigger ITrigger
:: IRule
= IAssign ISharedRef IExpr
| IWhen IExpr [IRule]
| ITrigger ITrigger [IRule]
| ISetCursor (IExpr, IExpr)
| IPrint IExpr
:: INamedRule = Rule String [IRule]
:: IShareState t =
{ isval :: t
, isdirty :: Int
, issubscriptions :: Int
}
:: IState =
{ isvalues :: Map String (IShareState Int)
, csvalues :: Map String (IShareState Char)
, bsvalues :: Map String (IShareState Bool)
, display :: Display
}
simulate :: [NamedRule] -> *World -> *World
|