phobos 2.004

This commit is contained in:
Brad Roberts 2007-09-10 07:36:51 +00:00
parent d90858f401
commit c31f87641e
7 changed files with 172 additions and 27 deletions

View file

@ -289,9 +289,11 @@ class ClassInfo : Object
// 2: // has no possible pointers into GC memory // 2: // has no possible pointers into GC memory
// 4: // has offTi[] member // 4: // has offTi[] member
// 8: // has constructors // 8: // has constructors
// 16: // has xgetMembers member
void *deallocator; void *deallocator;
OffsetTypeInfo[] offTi; OffsetTypeInfo[] offTi;
void function(Object) defaultConstructor; // default Constructor void function(Object) defaultConstructor; // default Constructor
const(MemberInfo[]) function(string) xgetMembers;
/************* /*************
* Search all modules for ClassInfo corresponding to classname. * Search all modules for ClassInfo corresponding to classname.
@ -326,8 +328,23 @@ class ClassInfo : Object
} }
return o; return o;
} }
/*************************
* Search for all members with the name 'name'.
* If name[] is null, return all members.
*/
const(MemberInfo[]) getMembers(string name)
{
if (flags & 16 && xgetMembers)
{
return xgetMembers(name);
}
return null;
}
} }
/* ========================================================================== */
private import std.string; private import std.string;
/** /**
@ -713,7 +730,7 @@ class TypeInfo_Function : TypeInfo
return 0; // no size for functions return 0; // no size for functions
} }
TypeInfo next; TypeInfo next; // function return type
} }
class TypeInfo_Delegate : TypeInfo class TypeInfo_Delegate : TypeInfo
@ -740,7 +757,7 @@ class TypeInfo_Delegate : TypeInfo
uint flags() { return 1; } uint flags() { return 1; }
TypeInfo next; TypeInfo next; // delegate return type
} }
class TypeInfo_Class : TypeInfo class TypeInfo_Class : TypeInfo
@ -960,6 +977,8 @@ class TypeInfo_Struct : TypeInfo
string function(const(void)*) xtoString; string function(const(void)*) xtoString;
uint m_flags; uint m_flags;
const(MemberInfo[]) function(string) xgetMembers;
} }
class TypeInfo_Tuple : TypeInfo class TypeInfo_Tuple : TypeInfo
@ -1026,27 +1045,77 @@ class TypeInfo_Tuple : TypeInfo
class TypeInfo_Const : TypeInfo class TypeInfo_Const : TypeInfo
{ {
string toString() { return "const " ~ base.toString(); } override string toString() { return "const " ~ base.toString(); }
int opEquals(Object o) { return base.opEquals(o); } override int opEquals(Object o) { return base.opEquals(o); }
hash_t getHash(in void *p) { return base.getHash(p); } override hash_t getHash(in void *p) { return base.getHash(p); }
int equals(in void *p1, in void *p2) { return base.equals(p1, p2); } override int equals(in void *p1, in void *p2) { return base.equals(p1, p2); }
int compare(in void *p1, in void *p2) { return base.compare(p1, p2); } override int compare(in void *p1, in void *p2) { return base.compare(p1, p2); }
size_t tsize() { return base.tsize(); } override size_t tsize() { return base.tsize(); }
void swap(void *p1, void *p2) { return base.swap(p1, p2); } override void swap(void *p1, void *p2) { return base.swap(p1, p2); }
TypeInfo next() { return base.next(); } override TypeInfo next() { return base.next(); }
uint flags() { return base.flags(); } override uint flags() { return base.flags(); }
void[] init() { return base.init(); } override void[] init() { return base.init(); }
TypeInfo base; TypeInfo base;
} }
class TypeInfo_Invariant : TypeInfo_Const class TypeInfo_Invariant : TypeInfo_Const
{ {
string toString() { return "invariant " ~ base.toString(); } override string toString() { return "invariant " ~ base.toString(); }
} }
/* ========================================================================== */
abstract class MemberInfo
{
string name();
}
class MemberInfo_field : MemberInfo
{
this(string name, TypeInfo ti, size_t offset)
{
m_name = name;
m_typeinfo = ti;
m_offset = offset;
}
string name() { return m_name; }
TypeInfo typeInfo() { return m_typeinfo; }
size_t offset() { return m_offset; }
string m_name;
TypeInfo m_typeinfo;
size_t m_offset;
}
class MemberInfo_function : MemberInfo
{
this(string name, TypeInfo ti, void* fp, uint flags)
{
m_name = name;
m_typeinfo = ti;
m_fp = fp;
m_flags = flags;
}
string name() { return m_name; }
TypeInfo typeInfo() { return m_typeinfo; }
void* fp() { return m_fp; }
uint flags() { return m_flags; }
string m_name;
TypeInfo m_typeinfo;
void* m_fp;
uint m_flags;
}
/* ========================================================================== */
/** /**
* All recoverable exceptions should be derived from class Exception. * All recoverable exceptions should be derived from class Exception.
@ -1070,12 +1139,12 @@ class Exception : Object
this.next = next; this.next = next;
} }
void print() override void print()
{ {
printf("%.*s\n", toString()); printf("%.*s\n", toString());
} }
string toString() { return msg; } override string toString() { return msg; }
} }
/** /**

View file

@ -14,8 +14,8 @@ LIB=libphobos2.a
CFLAGS=-O -m32 CFLAGS=-O -m32
#CFLAGS=-g -m32 #CFLAGS=-g -m32
DFLAGS=-O -release -w DFLAGS=-O -release
#DFLAGS=-unittest -w #DFLAGS=-unittest
CC=gcc CC=gcc
#DMD=/dmd/bin/dmd #DMD=/dmd/bin/dmd
@ -61,7 +61,7 @@ OBJS = asserterror.o deh2.o switch.o complex.o gcstats.o \
perf.o openrj.o uni.o trace.o boxer.o \ perf.o openrj.o uni.o trace.o boxer.o \
demangle.o cover.o bitarray.o bind.o aApplyR.o \ demangle.o cover.o bitarray.o bind.o aApplyR.o \
signals.o cpuid.o traits.o typetuple.o loader.o \ signals.o cpuid.o traits.o typetuple.o loader.o \
c_stdio.o \ c_stdio.o hiddenfunc.o \
ti_wchar.o ti_uint.o ti_short.o ti_ushort.o \ ti_wchar.o ti_uint.o ti_short.o ti_ushort.o \
ti_byte.o ti_ubyte.o ti_long.o ti_ulong.o ti_ptr.o \ ti_byte.o ti_ubyte.o ti_long.o ti_ulong.o ti_ptr.o \
ti_float.o ti_double.o ti_real.o ti_delegate.o \ ti_float.o ti_double.o ti_real.o ti_delegate.o \
@ -98,7 +98,7 @@ SRC_STD= std/zlib.d std/zip.d std/stdint.d std/conv.d std/utf.d std/uri.d \
std/stdio.d std/format.d std/perf.d std/openrj.d std/uni.d \ std/stdio.d std/format.d std/perf.d std/openrj.d std/uni.d \
std/boxer.d std/cstream.d std/demangle.d std/cover.d std/bitarray.d \ std/boxer.d std/cstream.d std/demangle.d std/cover.d std/bitarray.d \
std/signals.d std/cpuid.d std/typetuple.d std/traits.d std/bind.d \ std/signals.d std/cpuid.d std/typetuple.d std/traits.d std/bind.d \
std/metastrings.d std/metastrings.d std/hiddenfunc.d
SRC_STD_C= std/c/process.d std/c/stdlib.d std/c/time.d std/c/stdio.d \ SRC_STD_C= std/c/process.d std/c/stdlib.d std/c/time.d std/c/stdio.d \
std/c/math.d std/c/stdarg.d std/c/stddef.d std/c/fenv.d std/c/string.d \ std/c/math.d std/c/stdarg.d std/c/stddef.d std/c/fenv.d std/c/string.d \
@ -357,6 +357,9 @@ format.o : std/format.d
gc.o : std/gc.d gc.o : std/gc.d
$(DMD) -c $(DFLAGS) std/gc.d $(DMD) -c $(DFLAGS) std/gc.d
hiddenfunc.o : std/hiddenfunc.d
$(DMD) -c $(DFLAGS) std/hiddenfunc.d
loader.o : std/loader.d loader.o : std/loader.d
$(DMD) -c $(DFLAGS) std/loader.d $(DMD) -c $(DFLAGS) std/loader.d

View file

@ -53,12 +53,15 @@ class ClassInfo : Object
// 2: // has no possible pointers into GC memory // 2: // has no possible pointers into GC memory
// 4: // has offTi[] member // 4: // has offTi[] member
// 8: // has constructors // 8: // has constructors
// 16: // has xgetMembers member
void *deallocator; void *deallocator;
OffsetTypeInfo[] offTi; OffsetTypeInfo[] offTi;
void* defaultConstructor; // default Constructor void* defaultConstructor; // default Constructor
const(MemberInfo[]) function(string) xgetMembers;
static ClassInfo find(string classname); static ClassInfo find(string classname);
Object create(); Object create();
const(MemberInfo[]) getMembers(string);
} }
struct OffsetTypeInfo struct OffsetTypeInfo
@ -145,6 +148,8 @@ class TypeInfo_Struct : TypeInfo
string function(const(void)*) xtoString; string function(const(void)*) xtoString;
uint m_flags; uint m_flags;
const(MemberInfo[]) function(string) xgetMembers;
} }
class TypeInfo_Tuple : TypeInfo class TypeInfo_Tuple : TypeInfo
@ -161,6 +166,36 @@ class TypeInfo_Invariant : TypeInfo_Const
{ {
} }
abstract class MemberInfo
{
string name();
}
class MemberInfo_field : MemberInfo
{
this(string name, TypeInfo ti, size_t offset);
override string name();
TypeInfo typeInfo();
size_t offset();
}
class MemberInfo_function : MemberInfo
{
enum
{ Virtual = 1,
Member = 2,
Static = 4,
}
this(string name, TypeInfo ti, void* fp, uint flags);
override string name();
TypeInfo typeInfo();
void* fp();
uint flags();
}
// Recoverable errors // Recoverable errors
class Exception : Object class Exception : Object

33
std/hiddenfunc.d Normal file
View file

@ -0,0 +1,33 @@
// Written in the D programming language
module std.hiddenfunc;
import std.stdio;
class HiddenFuncError : Error
{
private:
this(ClassInfo ci)
{
super("hidden method called for " ~ ci.name);
}
}
/********************************************
* Called by the compiler generated module assert function.
* Builds an Assert exception and throws it.
*/
extern (C) static void _d_hidden_func()
{ Object o;
asm
{
mov o, EAX;
}
//printf("_d_hidden_func()\n");
HiddenFuncError a = new HiddenFuncError(o.classinfo);
//printf("assertion %p created\n", a);
throw a;
}

View file

@ -31,9 +31,11 @@ class ModuleInfo
uint flags; // initialization state uint flags; // initialization state
void (*ctor)(); void (*ctor)(); // module static constructor
void (*dtor)(); void (*dtor)(); // module static destructor
void (*unitTest)(); void (*unitTest)(); // module unit tests
const(MemberInfo[]) function(string) xgetMembers; // module getMembers() function
/****************** /******************
* Return collection of all modules in the program. * Return collection of all modules in the program.

View file

@ -27,7 +27,7 @@ class OutOfMemoryException : Exception
super(s); super(s);
} }
string toString() override string toString()
{ {
return s; return s;
} }

View file

@ -20,8 +20,8 @@ DIR=\dmd2
CFLAGS=-mn -6 -r CFLAGS=-mn -6 -r
#CFLAGS=-g -mn -6 -r #CFLAGS=-g -mn -6 -r
DFLAGS=-O -release -nofloat -w DFLAGS=-O -release -nofloat
#DFLAGS=-unittest -g -w #DFLAGS=-unittest -g
#DFLAGS=-unittest -cov -g #DFLAGS=-unittest -cov -g
CC=dmc CC=dmc
@ -76,7 +76,7 @@ OBJS= asserterror.obj deh.obj switch.obj complex.obj gcstats.obj \
errno.obj boxer.obj cstream.obj charset.obj metastrings.obj \ errno.obj boxer.obj cstream.obj charset.obj metastrings.obj \
gamma.obj demangle.obj cover.obj bitarray.obj aApplyR.obj \ gamma.obj demangle.obj cover.obj bitarray.obj aApplyR.obj \
signals.obj cpuid.obj typetuple.obj traits.obj bind.obj \ signals.obj cpuid.obj typetuple.obj traits.obj bind.obj \
c_stdio.obj \ c_stdio.obj hiddenfunc.obj \
ti_Ag.obj ti_C.obj ti_int.obj ti_char.obj \ ti_Ag.obj ti_C.obj ti_int.obj ti_char.obj \
ti_wchar.obj ti_uint.obj ti_short.obj ti_ushort.obj \ ti_wchar.obj ti_uint.obj ti_short.obj ti_ushort.obj \
ti_byte.obj ti_ubyte.obj ti_long.obj ti_ulong.obj ti_ptr.obj \ ti_byte.obj ti_ubyte.obj ti_long.obj ti_ulong.obj ti_ptr.obj \
@ -153,7 +153,7 @@ SRC_STD= std\zlib.d std\zip.d std\stdint.d std\conv.d std\utf.d std\uri.d \
std\stdio.d std\perf.d std\openrj.d std\uni.d std\boxer.d \ std\stdio.d std\perf.d std\openrj.d std\uni.d std\boxer.d \
std\cstream.d std\demangle.d std\cover.d std\bitarray.d \ std\cstream.d std\demangle.d std\cover.d std\bitarray.d \
std\signals.d std\cpuid.d std\typetuple.d std\traits.d std\bind.d \ std\signals.d std\cpuid.d std\typetuple.d std\traits.d std\bind.d \
std\metastrings.d std\metastrings.d std\hiddenfunc.d
SRC_STD_C= std\c\process.d std\c\stdlib.d std\c\time.d std\c\stdio.d \ SRC_STD_C= std\c\process.d std\c\stdlib.d std\c\time.d std\c\stdio.d \
std\c\math.d std\c\stdarg.d std\c\stddef.d std\c\fenv.d std\c\string.d \ std\c\math.d std\c\stdarg.d std\c\stddef.d std\c\fenv.d std\c\string.d \
@ -386,6 +386,9 @@ format.obj : std\format.d
gc.obj : std\gc.d gc.obj : std\gc.d
$(DMD) -c $(DFLAGS) std\gc.d $(DMD) -c $(DFLAGS) std\gc.d
hiddenfunc.obj : std\hiddenfunc.d
$(DMD) -c $(DFLAGS) std\hiddenfunc.d
loader.obj : std\loader.d loader.obj : std\loader.d
$(DMD) -c $(DFLAGS) std\loader.d $(DMD) -c $(DFLAGS) std\loader.d