parseParameter parses either id = expr or just id. It returns either ( , id, , expr) or ( , id, nil, nil) respectively.
()
| 173 | // It returns either (<f1>, id, <f2>, expr) or (<f1>, id, nil, nil) |
| 174 | // respectively. |
| 175 | func (p *parser) parseParameter() (ast.Parameter, errors.StaticError) { |
| 176 | ret := ast.Parameter{} |
| 177 | ident, err := p.popExpect(tokenIdentifier) |
| 178 | if err != nil { |
| 179 | return ret, err.WithContext("parsing parameter") |
| 180 | } |
| 181 | ret.Name = ast.Identifier(ident.data) |
| 182 | ret.NameFodder = ident.fodder |
| 183 | ret.LocRange = ident.loc |
| 184 | if p.peek().kind == tokenOperator && p.peek().data == "=" { |
| 185 | eq := p.pop() |
| 186 | ret.EqFodder = eq.fodder |
| 187 | ret.DefaultArg, err = p.parse(iast.MaxPrecedence) |
| 188 | if err != nil { |
| 189 | return ret, err |
| 190 | } |
| 191 | ret.LocRange = locFromTokenAST(ident, ret.DefaultArg) |
| 192 | } |
| 193 | return ret, nil |
| 194 | } |
| 195 | |
| 196 | // TODO(sbarzowski) - this returned bool is weird |
| 197 | func (p *parser) parseParameters(elementKind string) (*token, []ast.Parameter, bool, errors.StaticError) { |
no test coverage detected