www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [class properties] Bugs

reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
Was looking through the D changelog and found that .sizeof was made 
un-overridable.  I remember when it wasn't.. in any case, I had a hunch, and 
tried a few other things.  I found two more bugs.

import std.stdio;

class A
{
 static uint alignof()
 {
  return 30;
 }

 int b;
}

void main()
{
 // this really shouldn't be legal
 writefln(A.alignof);

 // this line causes errors
 //writefln(A.b.offsetof);
}

Note that .alignof can be redefined (bad), and for some reason, .offsetof 
causes the following errors:

dtest.d(19): 'this' is only allowed in non-static member functions
dtest.d(19): this for b needs to be type A not type int

Using .offsetof on a member of an instantiated A works, however.  This is 
inconsistent with the struct behavior, which is exactly the opposite - gives 
an error when trying to use .offsetof on a member of an instantiated struct, 
but works when using the struct type (i.e. for struct A with member b, 
A.b.offsetof). 
Apr 22 2005
next sibling parent "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"Jarrett Billingsley" <kb3ctd2 yahoo.com> wrote in message 
news:d4c3qc$eu8$1 digitaldaemon.com...

Just found another!  I can overload offsetof as well.

import std.stdio;

class A
{
 this()
 {
  b=new B;
 }

 class B
 {
  uint offsetof()
  {
   return 6756;
  }
 }
 B b;
}

void main()
{
 A a=new A;
 writefln(a.b.offsetof);
}
Apr 22 2005
prev sibling parent Thomas Kuehne <thomas-dloop kuehne.thisisspam.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Jarrett Billingsley schrieb am Fri, 22 Apr 2005 20:14:42 -0400:
 Was looking through the D changelog and found that .sizeof was made 
 un-overridable.  I remember when it wasn't.. in any case, I had a hunch, and 
 tried a few other things.  I found two more bugs.

 import std.stdio;

 class A
 {
  static uint alignof()
  {
   return 30;
  }

  int b;
 }

 void main()
 {
  // this really shouldn't be legal
  writefln(A.alignof);

  // this line causes errors
  //writefln(A.b.offsetof);
 }

 Note that .alignof can be redefined (bad), and for some reason, .offsetof 
 causes the following errors:

 dtest.d(19): 'this' is only allowed in non-static member functions
 dtest.d(19): this for b needs to be type A not type int

 Using .offsetof on a member of an instantiated A works, however.  This is 
 inconsistent with the struct behavior, which is exactly the opposite - gives 
 an error when trying to use .offsetof on a member of an instantiated struct, 
 but works when using the struct type (i.e. for struct A with member b, 
 A.b.offsetof). 

Added to DStress as http://dstress.kuehne.cn/nocompile/alignof_01.d http://dstress.kuehne.cn/nocompile/alignof_02.d http://dstress.kuehne.cn/nocompile/alignof_03.d http://dstress.kuehne.cn/nocompile/alignof_04.d http://dstress.kuehne.cn/nocompile/offsetof_74.d http://dstress.kuehne.cn/nocompile/offsetof_75.d http://dstress.kuehne.cn/nocompile/offsetof_76.d http://dstress.kuehne.cn/nocompile/offsetof_77.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFCaeiG3w+/yD4P9tIRAr1UAJ9S2sXkQ3Cwf8AWvDzQsNPq2kaU8QCeMc7s BDiYNpoCqpaM++WZpSNgmA0= =7b4/ -----END PGP SIGNATURE-----
Apr 22 2005