www.digitalmars.com         C & C++   DMDScript  

D - assert in compiler and crashes

reply "Mike Wynn" <mike.wynn l8night.co.uk> writes:
walter; when I try to compile the following code with 0.50 alpha
I get
Assertion failure: '0' on line 918 in file 'func.c'
(uncomment the comment and the compiler crashes very likely I've got the
template specialation wrong)


//template delegatehelper( P, RV, T : RV (*T)( P ) )
template delegatehelper( P, RV, T : RV (*)( P ) )
{
  class FcHelper
  {
   T toCall;
   this( T funcPtr ) { toCall = funcPtr; }
   RV evoke( P param ) { return toCall( param ); }
  }
}

template autocloser( T, P )
{
 auto class MyBlock
 {
  bit delegate ( T ) closeDelegate;
  bit (*closeFuncPtr)( T );

  closeDelegate close;
  T item;

  this( operationDelegate close0, P param, out T made )
  {
   mad = item = new T( param );
   close = close0;
  }
  this( closeFuncPtr close0, P param, out T made )
  {
   instance delegatehelper( T, bit, closeFuncPtr ) dh;
   dh.FcHelper conv = new dh.FcHelper( close0 );
   this( &conv.evoke, param, made );
  }

  ~this()
  {
   close( item );
  }
 }
}

class MyFile { int i; this( int ii ) { i = ii; printf( "OPEN\n" ); } }

bit closeIt( MyFile f )
{
 printf( "CLOSE\n" );
 return true;
}


int main( char[][] args )
{
 instance autocloser( MyFile, int ) closer;
 MyFile res;
 printf("Starting ...\n");
 {
  auto closer.MyBlock autoCloser = new closer.MyBlock( &closeIt, 3, res );
  printf("[doing stuff]\n");
 }
 printf("end.\n");

 return 0;
}
Jan 20 2003
parent "Mike Wynn" <mike.wynn l8night.co.uk> writes:
traced to destructor

the following will compile if you comment out the destructor

template foo( T )
{
 class failsToCompile
 {
  this( T item ) { }
  ~this()
  {
  }
 }
}

instance foo( int ) myfoo;

int main( char[][] args )
{
 return 0;
}
Jan 20 2003