From 5fca2bd4bc66b246eb331adef01e11858ba80e3c Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Wed, 13 Jan 2016 08:27:14 -0300 Subject: Reworked how autoloads are load to make sure identifiers always exist, please check if this resolves bug #3156 --- main/main.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'main/main.cpp') diff --git a/main/main.cpp b/main/main.cpp index 752a248b2..149b3b775 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1327,6 +1327,29 @@ bool Main::start() { //autoload List props; Globals::get_singleton()->get_property_list(&props); + + //first pass, add the constants so they exist before any script is loaded + for(List::Element *E=props.front();E;E=E->next()) { + + String s = E->get().name; + if (!s.begins_with("autoload/")) + continue; + String name = s.get_slicec('/',1); + String path = Globals::get_singleton()->get(s); + bool global_var=false; + if (path.begins_with("*")) { + global_var=true; + } + + if (global_var) { + for(int i=0;iadd_global_constant(name,Variant()); + } + } + + } + + //second pass, load into global constants for(List::Element *E=props.front();E;E=E->next()) { String s = E->get().name; @@ -1374,7 +1397,6 @@ bool Main::start() { } } - } } -- cgit v1.2.3-70-g09d2