From aa4c3996574715c51296e4cde94412583d7fdea0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 21 Jun 2025 17:36:25 +0200 Subject: [PATCH] reverse space in vectors --- esphome/core/config.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/esphome/core/config.py b/esphome/core/config.py index 544fba4aba..00c739b079 100644 --- a/esphome/core/config.py +++ b/esphome/core/config.py @@ -453,6 +453,18 @@ async def to_code(config): if config[CONF_PLATFORMIO_OPTIONS]: CORE.add_job(_add_platformio_options, config[CONF_PLATFORMIO_OPTIONS]) + # Count total areas for reservation + total_areas = 0 + if config.get(CONF_AREA): + total_areas += 1 + if areas_list := config.get(CONF_AREAS): + total_areas += len(areas_list) + + # Reserve space for areas if any are defined + if total_areas > 0: + cg.add(cg.RawStatement(f"App.reserve_area({total_areas});")) + cg.add_define("USE_AREAS") + # Handle area configuration if area_conf := config.get(CONF_AREA): if isinstance(area_conf, dict): @@ -480,12 +492,13 @@ async def to_code(config): cg.add(area_var.set_area_id(area_id)) cg.add(area_var.set_name(area_name)) cg.add(cg.App.register_area(area_var)) - # Define USE_AREAS to enable area processing - cg.add_define("USE_AREAS") # Process devices and areas if devices := config.get(CONF_DEVICES): - # Process areas first + # Reserve space for devices + cg.add(cg.RawStatement(f"App.reserve_device({len(devices)});")) + + # Process additional areas if areas := config.get(CONF_AREAS): for area_conf in areas: area = cg.new_Pvariable(area_conf[CONF_ID]) @@ -493,8 +506,6 @@ async def to_code(config): cg.add(area.set_area_id(area_id)) cg.add(area.set_name(area_conf[CONF_NAME])) cg.add(cg.App.register_area(area)) - # Define USE_AREAS since we have areas - cg.add_define("USE_AREAS") # Process devices for dev_conf in devices: