Exemplo n.º 1
0
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);
//			}
		}
	}
}
Exemplo n.º 2
0
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;
}