Hi,

The library I'm currently writing an OO interface for (libmono) has an
iteration construct that is used something like this:

  MonoMethod m;
  gpointer iter = NULL;
  while ((m = mono_class_get_methods (klass, &iter))) {
     // Do stuff with "m".
  }

Ideally, I'd like to change this interface so that it can be used from
Pepsi something like this:

  class whileTrueWithMethod: [ :method | "Do stuff with method". true. ]

implemented as:

MonoClass whileTrueWithMethod: methodBlock
[
  | iter iterp |
  "FIXME: For some reason v_iterp isn't available."
  "{ v_iterp = (oop)&v_iter; }."
  { ((oop *)_state1)[2] = (oop)&v_iter; }.
  [| method |
    method := MonoMethod _new: (libmono mono_class_get_methods : _ptr : iterp);
    and: (methodBlock value: method)] whileTrue.
]

Please let me know if there's a better (more idiomatic) way to do this
kind of iteration.  I'd also like to fix the FIXME: the v_iterp symbol
isn't available to the C code maybe because it's captured by the block
closure.

I'm a little stuck as to how I could use this method from Jolt.  It
looks like I should construct a callback with lambda, then convert it
to a BlockClosure, but I don't understand what all the arguments to
BlockClosure function_:arity_:outer:state:nlr_ should be.

[BTW, thanks, Ian, for the replies to my other questions.  I'll just
go on implementing the libmono wrappers I need ad hoc until the great
C include file parser is done, and I'll go without variadic arguments
until I figure out enough about exactly how I want to use them.]

-- 
Michael FIG <[EMAIL PROTECTED]> //\
   http://michael.fig.org/    \//
_______________________________________________
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc

Reply via email to