-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpx.c
74 lines (62 loc) · 2.61 KB
/
px.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* 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 */