[BACK]Return to eval.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / parse

Diff for /OpenXM_contrib2/asir2000/parse/eval.c between version 1.51 and 1.56

version 1.51, 2005/10/12 03:31:04 version 1.56, 2005/12/09 08:10:44
Line 45 
Line 45 
  * 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/asir2000/parse/eval.c,v 1.50 2005/10/05 09:39:13 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.55 2005/12/02 07:13:19 noro Exp $
 */  */
 #include <ctype.h>  #include <ctype.h>
 #include "ca.h"  #include "ca.h"
Line 445  FNODE fnode_to_bin(FNODE f,int dir)
Line 445  FNODE fnode_to_bin(FNODE f,int dir)
                 case I_NARYOP:                  case I_NARYOP:
                         fun = (ARF)FA0(f);                          fun = (ARF)FA0(f);
                         len = length((NODE)FA1(f));                          len = length((NODE)FA1(f));
                           if ( len==1 ) return BDY((NODE)(FA1(f)));
   
                         arg = (FNODE *)ALLOCA(len*sizeof(FNODE));                          arg = (FNODE *)ALLOCA(len*sizeof(FNODE));
                         for ( i = 0, t = (NODE)FA1(f); i < len; i++, t = NEXT(t) )                          for ( i = 0, t = (NODE)FA1(f); i < len; i++, t = NEXT(t) )
                                 arg[i] = fnode_to_bin((FNODE)BDY(t),dir);                                  arg[i] = fnode_to_bin((FNODE)BDY(t),dir);
Line 506  FNODE partial_eval(FNODE f)
Line 508  FNODE partial_eval(FNODE f)
 {  {
         FNODE a0,a1,a2;          FNODE a0,a1,a2;
         NODE n;          NODE n;
           Obj obj;
           QUOTE q;
         pointer val;          pointer val;
           FUNC func;
   
         if ( !f )          if ( !f )
                 return f;                  return f;
Line 538  FNODE partial_eval(FNODE f)
Line 543  FNODE partial_eval(FNODE f)
                         return mkfnode(3,f->id,a0,a1,a2);                          return mkfnode(3,f->id,a0,a1,a2);
                         break;                          break;
   
                 /* function */                  /* XXX : function is evaluated */
                 case I_FUNC:                  case I_FUNC:
                         a1 = partial_eval((FNODE)FA1(f));                          a1 = partial_eval((FNODE)FA1(f));
                         return mkfnode(2,f->id,FA0(f),a1);                          func = (FUNC)FA0(f);
                           a1 =  mkfnode(2,f->id,func,a1);
                           if ( func->id == A_UNDEF )
                                   return a1;
                           else {
                                   obj = eval(a1);
                                   objtoquote(obj,&q);
                                   return BDY(q);
                           }
                           break;
   
                 case I_LIST: case I_EV:                  case I_LIST: case I_EV:
                         n = partial_eval_node((NODE)FA0(f));                          n = partial_eval_node((NODE)FA0(f));
Line 611  FNODE rewrite_fnode(FNODE f,NODE arg)
Line 625  FNODE rewrite_fnode(FNODE f,NODE arg)
                         return mkfnode(3,f->id,a0,a1,a2);                          return mkfnode(3,f->id,a0,a1,a2);
                         break;                          break;
   
                 /* function */                  /* nary operators */
                   case I_NARYOP:
                           n = rewrite_fnode_node((NODE)FA1(f),arg);
                           return mkfnode(2,f->id,FA0(f),n);
   
                   /* and function */
                 case I_FUNC:                  case I_FUNC:
                         a1 = rewrite_fnode((FNODE)FA1(f),arg);                          a1 = rewrite_fnode((FNODE)FA1(f),arg);
                         return mkfnode(2,f->id,FA0(f),a1);                          return mkfnode(2,f->id,FA0(f),a1);
Line 1204  pointer evalif(FNODE f,FNODE a)
Line 1223  pointer evalif(FNODE f,FNODE a)
 pointer evalpf(PF pf,NODE args,NODE dargs)  pointer evalpf(PF pf,NODE args,NODE dargs)
 {  {
         Obj s,s1;          Obj s,s1;
         int i;          int i,di,j;
         NODE node,dnode;          NODE node,dnode;
         PFINS ins;          PFINS ins;
         PFAD ad;          PFAD ad;
Line 1223  pointer evalpf(PF pf,NODE args,NODE dargs)
Line 1242  pointer evalpf(PF pf,NODE args,NODE dargs)
                 }                  }
                 simplify_ins(ins,&s);                  simplify_ins(ins,&s);
         } else {          } else {
                 for ( i = 0, s = pf->body, node = args;                  s = pf->body;
                         node; node = NEXT(node), i++ ) {                  if ( dnode ) {
                           for ( i = 0, dnode = dargs; dnode; dnode = NEXT(dnode), i++ ) {
                                   di = QTOS((Q)dnode->body);
                                   for ( j = 0; j < di; j++ ) {
                                           derivr(CO,s,pf->args[i],&s1); s = s1;
                                   }
                           }
                   }
                   for ( i = 0, node = args; node; node = NEXT(node), i++ ) {
                         substr(CO,0,s,pf->args[i],(Obj)node->body,&s1); s = s1;                          substr(CO,0,s,pf->args[i],(Obj)node->body,&s1); s = s1;
                 }                  }
         }          }

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.56

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>