From 405c00de24374c282adb1116551a833b8130d76d Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Tue, 28 May 2019 11:59:45 +0300 Subject: [PATCH] Inline functions in variable initialization expressions If the entire expression was a function call, it didn't get inlined because VariableDeclaration wasn't being handled separately. --- source/programcompiler.cpp | 7 +++++++ source/programcompiler.h | 1 + 2 files changed, 8 insertions(+) diff --git a/source/programcompiler.cpp b/source/programcompiler.cpp index afb2a3c3..5a17a9ed 100644 --- a/source/programcompiler.cpp +++ b/source/programcompiler.cpp @@ -1223,6 +1223,13 @@ void ProgramCompiler::FunctionInliner::visit(FunctionCall &call) inline_result = 0; } +void ProgramCompiler::FunctionInliner::visit(VariableDeclaration &var) +{ + if(var.init_expression) + visit_and_inline(var.init_expression); + inline_result = 0; +} + void ProgramCompiler::FunctionInliner::visit(Return &ret) { TraversingVisitor::visit(ret); diff --git a/source/programcompiler.h b/source/programcompiler.h index 1258bde0..06306743 100644 --- a/source/programcompiler.h +++ b/source/programcompiler.h @@ -218,6 +218,7 @@ private: virtual void visit(ProgramSyntax::BinaryExpression &); virtual void visit(ProgramSyntax::MemberAccess &); virtual void visit(ProgramSyntax::FunctionCall &); + virtual void visit(ProgramSyntax::VariableDeclaration &); virtual void visit(ProgramSyntax::Return &); }; -- 2.43.0