On Thursday, 7 December 2017 at 13:08:09 UTC, Luís Marques wrote:
On Thursday, 7 December 2017 at 08:59:08 UTC, Wild wrote:
You could modify the one I use for PowerNex[1]. It is a hacked
version of Adam D. Ruppes
minimal.zip. There are only a few imports for strlen,
mem{set,move,cpy}, etc.
This one seems to be the one for me. For instance,
typeid(ClassName) seems to work, which I need.
For completeness, I had looked into minlibd but it didn't
seemed compatible with LDC and difficult for me to fix, IIRC.
Regarding Mike's question of what my use case is, I wanted my
program to run in webassembly/asmjs. Since druntime/phobos
haven't been ported to that target, I was being careful with my
design to not depend on the runtime, but then I found out I
love the openmethods package. So I decided to check if I could
implement just enough of druntime to allow a forked version of
openmethods to work. As far as I can tell that's feasible.
I am currently trying to understand how the compiler and the
runtime interact. ClassInfo contains a vtbl array whose ptr
property is the same as the vptr found in an instance of that
class. However, when I modify that pointer (e.g. by reserving
1000 more entries) and create a new instance, it still contains
the old pointer. So it looks like the compiler sets the vptr
without consulting the ClassInfo but somehow reflects it there.
I'd appreciate if anybody can explain how it works, or sends me
links to relevant info.
Example:
import std.stdio;
class Foo {
void foo() {}
}
void main() {
auto oldPtr = Foo.classinfo.vtbl.ptr;
Foo.classinfo.vtbl.reserve(1000);
writeln(oldPtr != Foo.classinfo.vtbl.ptr); // true
Object foo = new Foo();
writeln(oldPtr == *cast(void***)foo); // true, alas
}
...at least that's what I get with dmd.