aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/hybrid/tree-inline.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/hybrid/tree-inline.cxx')
-rw-r--r--xsde/cxx/hybrid/tree-inline.cxx212
1 files changed, 149 insertions, 63 deletions
diff --git a/xsde/cxx/hybrid/tree-inline.cxx b/xsde/cxx/hybrid/tree-inline.cxx
index 1da9261..fa55403 100644
--- a/xsde/cxx/hybrid/tree-inline.cxx
+++ b/xsde/cxx/hybrid/tree-inline.cxx
@@ -260,6 +260,8 @@ namespace CXX
}
else
{
+ String p (L"this->" + member);
+
// const char*
// name () const
//
@@ -267,7 +269,7 @@ namespace CXX
<< "const char* " << name << "::" << endl
<< value << " () const"
<< "{"
- << "return this->" << member << ";"
+ << "return " << p << ";"
<< "}";
// char*
@@ -277,7 +279,7 @@ namespace CXX
<< "char* " << name << "::" << endl
<< value << " ()"
<< "{"
- << "return this->" << member << ";"
+ << "return " << p << ";"
<< "}";
// void
@@ -286,9 +288,14 @@ namespace CXX
os << inl
<< "void " << name << "::" << endl
<< value << " (char* x)"
- << "{"
- << "delete[] this->" << member << ";"
- << "this->" << member << " = x;"
+ << "{";
+
+ if (!custom_alloc)
+ os << "delete[] " << p << ";";
+ else
+ os << "::xsde::cxx::free (" << p << ");";
+
+ os << p << " = x;"
<< "}";
// char*
@@ -300,8 +307,8 @@ namespace CXX
<< "char* " << name << "::" << endl
<< uc.get<String> ("value-detach") << " ()"
<< "{"
- << "char* r = this->" << member << ";"
- << "this->" << member << " = 0;"
+ << "char* r = " << p << ";"
+ << p << " = 0;"
<< "return r;"
<< "}";
}
@@ -348,8 +355,8 @@ namespace CXX
ro_ret_ (c, TypeName::ro_ret),
ret_ (c, TypeName::ret),
arg_ (c, TypeName::arg),
- deref_ (c, TypeOps::deref),
- delete_ (c, TypeOps::delete_),
+ deref_ (c),
+ delete_ (c),
compare_value_ (c)
{
}
@@ -425,9 +432,8 @@ namespace CXX
else
{
os << "{";
- delete_.dispatch (t);
- os << " this->" << member << ";"
- << "this->" << member << " = 0;"
+ delete_.dispatch (t, L"this->" + member);
+ os << "this->" << member << " = 0;"
<< "}";
}
}
@@ -439,9 +445,8 @@ namespace CXX
{
os << "if (!x)"
<< "{";
- delete_.dispatch (t);
- os << " this->" << member << ";"
- << "this->" << member << " = 0;"
+ delete_.dispatch (t, L"this->" + member);
+ os << "this->" << member << " = 0;"
<< "}";
}
}
@@ -530,10 +535,7 @@ namespace CXX
<< "{";
if (!fl)
- {
- delete_.dispatch (t);
- os << " this->" << member << ";";
- }
+ delete_.dispatch (t, L"this->" + member);
os << "this->" << member << " = x;";
@@ -566,8 +568,8 @@ namespace CXX
TypeName ro_ret_;
TypeName ret_;
TypeName arg_;
- TypeOps deref_;
- TypeOps delete_;
+ TypeDeref deref_;
+ TypeDelete delete_;
CompareValue compare_value_;
};
@@ -578,8 +580,8 @@ namespace CXX
ro_ret_ (c, TypeName::ro_ret),
ret_ (c, TypeName::ret),
arg_ (c, TypeName::arg),
- deref_ (c, TypeOps::deref),
- delete_ (c, TypeOps::delete_)
+ deref_ (c),
+ delete_ (c)
{
}
@@ -653,9 +655,8 @@ namespace CXX
{
os << "if (!x)"
<< "{";
- delete_.dispatch (t);
- os << " this->" << member << ";"
- << "this->" << member << " = 0;"
+ delete_.dispatch (t, L"this->" + member);
+ os << "this->" << member << " = 0;"
<< "}";
}
@@ -699,10 +700,7 @@ namespace CXX
<< "{";
if (!fl)
- {
- delete_.dispatch (t);
- os << " this->" << member << ";";
- }
+ delete_.dispatch (t, L"this->" + member);
os << "this->" << member << " = x;";
@@ -734,8 +732,8 @@ namespace CXX
TypeName ro_ret_;
TypeName ret_;
TypeName arg_;
- TypeOps deref_;
- TypeOps delete_;
+ TypeDeref deref_;
+ TypeDelete delete_;
};
struct ElementInChoiceFunc: Traversal::Element, Context
@@ -746,8 +744,8 @@ namespace CXX
ret_ (c, TypeName::ret),
arg_ (c, TypeName::arg),
var_ (c, TypeName::var),
- deref_ (c, TypeOps::deref),
- delete_ (c, TypeOps::delete_)
+ deref_ (c),
+ delete_ (c)
{
}
@@ -849,9 +847,8 @@ namespace CXX
{
os << "else if (!x)"
<< "{";
- delete_.dispatch (t);
- os << " this->" << umember << "." << member << ";"
- << "this->" << umember << "." << member << " = 0;"
+ delete_.dispatch (t, L"this->" + umember + L"." + member);
+ os << "this->" << umember << "." << member << " = 0;"
<< "}";
}
@@ -935,10 +932,10 @@ namespace CXX
}
else
{
- os << "else" << endl;
- delete_.dispatch (t);
- os << " this->" << umember << "." << member << ";"
- << endl
+ os << "else"
+ << "{";
+ delete_.dispatch (t, L"this->" + umember + L"." + member);
+ os << "}"
<< "this->" << umember << "." << member << " = x;";
}
@@ -968,8 +965,8 @@ namespace CXX
TypeName ret_;
TypeName arg_;
TypeName var_;
- TypeOps deref_;
- TypeOps delete_;
+ TypeDeref deref_;
+ TypeDelete delete_;
};
struct AllFunc: Traversal::All, Context
@@ -1013,7 +1010,7 @@ namespace CXX
// void
- // preset (bool);
+ // present (bool);
//
os << inl
<< "void " << scope << "::" << endl
@@ -1024,10 +1021,21 @@ namespace CXX
os << "this->" << epresent_member (a) << " = x;";
else
{
+ String p (L"this->" + member);
+
os << "if (!x)"
- << "{"
- << "delete this->" << member << ";"
- << "this->" << member << " = 0;"
+ << "{";
+
+ if (!custom_alloc)
+ os << "delete " << p << ";";
+ else
+ os << "if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+
+ os << p << " = 0;"
<< "}";
}
@@ -1083,7 +1091,18 @@ namespace CXX
<< "{";
if (!fl)
- os << "delete this->" << member << ";";
+ {
+ String p (L"this->" + member);
+
+ if (!custom_alloc)
+ os << "delete " << p << ";";
+ else
+ os << "if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+ }
os << "this->" << member << " = x;";
@@ -1206,10 +1225,21 @@ namespace CXX
os << "this->" << epresent_member (c) << " = x;";
else
{
+ String p (L"this->" + member);
+
os << "if (!x)"
- << "{"
- << "delete this->" << member << ";"
- << "this->" << member << " = 0;"
+ << "{";
+
+ if (!custom_alloc)
+ os << "delete " << p << ";";
+ else
+ os << "if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+
+ os << p << " = 0;"
<< "}";
}
@@ -1265,7 +1295,18 @@ namespace CXX
<< "{";
if (!fl)
- os << "delete this->" << member << ";";
+ {
+ String p (L"this->" + member);
+
+ if (!custom_alloc)
+ os << "delete " << p << ";";
+ else
+ os << "if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+ }
os << "this->" << member << " = x;";
@@ -1374,10 +1415,21 @@ namespace CXX
os << "this->" << epresent_member (s) << " = x;";
else
{
+ String p (L"this->" + member);
+
os << "if (!x)"
- << "{"
- << "delete this->" << member << ";"
- << "this->" << member << " = 0;"
+ << "{";
+
+ if (!custom_alloc)
+ os << "delete " << p << ";";
+ else
+ os << "if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+
+ os << p << " = 0;"
<< "}";
}
@@ -1433,7 +1485,18 @@ namespace CXX
<< "{";
if (!fl)
- os << "delete this->" << member << ";";
+ {
+ String p (L"this->" + member);
+
+ if (!custom_alloc)
+ os << "delete " << p << ";";
+ else
+ os << "if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+ }
os << "this->" << member << " = x;";
@@ -1562,10 +1625,21 @@ namespace CXX
}
else
{
+ String p (L"this->" + umember + L"." + member);
+
os << "else if (!x)"
- << "{"
- << "delete this->" << umember << "." << member << ";"
- << "this->" << umember << "." << member << " = 0;"
+ << "{";
+
+ if (!custom_alloc)
+ os << "delete " << p << ";";
+ else
+ os << "if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+
+ os << p << " = 0;"
<< "}";
}
@@ -1638,10 +1712,22 @@ namespace CXX
}
else
{
- os << "else" << endl
- << "delete this->" << umember << "." << member << ";"
- << endl
- << "this->" << umember << "." << member << " = x;";
+ String p (L"this->" + umember + L"." + member);
+
+ os << "else";
+
+ if (!custom_alloc)
+ os << endl
+ << "delete " << p << ";"
+ << endl;
+ else
+ os << " if (" << p << ")"
+ << "{"
+ << p << "->~" << type << " ();"
+ << "::xsde::cxx::free (" << p << ");"
+ << "}";
+
+ os << p << " = x;";
}
os << "}";