diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IComponentCreator.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IComponentCreator.cs
index 47a1c6a96f..b3a9cf2bbe 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IComponentCreator.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/IComponentCreator.cs
@@ -48,6 +48,12 @@ namespace ICSharpCode.PythonBinding
/// Name of the object.
/// If set to true then the is added to the design container.
object CreateInstance(Type type, ICollection arguments, string name, bool addToContainer);
+
+ ///
+ /// Gets the created instance.
+ ///
+ /// Instance name.
+ object GetInstance(string name);
///
/// Gets the type given its name.
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs
index fe0fbf9c32..d27f1a9fa6 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeDeserializer.cs
@@ -144,11 +144,14 @@ namespace ICSharpCode.PythonBinding
Expression listItemExpression = list.Items[i];
ConstantExpression constantExpression = listItemExpression as ConstantExpression;
MemberExpression memberExpression = listItemExpression as MemberExpression;
+ NameExpression nameExpression = listItemExpression as NameExpression;
if (constantExpression != null) {
array.SetValue(constantExpression.Value, i);
} else if (memberExpression != null) {
string name = PythonControlFieldExpression.GetVariableName(memberExpression.Name.ToString());
array.SetValue(componentCreator.GetComponent(name), i);
+ } else if (nameExpression != null) {
+ array.SetValue(componentCreator.GetInstance(nameExpression.Name.ToString()), i);
}
}
return array;
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs
index f261c38986..57f26654d4 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs
@@ -94,6 +94,7 @@ namespace ICSharpCode.PythonBinding
{
if (node.Left.Count > 0) {
MemberExpression lhsMemberExpression = node.Left[0] as MemberExpression;
+ NameExpression lhsNameExpression = node.Left[0] as NameExpression;
if (lhsMemberExpression != null) {
fieldExpression = PythonControlFieldExpression.Create(lhsMemberExpression);
MemberExpression rhsMemberExpression = node.Right as MemberExpression;
@@ -110,14 +111,23 @@ namespace ICSharpCode.PythonBinding
}
walkingAssignment = false;
}
- }
+ } else if (lhsNameExpression != null) {
+ CallExpression callExpression = node.Right as CallExpression;
+ if (callExpression != null) {
+ CreateInstance(lhsNameExpression.Name.ToString(), callExpression);
+ }
+ }
}
return false;
}
public override bool Walk(ConstantExpression node)
{
- SetPropertyValue(fieldExpression.MemberName, node.Value);
+ if (fieldExpression.IsSelfReference) {
+ SetPropertyValue(fieldExpression.MemberName, node.Value);
+ } else {
+ SetPropertyValue(componentCreator.GetInstance(fieldExpression.VariableName), fieldExpression.MemberName, node.Value);
+ }
return false;
}
@@ -279,11 +289,8 @@ namespace ICSharpCode.PythonBinding
{
MemberExpression memberExpression = node.Target as MemberExpression;
if (memberExpression != null) {
- string name = PythonControlFieldExpression.GetMemberName(memberExpression);
- Type type = componentCreator.GetType(name);
- if (type != null) {
- List