@@ -183,13 +183,20 @@ internal struct LeafParser {
183183
184184 var group = [ ParameterDeclaration] ( )
185185 var paramsList = [ ParameterDeclaration] ( )
186-
187- func dump( ) {
188- defer { group = [ ] }
189- if group. isEmpty { return }
190- group. evaluate ( )
191- if group. count > 1 { paramsList. append ( . expression( group) ) }
192- else { paramsList. append ( group. first!) }
186+
187+ func dump( ) throws {
188+ defer { group = [ ] }
189+ if group. isEmpty { return }
190+ group. evaluate ( )
191+ if group. count > 1 { paramsList. append ( . expression( group) ) }
192+ else {
193+ guard let first = group. first else {
194+ // It's better to handle this case as well, even though logically it might never happen
195+ // since you're checking if group.isEmpty before.
196+ throw LeafError ( . unknownError( " Found nil while iterating through params " ) , file: #file, function: #function, line: #line, column: #column)
197+ }
198+ paramsList. append ( first)
199+ }
193200 }
194201
195202 outer: while let next = peek ( ) {
@@ -200,7 +207,12 @@ internal struct LeafParser {
200207 let params = try readParameters ( )
201208 // parameter tags not permitted to have bodies
202209 if params. count > 1 { group. append ( . expression( params) ) }
203- else { group. append ( params. first!) }
210+ else {
211+ guard let firstParam = params. first else {
212+ throw LeafError ( . unknownError( " Found nil while iterating through params " ) )
213+ }
214+ group. append ( firstParam)
215+ }
204216 case . parameter( let p) :
205217 pop ( )
206218 switch p {
@@ -214,11 +226,11 @@ internal struct LeafParser {
214226 }
215227 case . parametersEnd:
216228 pop ( )
217- dump ( )
229+ try dump ( )
218230 break outer
219231 case . parameterDelimiter:
220232 pop ( )
221- dump ( )
233+ try dump ( )
222234 case . whitespace:
223235 pop ( )
224236 continue
0 commit comments