void Parser::parseArguments(){ if(isNext(tc_LPAREN)){ match(tc_LPAREN); parseParameterList(); match(tc_RPAREN); if(m_parserError){ TokenCode synch[] = {tc_COLON, tc_SEMICOL, tc_NONE}; recover(synch); // if(isNext(tc_RPAREN)){ // match(tc_RPAREN); // } } } }
Symbol parseFunctionDefinitionStatement(CharacterSource* source) { CharacterSource s = *source; Symbol returnTypeSpecifier = parseTypeConstructorSpecifier(&s); if (!returnTypeSpecifier.valid()) return Symbol(); Symbol name = parseIdentifier(&s); if (!name.valid()) return Symbol(); Span span; if (!Space::parseCharacter(&s, '(', &span)) return Symbol(); *source = s; SymbolArray parameterList = parseParameterList(source); Space::assertCharacter(source, ')', &span); static String from("from"); if (Space::parseKeyword(source, from, &span)) { Symbol dll = parseExpressionOrFail(source); Span span2; Space::assertCharacter(source, ';', &span2); return Symbol( atomFunctionDefinitionStatement, returnTypeSpecifier, name, parameterList, Symbol(atomFromStatement, dll, new ExpressionCache(span + span2)), new FunctionDefinitionCache(spanOf(returnTypeSpecifier) + span2)); } Symbol statement = parseStatementOrFail(source); statement = Symbol( atomFunctionDefinitionStatement, returnTypeSpecifier, name, parameterList, statement, SymbolLabel(), new FunctionDefinitionCache( spanOf(returnTypeSpecifier) + spanOf(statement))); return statement; }