@@ -2,7 +2,7 @@ import structs/[HashMap, List]
2
2
3
3
4
4
Value : abstract class {
5
- typeName : abstract func -> String
5
+ type : abstract func -> String
6
6
toString : abstract func -> String
7
7
}
8
8
@@ -11,29 +11,58 @@ StringValue: class extends Value {
11
11
12
12
init : func (= value ) {}
13
13
14
- typeName : func -> String { "String" }
15
-
14
+ type : func -> String { "String" }
16
15
toString : func -> String { value }
17
16
}
18
17
18
+ BoolValue : class extends Value {
19
+ value : Bool
20
+
21
+ init : func (= value ) {}
22
+
23
+ type : func -> String { "Bool" }
24
+ toString : func -> String { value toString () }
25
+ }
26
+
19
27
ListValue : class <T > extends Value {
20
28
list : List <T >
21
29
22
30
init : func (= list ) {}
23
31
24
- typeName : func -> String { "List" }
32
+ type : func -> String { "List" }
25
33
toString : func -> String { "List size=%d" format (list size ()) }
26
34
27
35
list : func -> List < T> { list }
28
36
}
29
37
30
- Context : class {
38
+ Context : abstract class {
39
+ add : abstract func (name : String , value : Value )
40
+ get : abstract func (name : String , value : Value )
41
+
42
+ addString : func (name : String , value : String ) {
43
+ add (name, StringValue new (value))
44
+ }
45
+
46
+ addBool : func (name : String , value : Bool ) {
47
+ add (name, BoolValue new (value))
48
+ }
49
+
50
+ addList : func <T > (name : String , value : List < T > ) {
51
+ add (name, ListValue< T> new (value))
52
+ }
53
+ }
54
+
55
+ HashContext : class extends Context {
31
56
data : HashMap <Value >
32
57
33
58
init : func ~withHashMap (= data ) {}
34
59
init : func { data = HashMap< Value> new () }
35
60
36
- resolve : func (name : String ) -> Value {
37
- data[name]
61
+ add : func (name : String , value : Value ) {
62
+ data add (name, value)
63
+ }
64
+
65
+ get : func (name : String ) -> Value {
66
+ data get (name)
38
67
}
39
68
}
0 commit comments