void FeatureConverter::unsupported(const string &reason)
{
- Diagnostic diagnostic;
+ Diagnostic &diagnostic = stage->diagnostics.emplace_back();
diagnostic.severity = Diagnostic::ERR;
diagnostic.source = GENERATED_SOURCE;
diagnostic.line = 0;
diagnostic.message = reason;
- stage->diagnostics.push_back(diagnostic);
}
bool FeatureConverter::check_version(const Version &feature_version) const
if(i!=prev_vars.end() && i->second->interface=="out")
{
if(stage->type==Stage::GEOMETRY && i->second->array)
- stage->diagnostics.push_back(Diagnostic(Diagnostic::WARN, var.source, var.line,
- format("Can't access '%s' through automatic interface because it's an array", var.name)));
+ stage->diagnostics.emplace_back(Diagnostic::WARN, var.source, var.line,
+ format("Can't access '%s' through automatic interface because it's an array", var.name));
else
{
generate_interface(*i->second, "in", i->second->name);
expr->visit(*this);
if(r_ref_info && r_ref_info->expression)
{
- ExpressionUse use;
+ ExpressionUse &use = r_ref_info->uses.emplace_back();
use.reference = &expr;
use.ref_scope = current_block;
use.containing_expr = current_expr;
depend on local variables of that scope or may not always be executed. */
for(Block *i=r_ref_info->assign_scope->parent; (!use.blocked && i); i=i->parent)
use.blocked = (i==current_block);
-
- r_ref_info->uses.push_back(use);
}
r_oper = expr->oper;
r_ref_info = nullptr;
{
if(const VariableDeclaration *mem_decl = dynamic_cast<const VariableDeclaration *>(s.get()))
{
- AggregateMember member;
+ AggregateMember &member = aggre.members.emplace_back();
member.declaration = mem_decl;
member.index = i;
if(init_call)
member.initializer = init_call->arguments[i];
- aggre.members.push_back(member);
}
++i;
}
int size = literal_size->value.value<int>();
for(int i=0; i<size; ++i)
{
- AggregateMember member;
+ AggregateMember &member = aggre.members.emplace_back();
member.index = i;
// Array initializers are not supported yet
- aggre.members.push_back(member);
}
}
}
void Validator::diagnose(Node &node, Node &provoking_node, Diagnostic::Severity severity, const string &message)
{
- Diagnostic diag;
+ Diagnostic &diag = stage->diagnostics.emplace_back();
diag.severity = severity;
diag.source = node.source;
diag.line = node.line;
diag.provoking_source = provoking_node.source;
diag.provoking_line = provoking_node.line;
diag.message = message;
- stage->diagnostics.push_back(diag);
last_provoker = &provoking_node;
}
{
if(var.interface=="uniform")
{
- Uniform uni;
+ Uniform &uni = uniforms.emplace_back();
uni.node = &var;
uni.type = var.type_declaration;
uni.name = (var.block_declaration ? var.block_declaration->block_name : var.name);
uni.bind_point = get_layout_value(var.layout.get(), "binding");
}
- uniforms.push_back(uni);
- check_uniform(uniforms.back());
+ check_uniform(uni);
}
}