From 9227d8f2dde7e8acd99a1aaf29d1f3da94a75132 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 20 Mar 2026 18:52:48 -1000 Subject: [PATCH] [core] Restore play_complex overrides for LambdaAction and ContinuationAction The +384 flash was from the always_inline attributes (already removed), not from the play_complex overrides. --- esphome/core/base_automation.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/esphome/core/base_automation.h b/esphome/core/base_automation.h index f0b3898278..b809c56f1a 100644 --- a/esphome/core/base_automation.h +++ b/esphome/core/base_automation.h @@ -217,6 +217,13 @@ template class LambdaAction : public Action { public: explicit LambdaAction(std::function &&f) : f_(std::move(f)) {} + // Override play_complex to call play() non-virtually (qualified call), + // eliminating one virtual dispatch frame from the call stack. + void play_complex(const Ts &...x) override { + this->num_running_++; + LambdaAction::play(x...); + this->play_next_(x...); + } void play(const Ts &...x) override { this->f_(x...); } protected: @@ -250,6 +257,13 @@ template class ContinuationAction : public Action { public: explicit ContinuationAction(Action *parent) : parent_(parent) {} + // Override play_complex to call play() non-virtually (qualified call), + // eliminating one virtual dispatch frame from the call stack. + void play_complex(const Ts &...x) override { + this->num_running_++; + ContinuationAction::play(x...); + this->play_next_(x...); + } void play(const Ts &...x) override { this->parent_->play_next_(x...); } protected: