view px.c @ 0:e0bbaa717f41 draft default tip

lol J
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Mon, 25 Nov 2013 11:56:30 -0500
parents
children
line wrap: on
line source

/* Copyright 1990-2011, Jsoftware Inc.  All rights reserved. */
/* License in license.txt.                                   */
/*                                                                         */
/* Execute and Associates                                                  */

/* Variables for controlling execution                                     */
/*                                                                         */
/* B     asgn      1 iff last operation on this line is assignment         */
/* DC    dcs       ptr to debug stack entry for current script             */
/* I     etxn      strlen(etx)                                             */
/* C     etx[]     space for holding error display                         */
/* I     jbrk      1 iff user has entered "break"                          */
/* C     jerr      error number for this line                              */
/* A     slist     script files used in right argument to 0!:              */
/* I     slisti    index in slist for current script                       */
/* I     slistn    slist # real entries; AN(slist) is reserved entries     */
/* B     tostdout  1 iff output to standard output                         */

#include "j.h"
#include "p.h"


A jteval(J jt,C*s){R parse(tokens(cstr(s)));}

A jtev1(J jt,    A w,C*s){R df1(  w,eval(s));}
A jtev2(J jt,A a,A w,C*s){R df2(a,w,eval(s));}
A jteva(J jt,    A w,C*s){R df1(  w,colon(one,   cstr(s)));}
A jtevc(J jt,A a,A w,C*s){R df2(a,w,colon(num[2],cstr(s)));}

F1(jtexec1){A z;
 F1RANK(1,jtexec1,0);
 FDEPINC(1); z=parse(tokens(vs(w))); jt->asgn=0; FDEPDEC(1);
 R z&&AT(z)&VERB+ADV+CONJ+MARK?mtv:z;
}

F1(jtimmex){A z;
 FDEPINC(1); z=parse(tokens(w)); FDEPDEC(1); 
 if(EWTHROW==jt->jerr){RESETERR; z=mtm;}
 if(z&&!jt->asgn)jpr(z);
 R z;
}

F1(jtimmea){A t,z;
 z=immex(w); 
 ASSERT(jt->asgn||!z||!(AT(z)&NOUN)||(t=eq(one,z),
     all1(AT(z)&SPARSE?df1(t,atop(slash(ds(CSTARDOT)),ds(CCOMMA))):t)),EVASSERT);
 R z;
}

static A jtcex(J jt,A w,AF f){A z; RE(w); z=f(jt,w); RESETERR; R z;}
     /* conditional execute */

F1(jtexg){A*v,*wv,x,y,z;I n,wd;
 RZ(w);
 n=AN(w); wv=AAV(w); wd=(I)w*ARELATIVE(w);
 ASSERT(n,EVLENGTH);
 ASSERT(1>=AR(w),EVRANK);
 if(VERB&AT(w))R w;
 ASSERT(BOX&AT(w),EVDOMAIN);
 GA(z,BOX,n,1,0); v=AAV(z);
 DO(n, x=WVR(i); RZ(*v++=(y=cex(x,jtfx))?y:exg(x)););
 R parse(z);
}

A jtjset(J jt,C*name,A x){R symbis(nfs((I)strlen(name),name),x,jt->global);}

F2(jtapplystr){PROLOG;A fs,z;I d;
 F2RANK(1,RMAX,jtapplystr,0);
 RZ(fs=parse(tokens(vs(a))));
 ASSERT(VERB&AT(fs),EVSYNTAX);
 d=fdep(fs);
 FDEPINC(d); z=CALL1(VAV(fs)->f1,w,fs); FDEPDEC(d);
 EPILOG(z); 
}    /* execute string a on argument w */