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

Diff for /OpenXM_contrib2/asir2000/parse/evall.c between version 1.3 and 1.6

version 1.3, 2000/08/22 05:04:26 version 1.6, 2018/03/29 01:32:54
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/evall.c,v 1.2 2000/08/21 08:31:46 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/parse/evall.c,v 1.5 2001/10/09 01:36:24 noro Exp $
 */  */
 #include <ctype.h>  #include <ctype.h>
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
 #include "base.h"  #include "base.h"
 #include "al.h"  #include "al.h"
 #if !defined(THINK_C)  
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/stat.h>  #include <sys/stat.h>
 #endif  
   
 pointer evall();  pointer evall(lid id,Obj a1,Obj a2)
   
 pointer evall(id,a1,a2)  
 lid id;  
 Obj a1,a2;  
 {  {
         F f;    F f;
         Obj d;    Obj d;
         oFOP op;    oFOP op;
         NODE n1,n2;    NODE n1,n2;
   
         switch ( id ) {    switch ( id ) {
                 case L_EQ:      case L_EQ:
                         op = AL_EQUAL; break;        op = AL_EQUAL; break;
                 case L_NE:      case L_NE:
                         op = AL_NEQ; break;        op = AL_NEQ; break;
                 case L_GT:      case L_GT:
                         op = AL_GREATERP; break;        op = AL_GREATERP; break;
                 case L_LT:      case L_LT:
                         op = AL_LESSP; break;        op = AL_LESSP; break;
                 case L_GE:      case L_GE:
                         op = AL_GEQ; break;        op = AL_GEQ; break;
                 case L_LE:      case L_LE:
                         op = AL_LEQ; break;        op = AL_LEQ; break;
                 case L_AND:      case L_AND:
                         op = AL_AND; break;        op = AL_AND; break;
                 case L_OR:      case L_OR:
                         op = AL_OR; break;        op = AL_OR; break;
                 case L_NOT:      case L_NOT:
                         op = AL_NOT; break;        op = AL_NOT; break;
                 case L_IMPL:      case L_IMPL:
                         op = AL_IMPL; break;        op = AL_IMPL; break;
                 case L_REPL:      case L_REPL:
                         op = AL_REPL; break;        op = AL_REPL; break;
                 case L_EQUIV:      case L_EQUIV:
                         op = AL_EQUIV; break;        op = AL_EQUIV; break;
                 default:      default:
                         error("evall : unknown id");        error("evall : unknown id");
         }    }
         if ( AL_ATOMIC(op) ) {    if ( AL_ATOMIC(op) ) {
                 arf_sub(CO,a1,a2,&d);      arf_sub(CO,a1,a2,&d);
                 MKAF(f,op,(P)d);      MKAF(f,op,(P)d);
         } else if ( AL_JUNCT(op) ) {    } else if ( AL_JUNCT(op) ) {
                 if ( FOP((F)a1) == op ) {      if ( FOP((F)a1) == op ) {
                         if ( FOP((F)a2) == op )        if ( FOP((F)a2) == op )
                                 n2 = FJARG((F)a2);          n2 = FJARG((F)a2);
                         else        else
                                 MKNODE(n2,(F)a2,0);          MKNODE(n2,(F)a2,0);
                         node_concat_dup(FJARG((F)a1),n2,&n1);        node_concat_dup(FJARG((F)a1),n2,&n1);
                 } else if ( FOP((F)a2) == op )      } else if ( FOP((F)a2) == op )
                         MKNODE(n1,a1,FJARG((F)a2));        MKNODE(n1,a1,FJARG((F)a2));
                 else {      else {
                         MKNODE(n2,a2,0); MKNODE(n1,a1,n2);        MKNODE(n2,a2,0); MKNODE(n1,a1,n2);
                 }      }
                 MKJF(f,op,n1);      MKJF(f,op,n1);
         } else if ( AL_UNI(op) )    } else if ( AL_UNI(op) )
                 MKUF(f,op,(F)a1);      MKUF(f,op,(F)a1);
         else if ( AL_EXT(op) )    else if ( AL_EXT(op) )
                 MKBF(f,op,(F)a1,(F)a2);      MKBF(f,op,(F)a1,(F)a2);
         return (pointer)f;    return (pointer)f;
 }  }
   
 node_concat_dup(n1,n2,nr)  void node_concat_dup(NODE n1,NODE n2,NODE *nr)
 NODE n1,n2,*nr;  
 {  {
         NODE r0,r,n;    NODE r0,r,n;
   
         for ( r0 = 0, n = n1; n; n = NEXT(n) ) {    for ( r0 = 0, n = n1; n; n = NEXT(n) ) {
                 NEXTNODE(r0,r); BDY(r) = BDY(n);      NEXTNODE(r0,r); BDY(r) = BDY(n);
         }    }
         if ( !r0 )    if ( !r0 )
                 *nr = n2;      *nr = n2;
         else {    else {
                 NEXT(r) = n2; *nr = r0;      NEXT(r) = n2; *nr = r0;
         }    }
 }  }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.6

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