Ejemplo n.º 1
0
/*
  GRAMMAR OF AN INITIALIZER DECLARATION
 
 ‌ initializer-declaration → initializer-head generic-parameter-clause opt parameter-clause initializer-body
 ‌ initializer-head → attributes opt convenience opt init
 ‌ initializer-body → code-block
 
*/
DeclarationPtr Parser::parseInit(const std::vector<AttributePtr>& attrs)
{
    Token token;
    bool convenience = match(L"convenience");
    expect(Keyword::Init, token);
    InitializerDefPtr ret = nodeFactory->createInitializer(token.state);
    ret->setAttributes(attrs);
    if(predicate(L"<"))
    {
        GenericParametersDefPtr params = this->parseGenericParametersDef();
        ret->setGenericParametersDef(params);
    }
    ParametersPtr parameters = parseParameterClause();
    CodeBlockPtr body = parseCodeBlock();
    ret->setConvenience(convenience);
    ret->setParameters(parameters);
    ret->setBody(body);
    return ret;
}