Rc

 view release on metacpan or  search on metacpan

Rc.xs  view on Meta::CPAN

    return sv_setref_pv(newSV(0), node_class(var), (void*)var);
  }
}

static char *CB;
extern void walk(Node *nd)
{
  dSP;
  ENTER;
  SAVETMPS;
  PUSHMARK(SP);
  XPUSHs(node_2sv(nd));
  PUTBACK;
  perl_call_method(CB, G_DISCARD);
  FREETMPS;
  LEAVE;
}

MODULE = Rc          PACKAGE = Rc
 
PROTOTYPES: DISABLE

BOOT:
  initparse();
  initinput();
  initprint();

void
_walk(sv, method)
	SV *sv
	char *method
	PREINIT:
	STRLEN len;
	char *str = SvPV(sv, len);
	CODE:
	CB = method;
	parseline(str, len);

MODULE = Rc	PACKAGE = Rc::Node

char *
Node::type()
	CODE:
	RETVAL = node_typename(THIS);
	OUTPUT:
	RETVAL

MODULE = Rc	PACKAGE = Rc::WordX

char *
Node::string()
	CODE:
	RETVAL = THIS->u[0].s;
	OUTPUT:
	RETVAL

MODULE = Rc	PACKAGE = Rc::UnaryCmd

void
Node::kids()
	PPCODE:
	XPUSHs(node_2sv(THIS->u[0].p));

Node *
Node::kid(xx)
	int xx;
	CODE:
	assert(xx==0);
	RETVAL = THIS->u[xx].p;
	OUTPUT:
	RETVAL

MODULE = Rc	PACKAGE = Rc::BinCmd

void
Node::kids()
	PPCODE:
	XPUSHs(node_2sv(THIS->u[0].p));
	XPUSHs(node_2sv(THIS->u[1].p));

Node *
Node::kid(xx)
	int xx;
	CODE:
	assert(xx==0 || xx==1);
	RETVAL = THIS->u[xx].p;
	OUTPUT:
	RETVAL

MODULE = Rc	PACKAGE = Rc::Forin

void
Node::kids()
	PPCODE:
	XPUSHs(node_2sv(THIS->u[0].p));
	XPUSHs(node_2sv(THIS->u[1].p));
	XPUSHs(node_2sv(THIS->u[2].p));

Node *
Node::kid(xx)
	int xx;
	CODE:
	assert(xx==0 || xx==1 || xx==2);
	RETVAL = THIS->u[xx].p;
	OUTPUT:
	RETVAL

MODULE = Rc	PACKAGE = Rc::RedirX

char *
Node::redir()
	PREINIT:
	char *str;
	PPCODE:
	switch(THIS->u[0].i) {
	case rFrom: str="<"; break;
	case rCreate: str=">"; break;
	case rAppend: str=">>"; break;
	case rHeredoc: str="<<"; break;
	case rHerestring: str="<<<"; break;
	default: croak("unknown redir %d", THIS->u[0].i);
	}
	XPUSHs(sv_2mortal(newSVpv(str,0)));

MODULE = Rc	PACKAGE = Rc::Dup

int
Node::left()
	PPCODE:
	XPUSHs(sv_2mortal(newSViv(THIS->u[1].i)));

int
Node::right()
	PPCODE:
	XPUSHs(sv_2mortal(newSViv(THIS->u[2].i)));

MODULE = Rc	PACKAGE = Rc::Redir

int
Node::fd()
	PPCODE:
	XPUSHs(sv_2mortal(newSViv(THIS->u[1].i)));

Node *
Node::targ()
	CODE:
	RETVAL = THIS->u[2].p;
	OUTPUT:
	RETVAL

MODULE = Rc	PACKAGE = Rc::Pipe

void
Node::fds()
	PPCODE:
	XPUSHs(sv_2mortal(newSViv(THIS->u[0].i)));
	XPUSHs(sv_2mortal(newSViv(THIS->u[1].i)));

void
Node::kids()
	PPCODE:
	XPUSHs(node_2sv(THIS->u[2].p));
	XPUSHs(node_2sv(THIS->u[3].p));

Node *
Node::kid(xx)
	int xx;
	CODE:
	assert(xx==0 || xx==1);
	RETVAL = xx==0? THIS->u[2].p : THIS->u[3].p;
	OUTPUT:
	RETVAL



( run in 1.656 second using v1.01-cache-2.11-cpan-5511b514fd6 )