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

Diff for /OpenXM_contrib2/asir2000/builtin/strobj.c between version 1.96 and 1.97

version 1.96, 2005/11/04 07:03:38 version 1.97, 2005/11/06 01:27:28
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/builtin/strobj.c,v 1.95 2005/11/03 07:41:22 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.96 2005/11/04 07:03:38 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 2035  void Pquote_normalize(NODE arg,QUOTE *rp)
Line 2035  void Pquote_normalize(NODE arg,QUOTE *rp)
         if ( !ac ) error("quote_normalize : invalid argument");          if ( !ac ) error("quote_normalize : invalid argument");
         q = (QUOTE)ARG0(arg);          q = (QUOTE)ARG0(arg);
         expand = ac==2 && ARG1(arg);          expand = ac==2 && ARG1(arg);
         if ( !q || OID(q) != O_QUOTE ) {          if ( !q || OID(q) != O_QUOTE )
                 *rp = q;                  *rp = q;
                 return;  
         } else if ( q->normalized && (q->expanded || !expand) )  
                 *rp = q;  
         else {          else {
                 f = fnode_normalize(BDY(q),expand);                  f = fnode_normalize(BDY(q),expand);
                 MKQUOTE(r,f);                  MKQUOTE(r,f);
                 r->normalized = 1;  
                 if ( expand ) r->expanded = 1;  
                 *rp = r;                  *rp = r;
         }          }
 }  }
Line 2057  void Pnquote_comp(NODE arg,Q *rp)
Line 2052  void Pnquote_comp(NODE arg,Q *rp)
   
         q1 = (QUOTE)ARG0(arg); f1 = (FNODE)BDY(q1);          q1 = (QUOTE)ARG0(arg); f1 = (FNODE)BDY(q1);
         q2 = (QUOTE)ARG1(arg); f2 = (FNODE)BDY(q2);          q2 = (QUOTE)ARG1(arg); f2 = (FNODE)BDY(q2);
         if ( !q1->normalized ) f1 = fnode_normalize(f1,0);          f1 = fnode_normalize(f1,0);
         if ( !q2->normalized ) f2 = fnode_normalize(f2,0);          f2 = fnode_normalize(f2,0);
         r = nfnode_comp(f1,f2);          r = nfnode_comp(f1,f2);
         STOQ(r,*rp);          STOQ(r,*rp);
 }  }
Line 2798  int nfnode_match(FNODE f,FNODE pat,NODE *rp)
Line 2793  int nfnode_match(FNODE f,FNODE pat,NODE *rp)
         FUNC ff,pf;          FUNC ff,pf;
         int r;          int r;
   
           if ( !pat )
                   if ( !f ) {
                           *rp = 0;
                           return 1;
                   } else
                           return 0;
           else if ( !f )
                   return 0;
         switch ( pat->id ) {          switch ( pat->id ) {
                 case I_PVAR:                  case I_PVAR:
                         /* [[pat,f]] */                          /* [[pat,f]] */
Line 2901  FNODE fnode_left_narymul(FNODE p,int i)
Line 2904  FNODE fnode_left_narymul(FNODE p,int i)
         a = (NODE)FA1(p);          a = (NODE)FA1(p);
         l = length(a);          l = length(a);
         if ( i < 0 || i >= l ) error("fnode_left_narymul : invalid index");          if ( i < 0 || i >= l ) error("fnode_left_narymul : invalid index");
         if ( i == 0 ) return mkfnode(1,I_FORMULA,ONE);          if ( i == 0 ) return 0;
         else if ( i == 1 ) return (FNODE)BDY(a);          else if ( i == 1 ) return (FNODE)BDY(a);
         else {          else {
                 for ( r0 = 0, k = 0, t = a; k < i; k++, t = NEXT(t) ) {                  for ( r0 = 0, k = 0, t = a; k < i; k++, t = NEXT(t) ) {
Line 2922  FNODE fnode_right_narymul(FNODE p,int i)
Line 2925  FNODE fnode_right_narymul(FNODE p,int i)
         a = (NODE)FA1(p);          a = (NODE)FA1(p);
         l = length(a);          l = length(a);
         if ( i < 0 || i >= l ) error("fnode_right_narymul : invalid index");          if ( i < 0 || i >= l ) error("fnode_right_narymul : invalid index");
         if ( i == l-1 ) return mkfnode(1,I_FORMULA,ONE);          if ( i == l-1 ) return 0;
         else {          else {
                 for ( k = 0, t = a; k <= i; k++, t = NEXT(t) );                  for ( k = 0, t = a; k <= i; k++, t = NEXT(t) );
                 return fnode_node_to_narymul(t);                  return fnode_node_to_narymul(t);
Line 3019  int nfnode_match_narymul(FNODE f,FNODE p,NODE *rp)
Line 3022  int nfnode_match_narymul(FNODE f,FNODE p,NODE *rp)
                         pright = fnode_right_narymul(p,pi);                          pright = fnode_right_narymul(p,pi);
                         /* XXX : incomplete */                          /* XXX : incomplete */
                         for ( s = fa, fi = 0; s; s = NEXT(s), fi++ ) {                          for ( s = fa, fi = 0; s; s = NEXT(s), fi++ ) {
                                   if ( fi < pi ) continue;
                                 if ( nfnode_match(BDY(s),pivot,&m) ) {                                  if ( nfnode_match(BDY(s),pivot,&m) ) {
                                         fleft = fnode_left_narymul(f,fi);                                          fleft = fnode_left_narymul(f,fi);
                                         pleft1 = rewrite_fnode(pleft,m);                                          pleft1 = rewrite_fnode(pleft,m);

Legend:
Removed from v.1.96  
changed lines
  Added in v.1.97

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