Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/PresentationFramework/Mono.Windows.Serialization/CodeWriter.cs')
-rw-r--r--mcs/class/PresentationFramework/Mono.Windows.Serialization/CodeWriter.cs35
1 files changed, 24 insertions, 11 deletions
diff --git a/mcs/class/PresentationFramework/Mono.Windows.Serialization/CodeWriter.cs b/mcs/class/PresentationFramework/Mono.Windows.Serialization/CodeWriter.cs
index 8ac2792deca..5ed0c3118fb 100644
--- a/mcs/class/PresentationFramework/Mono.Windows.Serialization/CodeWriter.cs
+++ b/mcs/class/PresentationFramework/Mono.Windows.Serialization/CodeWriter.cs
@@ -89,13 +89,19 @@ namespace Mono.Windows.Serialization {
// bottom of stack holds CodeVariableReferenceExpression
// pushes a reference to the new current type
- public void CreateObject(Type type)
+ public void CreateObject(Type type, string varName)
{
- string varName = Char.ToLower(type.Name[0]) + type.Name.Substring(1);
- // make sure something sensible happens when class
- // names start with a lowercase letter
- if (varName == type.Name)
- varName = "_" + varName;
+ bool isDefaultName;
+ if (varName == null) {
+ isDefaultName = true;
+ varName = Char.ToLower(type.Name[0]) + type.Name.Substring(1);
+ // make sure something sensible happens when class
+ // names start with a lowercase letter
+ if (varName == type.Name)
+ varName = "_" + varName;
+ } else {
+ isDefaultName = false;
+ }
if (!nameClashes.ContainsKey(varName))
nameClashes[varName] = 0;
@@ -104,16 +110,23 @@ namespace Mono.Windows.Serialization {
varName += (int)nameClashes[varName];
}
- CodeVariableDeclarationStatement declaration =
- new CodeVariableDeclarationStatement(type,
- varName,
- new CodeObjectCreateExpression(type));
+
+ if (isDefaultName) {
+ CodeVariableDeclarationStatement declaration =
+ new CodeVariableDeclarationStatement(type,
+ varName,
+ new CodeObjectCreateExpression(type));
+ constructor.Statements.Add(declaration);
+ } else {
+ CodeMemberField declaration = new CodeMemberField(type, varName);
+ declaration.InitExpression = new CodeObjectCreateExpression(type);
+ this.type.Members.Add(declaration);
+ }
CodeVariableReferenceExpression varRef = new CodeVariableReferenceExpression(varName);
CodeMethodInvokeExpression addChild = new CodeMethodInvokeExpression(
(CodeExpression)objects[objects.Count - 1],
"AddChild",
varRef);
- constructor.Statements.Add(declaration);
constructor.Statements.Add(addChild);
objects.Add(varRef);
}