[svn r58] Fixed cond expression resulting in a non-basic type.

Fixed identity expression for dynamic arrays.
Revamped the system to keep track of lvalues and rvalues and their relations.
Typedef declaration now generate the custom typeinfo.
Other bugfixes.
This commit is contained in:
Tomas Lindquist Olsen
2007-10-24 01:37:34 +02:00
parent b72a4fa645
commit 039bc0880d
17 changed files with 370 additions and 97 deletions

14
test/bug32.d Normal file
View File

@@ -0,0 +1,14 @@
module bug32;
struct S
{
char[] getName() { return name; }
char[] name;
}
void main()
{
S s = S("Kyle");
char[] name = s.name;
printf("%.*s\n", name.length, name.ptr);
}

33
test/bug33.d Normal file
View File

@@ -0,0 +1,33 @@
module bug33;
extern(C) int memcmp(void*,void*,size_t);
private int string_cmp(char[] s1, char[] s2)
{
auto len = s1.length;
if (s2.length < len)
len = s2.length;
int result = memcmp(s1.ptr, s2.ptr, len);
if (result == 0)
result = cast(int)(cast(ptrdiff_t)s1.length - cast(ptrdiff_t)s2.length);
return result;
}
struct S
{
char[] toString()
{
return "S";
}
}
int func()
{
S a,b;
return string_cmp(a.toString(),b.toString());
}
void main()
{
assert(func() == 0);
}

12
test/condexp1.d Normal file
View File

@@ -0,0 +1,12 @@
module condexp1;
void main()
{
char[] a = "hello";
char[] b = "world";
int i = 42;
{
char[] c = i > 50 ? b : a;
assert(c is a);
}
}

13
test/typeinfo3.d Normal file
View File

@@ -0,0 +1,13 @@
module typeinfo3;
typedef int int_t;
void main()
{
int_t i;
auto ti = typeid(typeof(i));
printf("%s\n",ti.toString.ptr);
assert(ti.toString() == "typeinfo3.int_t");
assert(ti.next !is null);
assert(ti.next.toString() == "int");
}