1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

GDScript: Optimize non-constant for-range

This commit is contained in:
Danil Alexeev
2025-05-02 18:43:08 +03:00
parent 3b963ab8b6
commit a13fbc6e3e
10 changed files with 267 additions and 119 deletions

View File

@@ -144,6 +144,9 @@ class GDScriptByteCodeGenerator : public GDScriptCodeGenerator {
List<int> for_jmp_addrs;
List<Address> for_counter_variables;
List<Address> for_container_variables;
List<Address> for_range_from_variables;
List<Address> for_range_to_variables;
List<Address> for_range_step_variables;
List<int> while_jmp_addrs;
List<int> continue_addrs;
@@ -535,10 +538,11 @@ public:
virtual void write_endif() override;
virtual void write_jump_if_shared(const Address &p_value) override;
virtual void write_end_jump_if_shared() override;
virtual void start_for(const GDScriptDataType &p_iterator_type, const GDScriptDataType &p_list_type) override;
virtual void write_for_assignment(const Address &p_list) override;
virtual void write_for(const Address &p_variable, bool p_use_conversion) override;
virtual void write_endfor() override;
virtual void start_for(const GDScriptDataType &p_iterator_type, const GDScriptDataType &p_list_type, bool p_is_range) override;
virtual void write_for_list_assignment(const Address &p_list) override;
virtual void write_for_range_assignment(const Address &p_from, const Address &p_to, const Address &p_step) override;
virtual void write_for(const Address &p_variable, bool p_use_conversion, bool p_is_range) override;
virtual void write_endfor(bool p_is_range) override;
virtual void start_while_condition() override;
virtual void write_while(const Address &p_condition) override;
virtual void write_endwhile() override;