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` so it can coexist with `static`.
13
is_abstract: bool public;
14
is_pure: bool public;
15
16
is_empty: bool => !(access_modifier?) /\ !(storage_class?) /\ !is_abstract /\ !is_pure;
17
18
is_field: bool => let s = storage_class in s? /\ s.is_field;
19
20
is_init: bool => let s = storage_class in s? /\ s.is_init;
21
22
is_open: bool => let s = storage_class in s? /\ s.is_open;
23
24
is_static: bool => let s = storage_class in s? /\ s.is_static;
25
26
is_public: bool => let a = access_modifier in a? /\ a.is_public;
27
28
is_private: bool => let a = access_modifier in a? /\ a.is_private;
29
30
is_explicit_access: bool => access_modifier?;
31
32
super(location);
33
34
clear_storage_class() is
35
self.storage_class = null;
36
si
37
38
clear_access_modifier() is
39
self.access_modifier = null;
40
si
41
42
copy() -> LIST is
43
let nam: AccessModifier? mut = null;
44
let nsc: StorageClass? mut = null;
45
46
if let self.access_modifier? then
47
nam = access_modifier.copy();
48
fi
49
50
if let self.storage_class? then
51
nsc = storage_class.copy();
52
fi
53
54
let result = LIST(
55
location,
56
nam,
57
nsc
58
);
59
result.is_abstract = is_abstract;
60
result.is_pure = is_pure;
61
return result;
62
si
63
64
accept(visitor: Visitor) is
65
visitor.visit(self);
66
si
67
68
walk(visitor: Visitor) is
69
if !visitor.pre(self) then
70
if let self.access_modifier? then
71
access_modifier.walk(visitor);
72
fi
73
74
if let self.storage_class? then
75
storage_class.walk(visitor);
76
fi
77
fi
78
79
accept(visitor);
80
si
81
si
82
si