correct scope handling for closures, this was broken after the change to not make calls open a scope.

git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1444 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
twanvl
2010-07-21 16:35:23 +00:00
parent 51dfed69b4
commit a6198ddf1b
2 changed files with 5 additions and 3 deletions
+3 -2
View File
@@ -144,7 +144,8 @@ ScriptValueP Context::eval(const Script& script, bool useScope) {
: (Variable)-1;
Profiler prof(timer, function);
#endif
// get function and call
// get function and call.
// there is no need to open a new scope for this function, since we already did so for the arguments
stack.back() = stack.back()->eval(*this, false);
// finish profiling
#if USE_SCRIPT_PROFILING
@@ -387,7 +388,7 @@ class ScriptCompose : public ScriptValue {
// execute b
Variable fun = ctx.lookupVariableValue(b);
Profiler prof(timer,fun);
return b->eval(ctx);
return b->eval(ctx, openScope);
}
#else
// Always open a scope for a; variables it makes need to be
+2 -1
View File
@@ -527,7 +527,8 @@ ScriptValueP ScriptClosure::dependencies(Context& ctx, const Dependency& dep) co
}
void ScriptClosure::applyBindings(Context& ctx) const {
FOR_EACH_CONST(b, bindings) {
if (ctx.getVariableScope(b.first) != 1) {
if (ctx.getVariableScope(b.first) != 0) {
// variables passed as arguments (i.e. in scope 0) override these default bindings
ctx.setVariable(b.first, b.second);
}
}