88
88
89
89
{.warning[LockLevel]: off .}
90
90
91
- method str(self: Pattern): string {.base.} =
91
+ method str(self: Pattern): string {.base, gcsafe, nosideeffect .} =
92
92
assert false
93
93
94
- method name(self: Pattern): string {.base.} =
94
+ method name(self: Pattern): string {.base, gcsafe .} =
95
95
self.m_name
96
- method `name=` (self: Pattern, name: string ) {.base.} =
96
+ method `name=` (self: Pattern, name: string ) {.base, gcsafe .} =
97
97
self.m_name = name
98
98
99
- method `==` (self, other: Pattern): bool {.base.} =
99
+ method `==` (self, other: Pattern): bool {.base, gcsafe, nosideeffect .} =
100
100
self.str == other.str
101
101
102
- method flat(self: Pattern, types: varargs [string ]): seq [Pattern] {.base.} =
102
+ method flat(self: Pattern,
103
+ types: varargs [string ]): seq [Pattern] {.base, gcsafe.} =
103
104
assert false
104
105
105
106
method match(self: Pattern, left: seq [Pattern],
106
- collected: seq [Pattern] = @ []) : MatchResult {.base.} =
107
+ collected: seq [Pattern] = @ []) : MatchResult {.base, gcsafe .} =
107
108
assert false
108
109
109
110
method fix_identities(self: Pattern, uniq: seq [Pattern]) {.base, gcsafe.} =
@@ -117,10 +118,10 @@ method fix_identities(self: Pattern, uniq: seq[Pattern]) {.base, gcsafe.} =
117
118
else :
118
119
child.fix_identities(uniq)
119
120
120
- method fix_identities(self: Pattern) {.base.} =
121
+ method fix_identities(self: Pattern) {.base, gcsafe .} =
121
122
self.fix_identities(self.flat().deduplicate())
122
123
123
- method either(self: Pattern): Either {.base.} =
124
+ method either(self: Pattern): Either {.base, gcsafe .} =
124
125
# # Transform pattern into an equivalent, with only top-level Either.
125
126
# Currently the pattern will not be equivalent, but more "narrow",
126
127
# although good enough to reason about list arguments.
@@ -150,7 +151,7 @@ method either(self: Pattern): Either {.base.} =
150
151
ret.add children
151
152
either(ret.map_it(Pattern, required(it)))
152
153
153
- method fix_repeating_arguments(self: Pattern) {.base.} =
154
+ method fix_repeating_arguments(self: Pattern) {.base, gcsafe .} =
154
155
# # Fix elements that should accumulate/increment values.
155
156
var either: seq [seq [Pattern]] = @ []
156
157
for child in self.either.children:
@@ -169,7 +170,7 @@ method fix_repeating_arguments(self: Pattern) {.base.} =
169
170
e.class == " Option" and Option(e).argcount == 0 :
170
171
e.value = val(0 )
171
172
172
- method fix(self: Pattern) {.base.} =
173
+ method fix(self: Pattern) {.base, gcsafe .} =
173
174
self.fix_identities()
174
175
self.fix_repeating_arguments()
175
176
@@ -181,7 +182,7 @@ method flat(self: ChildPattern, types: varargs[string]): seq[Pattern] =
181
182
if types.len == 0 or self.class in types: @ [Pattern(self)] else : @ []
182
183
183
184
method single_match(self: ChildPattern,
184
- left: seq [Pattern]) : SingleMatchResult {.base.} =
185
+ left: seq [Pattern]) : SingleMatchResult {.base, gcsafe .} =
185
186
assert false
186
187
187
188
method match(self: ChildPattern, left: seq [Pattern],
@@ -295,7 +296,6 @@ method match(self: Optional, left: seq[Pattern],
295
296
result = pattern.match(result .left, result .collected)
296
297
result .matched = true
297
298
298
-
299
299
method match(self: OneOrMore, left: seq [Pattern],
300
300
collected: seq [Pattern] = @ []) : MatchResult =
301
301
assert self.children.len == 1
0 commit comments