Bug fix in Objective-C method signature parsing.
This commit is contained in:
parent
773886e0f1
commit
f93a893060
|
@ -8,7 +8,7 @@ subclasses:
|
|||
ClassTwo:
|
||||
- geti1
|
||||
- -(void)myMethod1:(int)a
|
||||
- +(const NSObject* _Nonnull)myMethod2:(int)a:(NSDictionary<NSString*,NSObject*> *)options
|
||||
- +(const NSObject* _Nonnull)myMethod2:(int)a options:(NSDictionary<NSString*,NSObject*> *)opt
|
||||
|
||||
imports: [ simple.h ]
|
||||
frameworks: [ Foundation ]
|
||||
|
|
|
@ -35,24 +35,24 @@ func init() {
|
|||
func MethodSignature(s string, n *Node) (string, *Node) {
|
||||
return ChildOf(NewNode("MethodSignature"),Seq(
|
||||
Parenthesized(TypeName),
|
||||
MethodName,
|
||||
Identifier,
|
||||
Opt(MethodParameterList),
|
||||
))(s,n)
|
||||
}
|
||||
|
||||
func MethodName(s string, n *Node) (string, *Node) {
|
||||
func MethodParameterList(s string, n *Node) (string, *Node) {
|
||||
return Seq(
|
||||
Identifier,
|
||||
Opt(Seq(
|
||||
Lit(":"),
|
||||
Parenthesized(TypeName),
|
||||
Identifier,
|
||||
)),
|
||||
FirstMethodParameter,
|
||||
ZeroOrMore(MethodParameter),
|
||||
)(s,n)
|
||||
}
|
||||
|
||||
func MethodParameterList(s string, n *Node) (string, *Node) {
|
||||
return OneOrMore(MethodParameter)(s,n)
|
||||
func FirstMethodParameter(s string, n *Node) (string, *Node) {
|
||||
return ChildOf(NewNode("MethodParameter"),Seq(
|
||||
Lit(":"),
|
||||
Parenthesized(TypeName),
|
||||
Identifier,
|
||||
))(s,n)
|
||||
}
|
||||
|
||||
func MethodParameter(s string, n *Node) (string, *Node) {
|
||||
|
|
|
@ -396,9 +396,10 @@ func TestParse(t *testing.T) {
|
|||
-<TypeName> ''
|
||||
--<TypeSpecifier> 'void'
|
||||
-<Identifier> 'performSelector'
|
||||
-<TypeName> ''
|
||||
--<TypedefName> 'SEL'
|
||||
-<Identifier> 'aSelector'
|
||||
-<MethodParameter> ''
|
||||
--<TypeName> ''
|
||||
---<TypedefName> 'SEL'
|
||||
--<Identifier> 'aSelector'
|
||||
-<MethodParameter> ''
|
||||
--<Identifier> 'target'
|
||||
--<TypeName> ''
|
||||
|
|
|
@ -1108,6 +1108,7 @@ func (w *Wrapper) MethodFromSig(sig,class string) *Method {
|
|||
fmt.Printf("Failed to parse method signature %s (%s)\n",sig,rem)
|
||||
os.Exit(-1)
|
||||
}
|
||||
i := 0 // count MethodParameters
|
||||
for _,c := range n.Children {
|
||||
switch c.Kind {
|
||||
case "TypeName":
|
||||
|
@ -1124,9 +1125,14 @@ func (w *Wrapper) MethodFromSig(sig,class string) *Method {
|
|||
tp := types.NewType(d,class)
|
||||
p.Type = tp
|
||||
case "Identifier":
|
||||
if i == 0 || p.Pname != "" {
|
||||
p.Vname = d.Content
|
||||
} else {
|
||||
p.Pname = d.Content
|
||||
}
|
||||
}
|
||||
}
|
||||
i++
|
||||
ret.Parameters = append(ret.Parameters,p)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user