From ba42a2c8a6da3e9ea30545941652949ac8125f51 Mon Sep 17 00:00:00 2001 From: Tom Szczesny Date: Tue, 3 Sep 2013 11:51:34 -0400 Subject: [PATCH] eliminate remaining (V)(L) double-casting --- k.c | 12 ++++++------ k.h | 10 +++++----- kc.c | 10 +++++----- kx.c | 16 ++++++++-------- p.c | 16 ++++++++-------- p.h | 4 ++-- 6 files changed, 34 insertions(+), 34 deletions(-) diff --git a/k.c b/k.c index cd6161ff..d2ac19dc 100644 --- a/k.c +++ b/k.c @@ -85,7 +85,7 @@ C vc[]="+-*%|&^!<>=~@?_,#$.:";// was "!#$%&*+,-.<=>?@^_|~:"; //V vd[] = {_VERB2}; V offsetSSR, offsetWhat, offsetAt, offsetDot, offsetColon; -I offsetOver, offsetScan, offsetEach, offsetEachright, offsetEachleft, offsetEachpair; +L offsetOver, offsetScan, offsetEach, offsetEachright, offsetEachleft, offsetEachpair; S IFS[3] = {"x","y","z"}; S IFP[3]; //Implicit function parameters sp(x),... @@ -94,11 +94,11 @@ I stringHasChar(S s,C c){I i=0;while(s[i])if(c==s[i++])R 1;R 0;} //string never I charpos(S s,C c){I i=0;while(s[i] && c!=s[i])i++; R i;} I isCharVerb(C c) {R stringHasChar(vc,c);} -I charsVerb(C c) {R charpos(vc,c);} +L charsVerb(C c) {R charpos(vc,c);} Z C verbsChar(V p) {R ((L)p>=DT_VERB_OFFSET && (L)p < DT_SPECIAL_VERB_OFFSET)?vc[((L)p-DT_VERB_OFFSET)/2]:'\0';} Z C adverbsChar(V p){R ((L)p>=DT_ADVERB_OFFSET)?ac[((L)p-DT_ADVERB_OFFSET)%3]:'\0';} -I charsAdverb(C c) {R charpos(ac,c);} +L charsAdverb(C c) {R charpos(ac,c);} I sva(V p) //simpleVerbArity: Use boundaries of arrays to determine verb class in O(1) constant time { @@ -511,9 +511,9 @@ TR DT[] = //Dispatch table is append-only. Reorder/delete/insert breaks backwar }; K TABLE_END(){R 0;} -I DT_SIZE=0; -I DT_END_OFFSET, DT_ADVERB_OFFSET, DT_VERB_OFFSET, DT_SPECIAL_VERB_OFFSET; -I DT_OFFSET(V v){I i=0; while(v!=DT[i].func)i++; R i;} //init only +L DT_SIZE=0; +L DT_END_OFFSET, DT_ADVERB_OFFSET, DT_VERB_OFFSET, DT_SPECIAL_VERB_OFFSET; +L DT_OFFSET(V v){I i=0; while(v!=DT[i].func)i++; R i;} //init only I kreci=0; //should be inside DEBUG case but needed in r.c cached verbs, at least until caching method changes #ifdef DEBUG diff --git a/k.h b/k.h index 93367109..e932546b 100644 --- a/k.h +++ b/k.h @@ -25,8 +25,8 @@ I valence(V p); I adverbClass(V p); extern I vn_ct; I sva(V p); -I charsAdverb(C c); -I charsVerb(C c); +L charsAdverb(C c); +L charsVerb(C c); I isCharVerb(C c); I charpos(S s,C c); I stringHasChar(S s,C c); @@ -107,7 +107,7 @@ K ex(K a); K X(S s); I min(I a,I b); I max(I a,I b); -I DT_OFFSET(V v); +L DT_OFFSET(V v); extern C PPON; extern I PPMAX; extern I PP; @@ -120,7 +120,7 @@ extern K KTREE; extern N SYMBOLS; K kerr(cS s); extern C errmsg[256]; -extern I DT_SIZE, DT_END_OFFSET, DT_ADVERB_OFFSET, DT_VERB_OFFSET, DT_SPECIAL_VERB_OFFSET; +extern L DT_SIZE, DT_END_OFFSET, DT_ADVERB_OFFSET, DT_VERB_OFFSET, DT_SPECIAL_VERB_OFFSET; extern TR DT[]; -extern I offsetOver, offsetScan, offsetEach, offsetEachright, offsetEachleft, offsetEachpair; +extern L offsetOver, offsetScan, offsetEach, offsetEachright, offsetEachleft, offsetEachpair; K TABLE_END(); diff --git a/kc.c b/kc.c index 1278bd72..cc6fe04d 100644 --- a/kc.c +++ b/kc.c @@ -241,11 +241,11 @@ I kinit() //oom (return bad) offsetEachpair = DT_OFFSET(eachpair); //could probably delete these variables and create func if(xt <= 0 && b->t <= 0 && a->n != b->n) R LE; else if(a->t > 0 && b->t > 0) R dv_ex(a,p-1,b); - else if (a->t > 0) adverb = (V)(L)offsetEachright; - else if(b->t > 0) adverb = (V)(L)offsetEachleft; + else if (a->t > 0) adverb = (V)offsetEachright; + else if(b->t > 0) adverb = (V)offsetEachleft; else { //a and b both lists/vectors of size an @@ -299,7 +299,7 @@ Z K dv_ex(K a, V *p, K b) if(gn > 0) kK(g)[0]=a?a:b; K tmp; I flag=0; - if(*p>(V)(L)DT_SIZE && 0!=b->n) {V*p1=*p; if(*p1>(V)(L)DT_SIZE) {K p2=*p1; if(7!=p2->t) flag=1;}} + if(*p>(V)DT_SIZE && 0!=b->n) {V*p1=*p; if(*p1>(V)DT_SIZE) {K p2=*p1; if(7!=p2->t) flag=1;}} if(flag) tmp = vf_ex(*p,b); else {if(stk>2e6){R kerr("stack"); GC;} stk++; tmp=vf_ex(*p,g); stk--;} @@ -487,7 +487,7 @@ Z V ex_(V a, I r)//Expand wd()->7-0 types, expand and evaluate brackets if(kV(x)[CONJ]) { - if((tmp=*(K*)(kV(x)+CONJ))) if(offsetColon==*kW(tmp) && *(kW(tmp)+1)>(V)(L)DT_SIZE)fer=1; + if((tmp=*(K*)(kV(x)+CONJ))) if(offsetColon==*kW(tmp) && *(kW(tmp)+1)>(V)DT_SIZE)fer=1; y=ex_(kV(x)+CONJ,2); //Use 0-type with NULLS if passing to function U(y); if(y->t == 0 && y->n==0){cd(y); y=_n();} @@ -499,7 +499,7 @@ Z V ex_(V a, I r)//Expand wd()->7-0 types, expand and evaluate brackets R z; } -K ex(K a){U(a); if(7==a->t)if(*(kW(a))>(V)(L)DT_SIZE){K tmp=*(K*)*(kW(a)); if(7==tmp->t)if(6==tmp->n)fwh=1;} K z=ex_(&a,0); cd(a); fer=0; fwh=0; stk=0; proj=0; R z;} //Input is 7-0 type from wd() +K ex(K a){U(a); if(7==a->t)if(*(kW(a))>(V)DT_SIZE){K tmp=*(K*)*(kW(a)); if(7==tmp->t)if(6==tmp->n)fwh=1;} K z=ex_(&a,0); cd(a); fer=0; fwh=0; stk=0; proj=0; R z;} //Input is 7-0 type from wd() Z K ex0(V*v,K k,I r) //r: {0,1,2} -> {code, (code), [code]} Reverse execution/return multiple (paren not function or script) "list notation" {4,5,6,7} -> {:,if,while,do} { @@ -514,7 +514,7 @@ Z K ex0(V*v,K k,I r) //r: {0,1,2} -> {code, (code), [code]} Reverse execution/re CS(0, for(i=-1;it)!=1 || z->n!=1){cd(z);R TE;}a=*kI(z);cd(z); if(a)R ex1(v+i+1,0,&i,n,1); else while(it)!=1 || z->n!=1){cd(z);R TE;}a=*kI(z);cd(z);i=0;if(b){while(++i=n)break;}SW(r){CSR(5,)CS(6,if(a&&b){x=ex0(v+i+1,0,0); if(fer)R x; cd(x);})CS(7,DO2(a, x=ex0(v+i+1,0,0); if(fer)R x; cd(x);))}}while(6==r && a); R _n()) - CD: z=newK(0,n?e:0); if(n)for(i=n-1;i>=-1;i--)if(-1==i||bk(v[i])){if(offsetColon==(v+1+i)[0] && (v+1+i)[1]>(V)(L)DT_SIZE)fer=1; x=ex1(v+1+i,0,&i,n,0); if(fer){cd(z); R x;} M(x,z) kK(z)[--e]=bk(x)?2==r?0:_n():x;}// (c:9;a+b;c:1) oom + CD: z=newK(0,n?e:0); if(n)for(i=n-1;i>=-1;i--)if(-1==i||bk(v[i])){if(offsetColon==(v+1+i)[0] && (v+1+i)[1]>(V)DT_SIZE)fer=1; x=ex1(v+1+i,0,&i,n,0); if(fer){cd(z); R x;} M(x,z) kK(z)[--e]=bk(x)?2==r?0:_n():x;}// (c:9;a+b;c:1) oom } //Note on brackets: [] is _n, not (). Expression [1;1] (0-type with two atoms) is different from [1 1] (integer vector) @@ -633,7 +633,7 @@ K ex1(V*w,K k,I*i,I n,I f)//convert verb pieces (eg 1+/) to seven-types, default if(!c || !VA(w[c-1]) || (c>1 && offsetColon==w[c-1] ) ) R ex2(w,k); //typical list for execution - if(w[0]==offsetColon && w[1]>(V)(L)DT_SIZE){ + if(w[0]==offsetColon && w[1]>(V)DT_SIZE){ if(w[-1]!=offsetColon) fer=1; I d=0; while(w[d] && !bk(w[d])){d++;} K a=Kv(); a->n=0; K kb=newK(-4,d); M(a,kb) V*b=(V*)kK(kb); DO(d-1, b[i]=w[i+1];) b[d-1]=0; kV(a)[CODE]=kb; diff --git a/p.c b/p.c index 13ea1747..ac9e3d02 100644 --- a/p.c +++ b/p.c @@ -533,11 +533,11 @@ I capture(S s,I n,I k,I*m,V*w,I*d,K*locals,K*dict,K func) //IN string, string le { if(k+r1?3:0))) - CS(MARK_END , z=(V)(L)(DT_OFFSET(end))) + CS(MARK_ADVERB , z=(V)(DT_ADVERB_OFFSET+charsAdverb(s[k])+(r>1?3:0))) + CS(MARK_END , z=(V)(DT_OFFSET(end))) } if(!z) ; //TODO: handle null z, which can happen diff --git a/p.h b/p.h index bec16683..a23912bc 100644 --- a/p.h +++ b/p.h @@ -1,6 +1,6 @@ -I charsAdverb(C c); +L charsAdverb(C c); extern V adverbs[]; -I charsVerb(C c); +L charsVerb(C c); I SC(S a,S b); K *denameS(S dir_string,S t,I create); K EV(K e);