]> git.tdb.fi Git - libs/gl.git/commitdiff
More emplace_back streamlining
authorMikko Rasa <tdb@tdb.fi>
Sun, 17 Dec 2023 08:33:52 +0000 (10:33 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sun, 17 Dec 2023 09:14:24 +0000 (11:14 +0200)
source/glsl/finalize.cpp
source/glsl/generate.cpp
source/glsl/optimize.cpp
source/glsl/validate.cpp

index 609f36e53f772996af0127c1a1a9d742f7a744cf..c8fc04a9dc021536868d59fd2256244ab9b209d9 100644 (file)
@@ -449,12 +449,11 @@ void FeatureConverter::apply(Stage &s, const Features &feat)
 
 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
index 4c1039bd212bef18ecf16858d4b863f62760675b..de32b90a2bb71b39285327237011fb4e2b0999bf 100644 (file)
@@ -205,8 +205,8 @@ void InterfaceGenerator::visit(VariableReference &var)
        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);
index 1403f4a206bb3ad207b9fa88462a2b5d99f20ef3..45d8745d240835b7121703619daa69354d0e2000 100644 (file)
@@ -357,7 +357,7 @@ void ExpressionInliner::visit(RefPtr<Expression> &expr)
        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;
@@ -376,8 +376,6 @@ void ExpressionInliner::visit(RefPtr<Expression> &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;
@@ -706,12 +704,11 @@ void AggregateDismantler::visit(VariableDeclaration &var)
                                {
                                        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;
                                }
@@ -729,10 +726,9 @@ void AggregateDismantler::visit(VariableDeclaration &var)
                                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);
                                }
                        }
                }
index 3ef58181da2c48b8f68a15e904fb22b308791982..f4dd42ac42f011af9b77c79266534e256b93c084 100644 (file)
@@ -14,14 +14,13 @@ namespace SL {
 
 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;
 }
@@ -991,7 +990,7 @@ void GlobalInterfaceValidator::visit(VariableDeclaration &var)
 {
        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);
@@ -1006,8 +1005,7 @@ void GlobalInterfaceValidator::visit(VariableDeclaration &var)
                        uni.bind_point = get_layout_value(var.layout.get(), "binding");
                }
 
-               uniforms.push_back(uni);
-               check_uniform(uniforms.back());
+               check_uniform(uni);
        }
 }