Exemple #1
0
ProgramTypeTable::TemplateMap::value_type
ProgramTypeTable::template2Info(const TypeTable::TypeInfoMap::value_type& tt)
{
    QStringList args = splitTemplateArgs(tt.second.m_templatePattern);

    TemplateMap::value_type result(args.front(), TemplateInfo());
    result.second.type = &tt.second;
    args.pop_front();
    result.second.templateArgs = args;
    return result;
}
std::shared_ptr<DeclarationNode> TemplateFunctionDeclarationNode::instantiateWithArguments(TemplateArguments arguments) 
{
    auto template_info = TemplateInfo(defined_symbol, arguments);
    RebuildTreeVisitor rebuild(template_info);

    statements -> accept(rebuild);    
    auto stat = rebuild.result();

    auto new_return_type_info = rebuild.processTypeInfo(info_.returnTypeInfo());
    auto new_formal_params = std::vector<ParamInfo>{ };

    for ( auto param : info_.formalParams() )
        new_formal_params.emplace_back(param.name(), rebuild.processTypeInfo(param.typeInfo()));
    auto new_info = FunctionDeclarationInfo(new_return_type_info, new_formal_params);

    auto decl = std::make_shared<FunctionDeclarationNode>(template_info.getInstName(), new_info, std::move(stat), traits_, is_unsafe);

	decl -> scope = scope;
    decl -> build_scope();

    return decl;
}