--- cvsroot/EV/EV.xs 2007/12/20 09:26:40 1.93 +++ cvsroot/EV/EV.xs 2007/12/20 10:12:22 1.96 @@ -605,14 +605,22 @@ OUTPUT: RETVAL -ev_embed *embed (struct ev_loop *loop, SV *cb) +ev_embed *embed (struct ev_loop *loop, SV *cb = &PL_sv_undef) ALIAS: embed_ns = 1 CODE: +{ + if (!(ev_backend (loop) & ev_embeddable_backends ())) + croak ("passed loop is not embeddable via EV::embed,"); + RETVAL = e_new (sizeof (ev_embed), cb, default_loop_sv); RETVAL->fh = newSVsv (ST (0)); ev_embed_set (RETVAL, loop); + + if (!SvOK (cb)) ev_set_cb (RETVAL, 0); + if (!ix) START (embed, RETVAL); +} OUTPUT: RETVAL @@ -1103,6 +1111,12 @@ RESET (embed, w, (w, loop)); } +SV *other (ev_embed *w) + CODE: + RETVAL = newSVsv (w->fh); + OUTPUT: + RETVAL + MODULE = EV PACKAGE = EV::Loop PREFIX = ev_loop_ SV *new (SV *klass, unsigned int flags = ev_supported_backends ()) @@ -1113,7 +1127,7 @@ if (!loop) XSRETURN_UNDEF; - RETVAL = sv_bless (newRV_noinc (newSViv (PTR2IV (evapi.default_loop))), stash_loop); + RETVAL = sv_bless (newRV_noinc (newSViv (PTR2IV (loop))), stash_loop); } OUTPUT: RETVAL @@ -1123,3 +1137,19 @@ if (loop != evapi.default_loop) /* global destruction sucks */ ev_loop_destroy (loop); +ev_io *io (struct ev_loop *loop, SV *fh, int events, SV *cb) + ALIAS: + io_ns = 1 + CODE: +{ + int fd = sv_fileno (fh); + CHECK_FD (fh, fd); + + RETVAL = e_new (sizeof (ev_io), cb, ST (0)); + RETVAL->fh = newSVsv (fh); + ev_io_set (RETVAL, fd, events); + if (!ix) START (io, RETVAL); +} + OUTPUT: + RETVAL +