Adjust some more code that was depending on the function and delegate calling

conventions being equal.
There's also an instance in `tango.text.convert.Layout` that should be adjusted:
{{{
Index: tango/text/convert/Layout.d
===================================================================
--- tango/text/convert/Layout.d	(revision 4578)
+++ tango/text/convert/Layout.d	(working copy)
 -660,8 +660,12 @@

                        case TypeCode.STRUCT:
                             auto s = cast(TypeInfo_Struct) type;
-                            if (s.xtoString)
-                                return Utf.fromString8 (s.xtoString(p), result);
+                            if (s.xtoString) {
+                                char[] delegate() toString;
+                                toString.ptr = p;
+                                toString.funcptr = cast(char[] function()) s.xtoString;
+                                return Utf.fromString8 (toString(), result);
+                            }
                             goto default;

                        case TypeCode.INTERFACE:
}}}
This commit is contained in:
Frits van Bommel
2009-05-31 15:27:01 +02:00
parent 78aa98fdfb
commit 46cd6504fa
3 changed files with 33 additions and 21 deletions

View File

@@ -58,7 +58,10 @@ void main()
assert(ti.compare(&v,&u) > 0);
{
auto tis = cast(TypeInfo_Struct)ti;
assert(tis.xtoString(&s) == s.toString());
char[] delegate() structToString;
structToString.ptr = &s;
structToString.funcptr = tis.xtoString;
assert(structToString() == s.toString());
}
}
}

View File

@@ -1,5 +1,5 @@
// tries to implement a fairly complete variadic print function
module tangotests.vararg3;
module tangotests.vararg6;
extern(C) int printf(char*, ...);
@@ -179,7 +179,10 @@ void print(TypeInfo ti, void* arg)
{
if (sti.xtoString !is null)
{
char[] str = sti.xtoString(arg);
char[] delegate() toString;
toString.ptr = arg;
toString.funcptr = sti.xtoString;
char[] str = toString();
printf("%.*s", str.length, str.ptr);
}
else