From 296cf8197a1a929e481caa99d3d6b6b27f9852e1 Mon Sep 17 00:00:00 2001 From: twanvl Date: Wed, 18 Jun 2008 21:45:12 +0000 Subject: [PATCH] Also init dependencies of non rule form expand_keywords git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@989 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/script/context.cpp | 4 ++++ src/script/context.hpp | 2 ++ src/script/functions/basic.cpp | 3 ++- src/script/functions/util.hpp | 22 ++++++++++++++-------- src/script/script_manager.cpp | 1 + 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/script/context.cpp b/src/script/context.cpp index 82f3b121..7fba4f9c 100644 --- a/src/script/context.cpp +++ b/src/script/context.cpp @@ -232,6 +232,10 @@ ScriptValueP Context::getVariable(Variable var) { if (variables[var].value) return variables[var].value; throw ScriptError(_("Variable not set: ") + variable_to_string(var)); } +ScriptValueP Context::getVariableInScopeOpt(Variable var) { + if (variables[var].level == level) return variables[var].value; + else return ScriptValueP(); +} int Context::getVariableScope(Variable var) { if (variables[var].value) return level - variables[var].level; else return -1; diff --git a/src/script/context.hpp b/src/script/context.hpp index d11598c4..f8551bc9 100644 --- a/src/script/context.hpp +++ b/src/script/context.hpp @@ -62,6 +62,8 @@ class Context { ScriptValueP getVariable(Variable var); /// Get the value of a variable, returns ScriptValue() if it is not set inline ScriptValueP getVariableOpt(Variable var) { return variables[var].value; } + /// Get the value of a variable only if it was set in the current scope, returns ScriptValue() if it is not set + ScriptValueP getVariableInScopeOpt(Variable var); /// In what scope was the variable set? /** Returns 0 for the current scope and >0 for outer scopes. * Returns -1 if the varible is not set diff --git a/src/script/functions/basic.cpp b/src/script/functions/basic.cpp index b2763bba..b9057917 100644 --- a/src/script/functions/basic.cpp +++ b/src/script/functions/basic.cpp @@ -314,6 +314,7 @@ SCRIPT_FUNCTION(sort_list) { // ----------------------------------------------------------------------------- : Keywords + SCRIPT_RULE_2_N_DEP(expand_keywords, ScriptValueP, _("default expand"), default_expand, ScriptValueP, _("combine"), combine) { SCRIPT_PARAM_C(String, input); @@ -338,7 +339,7 @@ SCRIPT_RULE_2_DEPENDENCIES(expand_keywords) { combine ->dependencies(ctx, dep); SCRIPT_PARAM_C(Set*, set); set->game->dependent_scripts_keywords.add(dep); // this depends on the set's keywords - SCRIPT_RETURN(_("")); + return ctx.getVariable(SCRIPT_VAR_input); } SCRIPT_FUNCTION(keyword_usage) { diff --git a/src/script/functions/util.hpp b/src/script/functions/util.hpp index 6f453f8c..643f069b 100644 --- a/src/script/functions/util.hpp +++ b/src/script/functions/util.hpp @@ -175,19 +175,24 @@ inline Type from_script(const ScriptValueP& v, Variable var) { ScriptValueP ScriptRule_##funname::eval(Context& ctx) const /// Utility for defining a script rule with two parameters -#define SCRIPT_RULE_2(funname, type1, name1, type2, name2) \ +#define SCRIPT_RULE_2(funname, type1, name1, type2, name2) \ SCRIPT_RULE_2_N(funname, type1, _(#name1), name1, type2, _(#name2), name2) #define SCRIPT_RULE_2_C(funname, type1, name1, type2, name2) \ SCRIPT_RULE_2_N(funname, type1, SCRIPT_VAR_ ## name1, name1, type2, SCRIPT_VAR_ ## name2, name2) /// Utility for defining a script rule with two named parameters -#define SCRIPT_RULE_2_N(funname, type1, str1, name1, type2, str2, name2) \ - SCRIPT_RULE_2_N_AUX(funname, type1, str1, name1, type2, str2, name2, ;) +#define SCRIPT_RULE_2_N(funname, type1, str1, name1, type2, str2, name2) \ + SCRIPT_RULE_2_N_AUX(funname, type1, str1, name1, type2, str2, name2, ;, ;) /// Utility for defining a script rule with two named parameters, with dependencies -#define SCRIPT_RULE_2_N_DEP(funname, type1, str1, name1, type2, str2, name2)\ - SCRIPT_RULE_2_N_AUX( funname, type1, str1, name1, type2, str2, name2,\ - virtual ScriptValueP dependencies(Context&, const Dependency&) const;) +#define SCRIPT_RULE_2_N_DEP(funname, type1, str1, name1, type2, str2, name2) \ + SCRIPT_RULE_2_N_AUX( funname, type1, str1, name1, type2, str2, name2, \ + virtual ScriptValueP dependencies(Context&, const Dependency&) const;, \ + SCRIPT_FUNCTION_DEPENDENCIES(funname) { \ + SCRIPT_PARAM_N(type1, str1, name1); \ + SCRIPT_PARAM_N(type2, str2, name2); \ + return ScriptRule_##funname(name1, name2).dependencies(ctx, dep); \ + }) -#define SCRIPT_RULE_2_N_AUX(funname, type1, str1, name1, type2, str2, name2, dep) \ +#define SCRIPT_RULE_2_N_AUX(funname, type1, str1, name1, type2, str2, name2, dep, more) \ class ScriptRule_##funname: public ScriptValue { \ public: \ inline ScriptRule_##funname(const type1& name1, const type2& name2) \ @@ -205,11 +210,12 @@ inline Type from_script(const ScriptValueP& v, Variable var) { SCRIPT_PARAM_N(type2, str2, name2); \ return new_intrusive2(name1, name2); \ } \ - SCRIPT_FUNCTION(funname) { \ + SCRIPT_FUNCTION_AUX(funname, dep) { \ SCRIPT_PARAM_N(type1, str1, name1); \ SCRIPT_PARAM_N(type2, str2, name2); \ return ScriptRule_##funname(name1, name2).eval(ctx); \ } \ + more \ ScriptValueP ScriptRule_##funname::eval(Context& ctx) const #define SCRIPT_RULE_2_DEPENDENCIES(name) \ diff --git a/src/script/script_manager.cpp b/src/script/script_manager.cpp index 4cf84b45..d8a538ed 100644 --- a/src/script/script_manager.cpp +++ b/src/script/script_manager.cpp @@ -278,6 +278,7 @@ void SetScriptManager::updateAll() { #ifdef LOG_UPDATES wxLogDebug(_("Update all")); #endif + wxBusyCursor busy; // update set data Context& ctx = getContext(set.stylesheet); FOR_EACH(v, set.data) {