[IronPython] Global and Local ScriptScope
caspar.lessing at gmail.com
Tue Jan 6 14:58:32 CET 2009
I use an embedded instance of IronPython.
My program spends effort to create a global context. It then continues to to
execute statements inside a local context which need resolve the items in
the global context as well. Think of python functions' local context and its
interaction with the module context.
In an older version of IronPython I had a EngineModule which I used for my
global context and I could use a Dictionary<string,object> for my locals.
This allowed my to do the following:
PythonEngine pe = new PythonEngine();
Context = pe.CreateModule();
Dictionary<string,object> locals = new
for(int i = 0; i < ScriptList.Length; i++)
locals[i] = new Dictionary<string,object>()
pe.Execute(ScriptList[i], Context, locals[i]);
I am having trouble doing something similar with ScriptScope. I have
explored some avenues:
1. Copying the global context into each local one. It seems too expensive.
Possibly it is only the cloning of some form of dictionary, but still.
2. Implementing a new CustomSymbolDictionary and overriding
TryGetExtraValue. Problem is that it is called before trying to resolve
symbols internally (Which leads to globals being resolved rather than
3. Creating my own implementation of IAttributesCollection (Seemed too
complex after discovering the Parent mechanism in Scope)
I eventually found the Parent mechanism inside Scope. However I do not have
access to create a new ScriptScope (Internal constructor) based on a Parent
I had to create a new Factory method inside ScriptEngine which looks as
public sealed class ScriptEngine
public ScriptScope CreateScope(ScriptScope parent)
return new ScriptScope(this, new Scope(parent.Scope,null));
My question if whether this is a sensible addition to ScriptEngine or am I
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Ironpython-users