version 1.2, 2018/09/28 08:20:27 |
version 1.6, 2021/03/11 11:47:25 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/print.c,v 1.1 2018/09/19 05:45:06 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/print.c,v 1.5 2021/03/11 03:41:13 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 143 void Pobjtoquote(NODE arg,QUOTE *rp) |
|
Line 143 void Pobjtoquote(NODE arg,QUOTE *rp) |
|
|
|
void Pquotetolist(NODE arg,LIST *rp) |
void Pquotetolist(NODE arg,LIST *rp) |
{ |
{ |
|
QUOTE q; |
|
|
asir_assert(ARG0(arg),O_QUOTE,"quotetolist"); |
asir_assert(ARG0(arg),O_QUOTE,"quotetolist"); |
fnodetotree((FNODE)BDY((QUOTE)(ARG0(arg))),rp); |
q = (QUOTE)ARG0(arg); |
|
fnodetotree((FNODE)BDY(q),q->pvs,rp); |
} |
} |
|
|
void Peval_variables_in_quote(NODE arg,QUOTE *rp) |
void Peval_variables_in_quote(NODE arg,QUOTE *rp) |
Line 158 void Peval_variables_in_quote(NODE arg,QUOTE *rp) |
|
Line 161 void Peval_variables_in_quote(NODE arg,QUOTE *rp) |
|
|
|
/* fnode -> [tag,name,arg0,arg1,...] */ |
/* fnode -> [tag,name,arg0,arg1,...] */ |
|
|
void fnodetotree(FNODE f,LIST *rp) |
void fnodetotree(FNODE f,VS vs,LIST *rp) |
{ |
{ |
LIST a1,a2,a3; |
LIST a1,a2,a3; |
NODE n,t,t0; |
NODE n,t,t0,t1; |
STRING head,op,str; |
STRING head,op,str; |
char *opname; |
char *opname; |
|
|
Line 186 void fnodetotree(FNODE f,LIST *rp) |
|
Line 189 void fnodetotree(FNODE f,LIST *rp) |
|
MKSTR(op,"-"); |
MKSTR(op,"-"); |
break; |
break; |
} |
} |
fnodetotree((FNODE)FA0(f),&a1); |
fnodetotree((FNODE)FA0(f),vs,&a1); |
n = mknode(3,head,op,a1); |
n = mknode(3,head,op,a1); |
MKLIST(*rp,n); |
MKLIST(*rp,n); |
break; |
break; |
Line 199 void fnodetotree(FNODE f,LIST *rp) |
|
Line 202 void fnodetotree(FNODE f,LIST *rp) |
|
/* arg list */ |
/* arg list */ |
switch ( f->id ) { |
switch ( f->id ) { |
case I_AND: case I_OR: |
case I_AND: case I_OR: |
fnodetotree((FNODE)FA0(f),&a1); |
fnodetotree((FNODE)FA0(f),vs,&a1); |
fnodetotree((FNODE)FA1(f),&a2); |
fnodetotree((FNODE)FA1(f),vs,&a2); |
break; |
break; |
default: |
default: |
fnodetotree((FNODE)FA1(f),&a1); |
fnodetotree((FNODE)FA1(f),vs,&a1); |
fnodetotree((FNODE)FA2(f),&a2); |
fnodetotree((FNODE)FA2(f),vs,&a2); |
break; |
break; |
} |
} |
|
|
Line 242 void fnodetotree(FNODE f,LIST *rp) |
|
Line 245 void fnodetotree(FNODE f,LIST *rp) |
|
n = mknode(3,head,op,a1); |
n = mknode(3,head,op,a1); |
MKLIST(*rp,n); |
MKLIST(*rp,n); |
return; |
return; |
|
default: |
|
return; |
} |
} |
MKSTR(op,opname); break; |
MKSTR(op,opname); break; |
|
|
Line 261 void fnodetotree(FNODE f,LIST *rp) |
|
Line 266 void fnodetotree(FNODE f,LIST *rp) |
|
n = (NODE)FA1(f); |
n = (NODE)FA1(f); |
for ( t0 = 0; n; n = NEXT(n) ) { |
for ( t0 = 0; n; n = NEXT(n) ) { |
NEXTNODE(t0,t); |
NEXTNODE(t0,t); |
fnodetotree((FNODE)BDY(n),&a1); |
fnodetotree((FNODE)BDY(n),vs,&a1); |
BDY(t) = (pointer)a1; |
BDY(t) = (pointer)a1; |
} |
} |
MKSTR(op,((ARF)FA0(f))->name); |
MKSTR(op,((ARF)FA0(f))->name); |
Line 274 void fnodetotree(FNODE f,LIST *rp) |
|
Line 279 void fnodetotree(FNODE f,LIST *rp) |
|
case I_CE: |
case I_CE: |
MKSTR(head,"t_op"); |
MKSTR(head,"t_op"); |
MKSTR(op,"?:"); |
MKSTR(op,"?:"); |
fnodetotree((FNODE)FA0(f),&a1); |
fnodetotree((FNODE)FA0(f),vs,&a1); |
fnodetotree((FNODE)FA1(f),&a2); |
fnodetotree((FNODE)FA1(f),vs,&a2); |
fnodetotree((FNODE)FA2(f),&a3); |
fnodetotree((FNODE)FA2(f),vs,&a3); |
n = mknode(5,head,op,a1,a2,a3); |
n = mknode(5,head,op,a1,a2,a3); |
MKLIST(*rp,n); |
MKLIST(*rp,n); |
break; |
break; |
Line 286 void fnodetotree(FNODE f,LIST *rp) |
|
Line 291 void fnodetotree(FNODE f,LIST *rp) |
|
n = (NODE)FA0(f); |
n = (NODE)FA0(f); |
for ( t0 = 0; n; n = NEXT(n) ) { |
for ( t0 = 0; n; n = NEXT(n) ) { |
NEXTNODE(t0,t); |
NEXTNODE(t0,t); |
fnodetotree((FNODE)BDY(n),&a1); |
fnodetotree((FNODE)BDY(n),vs,&a1); |
BDY(t) = (pointer)a1; |
BDY(t) = (pointer)a1; |
} |
} |
if ( t0 ) |
if ( t0 ) |
Line 302 void fnodetotree(FNODE f,LIST *rp) |
|
Line 307 void fnodetotree(FNODE f,LIST *rp) |
|
switch ( f->id ) { |
switch ( f->id ) { |
case I_FUNC: case I_FUNC_QARG: |
case I_FUNC: case I_FUNC_QARG: |
MKSTR(op,((FUNC)FA0(f))->fullname); |
MKSTR(op,((FUNC)FA0(f))->fullname); |
fnodetotree((FNODE)FA1(f),&a1); |
fnodetotree((FNODE)FA1(f),vs,&a1); |
break; |
break; |
case I_CAR: |
case I_CAR: |
MKSTR(op,"car"); |
MKSTR(op,"car"); |
fnodetotree((FNODE)FA0(f),&a1); |
fnodetotree((FNODE)FA0(f),vs,&a1); |
break; |
break; |
case I_CDR: |
case I_CDR: |
MKSTR(op,"cdr"); |
MKSTR(op,"cdr"); |
fnodetotree((FNODE)FA0(f),&a1); |
fnodetotree((FNODE)FA0(f),vs,&a1); |
break; |
break; |
case I_EV: |
case I_EV: |
/* exponent vector; should be treated as function call */ |
/* exponent vector; should be treated as function call */ |
MKSTR(op,"exponent_vector"); |
MKSTR(op,"exponent_vector"); |
fnodetotree(mkfnode(1,I_LIST,FA0(f)),&a1); |
fnodetotree(mkfnode(1,I_LIST,FA0(f)),vs,&a1); |
break; |
break; |
} |
} |
t0 = NEXT(BDY(a1)); /* XXX : skip the headers */ |
t0 = NEXT(BDY(a1)); /* XXX : skip the headers */ |
Line 324 void fnodetotree(FNODE f,LIST *rp) |
|
Line 329 void fnodetotree(FNODE f,LIST *rp) |
|
MKLIST(*rp,n); |
MKLIST(*rp,n); |
break; |
break; |
|
|
|
/* partial derivative of function */ |
|
case I_PFDERIV: |
|
MKSTR(head,"derivative"); |
|
MKSTR(op,((FUNC)FA0(f))->fullname); |
|
fnodetotree((FNODE)FA1(f),vs,&a1); |
|
fnodetotree((FNODE)FA2(f),vs,&a2); |
|
n = mknode(4,head,op,a1,a2); |
|
MKLIST(*rp,n); |
|
break; |
|
|
case I_STR: |
case I_STR: |
MKSTR(head,"internal"); |
MKSTR(head,"internal"); |
MKSTR(str,FA0(f)); |
MKSTR(str,FA0(f)); |
Line 341 void fnodetotree(FNODE f,LIST *rp) |
|
Line 356 void fnodetotree(FNODE f,LIST *rp) |
|
if ( FA1(f) ) |
if ( FA1(f) ) |
error("fnodetotree : not implemented yet"); |
error("fnodetotree : not implemented yet"); |
MKSTR(head,"variable"); |
MKSTR(head,"variable"); |
GETPVNAME(FA0(f),opname); |
GETPVNAME2(FA0(f),opname,vs); |
MKSTR(op,opname); |
MKSTR(op,opname); |
n = mknode(2,head,op); |
n = mknode(2,head,op); |
MKLIST(*rp,n); |
MKLIST(*rp,n); |
Line 476 FNODE subst_in_fnode(FNODE f,V v,FNODE g) |
|
Line 491 FNODE subst_in_fnode(FNODE f,V v,FNODE g) |
|
case I_FUNC: |
case I_FUNC: |
a1 = subst_in_fnode((FNODE)FA1(f),v,g); |
a1 = subst_in_fnode((FNODE)FA1(f),v,g); |
return mkfnode(2,f->id,FA0(f),a1); |
return mkfnode(2,f->id,FA0(f),a1); |
|
break; |
|
/* derivative */ |
|
case I_PFDERIV: |
|
a1 = subst_in_fnode((FNODE)FA1(f),v,g); |
|
return mkfnode(3,f->id,FA0(f),a1,FA2(f)); |
break; |
break; |
case I_CAR: case I_CDR: |
case I_CAR: case I_CDR: |
a1 = subst_in_fnode((FNODE)FA0(f),v,g); |
a1 = subst_in_fnode((FNODE)FA0(f),v,g); |