Пример #1
0
func (parser *Parser) parseParams(method *ast.Method) {

	parser.expectf(lexer.TokenType('('), "method param table must start with (")

	for {

		token := parser.peek()

		if token.Type == lexer.TokenType(')') {
			break
		}

		for parser.parseAnnotation() {

		}

		typeDecl := parser.expectTypeDecl("expect method param type declare")

		nameToken := parser.expectf(lexer.TokenID, "expect method param name")

		name := nameToken.Value.(string)

		param, ok := method.NewParam(name, typeDecl)

		parser.attachAnnotation(param)

		if !ok {
			parser.errorf(token.Start, "duplicate method(%s) param(%s)", method, name)
		}

		_setNodePos(param, token.Start, nameToken.End)

		token = parser.peek()

		if token.Type != lexer.TokenType(',') {
			break
		}

		parser.next()
	}

	parser.expectf(lexer.TokenType(')'), "method param table must end with )")
}