Jarrett Billingsley wrote:
On Mon, Dec 8, 2008 at 3:44 AM, mpt <[EMAIL PROTECTED]> wrote:
Great stuff, but I have some trouble with the binding lib.

Good!  Because I wasn't ;)

1. If I don't wrap a constructor, I get an error:
minid/bind.d(1101): static assert  "Cannot call default constructor for class Foo; 
please wrap a constructor explicitly"

Fixed.

Fix compiles for the explicitly defined ctor, but not for the default. This code gives:
minid/bind.d(1110): Error: no super class constructor for Foo

import minid.bind;
import minid.api;

class Foo {}

void main() {
    MDVM vm;
    auto t = openVM(&vm);
    loadStdlibs(t);
    WrapGlobals!(
        WrapType!(
            Foo, "Foo"
        )
    )(t);
}

3. I can't find an obvious way to initialize global variables, so I try 
superPush, which gives a runtime error:

You're actually doing it right, unless you wanted to instantiate the
wrapped MiniD class, in which case it'd be more like:

   pushGlobal(t, "Foo"); // get the global class Foo
   pushNull(t); // make room for 'this'
   rawCall(t, -2, 1); // call the class to instantiate it (1 return
for the instance)
   newGlobal(t, "myfoo"); // save it in the global myfoo


I can't see the difference between superPush-created myfoo and one created by your example. superPush doc says it creates MiniD-converted objects, but they're not usable.

superPush(t, new Foo());
newGlobal(t, "myfoo");
runString(t, "myfoo.Call();");

This gives: "[EMAIL PROTECTED]/extern/minid/minid/bind.d(1397): Invalid 'this' parameter passed to method Foo.Call"

Your example works, but it's not what I need. I want to create the Foo object in D myself and pass it to MiniD and call its methods.

Ideally, I'd like to have/write a function like
void setGlobal(Type)(MDThread* t, char[] name, Type value) to create and modify global variables.

Reply via email to