Fixed for new LDC. Changes should be backwards compatible.

object.d needed the find() method, although the implementation of this method is not complete.

Signed-off-by: The XOmB Overlord <overlord@xomb.net>
This commit is contained in:
wilkie
2009-05-03 08:28:04 +08:00
committed by The XOmB Overlord
parent 300036aa1e
commit 93f112197d

View File

@@ -44,6 +44,7 @@ import kernel.runtime.util;
//} //}
extern(C) Object _d_newclass(ClassInfo ci); extern(C) Object _d_newclass(ClassInfo ci);
extern(C) Object _d_allocclass(ClassInfo ci);
/// Standard boolean type. /// Standard boolean type.
alias bool bit; alias bool bit;
@@ -277,15 +278,15 @@ class ClassInfo : Object
// 8: // has constructors // 8: // has constructors
void *deallocator; void *deallocator;
OffsetTypeInfo[] offTi; OffsetTypeInfo[] offTi;
void function(Object) defaultConstructor; // default Constructor void* defaultConstructor; // default Constructor
/************* /*************
* Search all modules for ClassInfo corresponding to classname. * Search all modules for ClassInfo corresponding to classname.
* Returns: null if not found * Returns: null if not found
*/ */
/*static ClassInfo find(char[] classname) static ClassInfo find(char[] classname)
{ {
foreach (m; ModuleInfo.modules()) /*foreach (m; ModuleInfo)
{ {
//writefln("module %s, %d", m.name, m.localClasses.length); //writefln("module %s, %d", m.name, m.localClasses.length);
foreach (c; m.localClasses) foreach (c; m.localClasses)
@@ -294,15 +295,16 @@ class ClassInfo : Object
if (c.name == classname) if (c.name == classname)
return c; return c;
} }
} }*/
return null; return null;
}*/ }
/******************** /********************
* Create instance of Object represented by 'this'. * Create instance of Object represented by 'this'.
*/ */
Object create() Object create()
{ {
/*
if (flags & 8 && !defaultConstructor) if (flags & 8 && !defaultConstructor)
return null; return null;
Object o = _d_newclass(this); Object o = _d_newclass(this);
@@ -310,7 +312,20 @@ class ClassInfo : Object
{ {
defaultConstructor(o); defaultConstructor(o);
} }
return o; return o;*/
if (flags & 8 && !defaultConstructor)
return null;
Object o = _d_allocclass(this);
// initialize it
(cast(byte*) o)[0 .. init.length] = init[];
if (flags & 8 && defaultConstructor)
{
auto ctor = cast(Object function(Object))defaultConstructor;
return ctor(o);
}
return o;
} }
} }