@@ -196,7 +196,7 @@ struct WatParser {
196196 let importNames = try importNames ( )
197197 if try parser. takeParenBlockStart ( " func " ) {
198198 let id = try parser. takeId ( )
199- kind = . function( FunctionDecl ( id: id, exports: [ ] , typeUse: try typeUse ( ) , kind: . imported( importNames) ) )
199+ kind = . function( FunctionDecl ( id: id, exports: [ ] , typeUse: try typeUse ( mayHaveName : true ) , kind: . imported( importNames) ) )
200200 } else if try parser. takeParenBlockStart ( " table " ) {
201201 let id = try parser. takeId ( )
202202 kind = . table( TableDecl ( id: id, exports: [ ] , type: try tableType ( ) , importNames: importNames) )
@@ -215,7 +215,7 @@ struct WatParser {
215215 let id = try parser. takeId ( )
216216 let exports = try inlineExports ( )
217217 let importNames = try inlineImport ( )
218- let typeUse = try typeUse ( )
218+ let typeUse = try typeUse ( mayHaveName : true )
219219 let functionKind : FunctionKind
220220 if let importNames = importNames {
221221 functionKind = . imported( importNames)
@@ -441,14 +441,14 @@ struct WatParser {
441441 return ImportNames ( module: module, name: name)
442442 }
443443
444- mutating func typeUse( ) throws -> TypeUse {
444+ mutating func typeUse( mayHaveName : Bool ) throws -> TypeUse {
445445 let location = parser. lexer. location ( )
446446 var index : Parser . IndexOrId ?
447447 if try parser. takeParenBlockStart ( " type " ) {
448448 index = try parser. expectIndexOrId ( )
449449 try parser. expect ( . rightParen)
450450 }
451- let inline = try optionalFunctionType ( )
451+ let inline = try optionalFunctionType ( mayHaveName : mayHaveName )
452452 return TypeUse ( index: index, inline: inline, location: location)
453453 }
454454
@@ -552,37 +552,39 @@ struct WatParser {
552552 mutating func funcType( ) throws -> FunctionType {
553553 try parser. expect ( . leftParen)
554554 try parser. expectKeyword ( " func " )
555- let ( params, names) = try params ( )
555+ let ( params, names) = try params ( mayHaveName : true )
556556 let results = try results ( )
557557 try parser. expect ( . rightParen)
558558 return FunctionType ( signature: WasmTypes . FunctionType ( parameters: params, results: results) , parameterNames: names)
559559 }
560560
561- mutating func optionalFunctionType( ) throws -> FunctionType ? {
562- let ( params, names) = try params ( )
561+ mutating func optionalFunctionType( mayHaveName : Bool ) throws -> FunctionType ? {
562+ let ( params, names) = try params ( mayHaveName : mayHaveName )
563563 let results = try results ( )
564564 if results. isEmpty, params. isEmpty {
565565 return nil
566566 }
567567 return FunctionType ( signature: WasmTypes . FunctionType ( parameters: params, results: results) , parameterNames: names)
568568 }
569569
570- mutating func params( ) throws -> ( [ ValueType ] , [ Name ? ] ) {
570+ mutating func params( mayHaveName : Bool ) throws -> ( [ ValueType ] , [ Name ? ] ) {
571571 var types : [ ValueType ] = [ ]
572572 var names : [ Name ? ] = [ ]
573573 while try parser. takeParenBlockStart ( " param " ) {
574- if let id = try parser. takeId ( ) {
575- let valueType = try valueType ( )
576- types. append ( valueType)
577- names. append ( id)
578- try parser. expect ( . rightParen)
579- } else {
580- while try ! parser. take ( . rightParen) {
574+ if mayHaveName {
575+ if let id = try parser. takeId ( ) {
581576 let valueType = try valueType ( )
582577 types. append ( valueType)
583- names. append ( nil )
578+ names. append ( id)
579+ try parser. expect ( . rightParen)
580+ continue
584581 }
585582 }
583+ while try ! parser. take ( . rightParen) {
584+ let valueType = try valueType ( )
585+ types. append ( valueType)
586+ names. append ( nil )
587+ }
586588 }
587589 return ( types, names)
588590 }
0 commit comments