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
// 4: // has offTi[] member
// 8: // has constructors
// 16: // has xgetMembers member
void *deallocator;
OffsetTypeInfo[] offTi;
void function(Object) defaultConstructor; // default Constructor
const(MemberInfo[]) function(string) xgetMembers;
/*************
* Search all modules for ClassInfo corresponding to classname.
@ -326,8 +328,23 @@ class ClassInfo : Object
}
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;
/**
@ -713,7 +730,7 @@ class TypeInfo_Function : TypeInfo
return 0; // no size for functions
}
TypeInfo next;
TypeInfo next; // function return type
}
class TypeInfo_Delegate : TypeInfo
@ -740,7 +757,7 @@ class TypeInfo_Delegate : TypeInfo
uint flags() { return 1; }
TypeInfo next;
TypeInfo next; // delegate return type
}
class TypeInfo_Class : TypeInfo
@ -960,6 +977,8 @@ class TypeInfo_Struct : TypeInfo
string function(const(void)*) xtoString;
uint m_flags;
const(MemberInfo[]) function(string) xgetMembers;
}
class TypeInfo_Tuple : TypeInfo
@ -1026,27 +1045,77 @@ class TypeInfo_Tuple : 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); }
hash_t getHash(in void *p) { return base.getHash(p); }
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); }
size_t tsize() { return base.tsize(); }
void swap(void *p1, void *p2) { return base.swap(p1, p2); }
override int opEquals(Object o) { return base.opEquals(o); }
override hash_t getHash(in void *p) { return base.getHash(p); }
override int equals(in void *p1, in void *p2) { return base.equals(p1, p2); }
override int compare(in void *p1, in void *p2) { return base.compare(p1, p2); }
override size_t tsize() { return base.tsize(); }
override void swap(void *p1, void *p2) { return base.swap(p1, p2); }
TypeInfo next() { return base.next(); }
uint flags() { return base.flags(); }
void[] init() { return base.init(); }
override TypeInfo next() { return base.next(); }
override uint flags() { return base.flags(); }
override void[] init() { return base.init(); }
TypeInfo base;
}
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.
@ -1070,12 +1139,12 @@ class Exception : Object
this.next = next;
}
void print()
override void print()
{
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=-g -m32
DFLAGS=-O -release -w
#DFLAGS=-unittest -w
DFLAGS=-O -release
#DFLAGS=-unittest
CC=gcc
#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 \
demangle.o cover.o bitarray.o bind.o aApplyR.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_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 \
@ -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/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/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 \
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
$(DMD) -c $(DFLAGS) std/gc.d
hiddenfunc.o : std/hiddenfunc.d
$(DMD) -c $(DFLAGS) std/hiddenfunc.d
loader.o : 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
// 4: // has offTi[] member
// 8: // has constructors
// 16: // has xgetMembers member
void *deallocator;
OffsetTypeInfo[] offTi;
void* defaultConstructor; // default Constructor
const(MemberInfo[]) function(string) xgetMembers;
static ClassInfo find(string classname);
Object create();
const(MemberInfo[]) getMembers(string);
}
struct OffsetTypeInfo
@ -145,6 +148,8 @@ class TypeInfo_Struct : TypeInfo
string function(const(void)*) xtoString;
uint m_flags;
const(MemberInfo[]) function(string) xgetMembers;
}
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
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
void (*ctor)();
void (*dtor)();
void (*unitTest)();
void (*ctor)(); // module static constructor
void (*dtor)(); // module static destructor
void (*unitTest)(); // module unit tests
const(MemberInfo[]) function(string) xgetMembers; // module getMembers() function
/******************
* Return collection of all modules in the program.

View file

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

View file

@ -20,8 +20,8 @@ DIR=\dmd2
CFLAGS=-mn -6 -r
#CFLAGS=-g -mn -6 -r
DFLAGS=-O -release -nofloat -w
#DFLAGS=-unittest -g -w
DFLAGS=-O -release -nofloat
#DFLAGS=-unittest -g
#DFLAGS=-unittest -cov -g
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 \
gamma.obj demangle.obj cover.obj bitarray.obj aApplyR.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_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 \
@ -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\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\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 \
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
$(DMD) -c $(DFLAGS) std\gc.d
hiddenfunc.obj : std\hiddenfunc.d
$(DMD) -c $(DFLAGS) std\hiddenfunc.d
loader.obj : std\loader.d
$(DMD) -c $(DFLAGS) std\loader.d