public void Assign(string name, object value)
{
if (name.StartsWith("$") && !IsGlobal)
global.Assign(name, value);
else if (members.ContainsKey(name))
this[name] = value;
else if (parent != null)
parent.Assign(name, value);
else if (name.StartsWith("$"))
members[name] = value;
else
throw ErrorFactory.CreateNotDefinedError(name);
}