Skip to content
← Back

src/syntax/trees/modifiers/list.ghul

1
namespace Syntax.Trees.Modifiers is
2
use Source
3
4
class LIST(location: LOCATION, access_modifier: AccessModifier?, storage_class: StorageClass?): Trees.Node is
5
access_modifier: AccessModifier?
6
storage_class: StorageClass?
7
8
// Stand-alone modifiers that don't fit either of the
9
// conventional slots. `abstract` lives here so it can coexist
10
// with `open` (which currently borrows the storage-class
11
// slot, since FIELD/STATIC/INIT don't apply to classes);
12
// `pure` and `stable` so they can coexist with `static`.
13
is_abstract: bool public
14
is_pure: bool public
15
is_stable: bool public
16
17
is_empty: bool => !(access_modifier?) /\ !(storage_class?) /\ !is_abstract /\ !is_pure /\ !is_stable
18
19
is_field: bool => let s = storage_class in s? /\ s.is_field
20
21
is_init: bool => let s = storage_class in s? /\ s.is_init
22
23
is_open: bool => let s = storage_class in s? /\ s.is_open
24
25
is_static: bool => let s = storage_class in s? /\ s.is_static
26
27
is_public: bool => let a = access_modifier in a? /\ a.is_public
28
29
is_private: bool => let a = access_modifier in a? /\ a.is_private
30
31
is_protected: bool => let a = access_modifier in a? /\ a.is_protected
32
33
is_explicit_access: bool => access_modifier?
34
35
super(location)
36
37
clear_storage_class() is
38
self.storage_class = null
39
si
40
41
clear_access_modifier() is
42
self.access_modifier = null
43
si
44
45
copy() -> LIST is
46
let nam: AccessModifier? mut = null
47
let nsc: StorageClass? mut = null
48
49
if let self.access_modifier? then
50
nam = access_modifier.copy()
51
fi
52
53
if let self.storage_class? then
54
nsc = storage_class.copy()
55
fi
56
57
let result = LIST(
58
location,
59
nam,
60
nsc
61
)
62
result.is_abstract = is_abstract
63
result.is_pure = is_pure
64
result.is_stable = is_stable
65
return result
66
si
67
68
accept(visitor: Visitor) is
69
visitor.visit(self)
70
si
71
72
walk(visitor: Visitor) is
73
if !visitor.pre(self) then
74
if let self.access_modifier? then
75
access_modifier.walk(visitor)
76
fi
77
78
if let self.storage_class? then
79
storage_class.walk(visitor)
80
fi
81
fi
82
83
accept(visitor)
84
si
85
si
86
si