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

Annotation of OpenXM_contrib2/asir2000/parse/comp.c, Revision 1.1

1.1     ! noro        1: /* $OpenXM: OpenXM/src/asir99/parse/comp.c,v 1.1.1.1 1999/11/10 08:12:34 noro Exp $ */
        !             2: #include "ca.h"
        !             3: #include "parse.h"
        !             4: #include "comp.h"
        !             5: #if defined(THINK_C) || defined(VISUAL)
        !             6: #include <stdarg.h>
        !             7: #else
        !             8: #include <varargs.h>
        !             9: #endif
        !            10:
        !            11: extern f_return;
        !            12:
        !            13: #if defined(THINK_C) || defined(VISUAL)
        !            14: void call_usrf(FUNC f,...)
        !            15: {
        !            16:        va_list ap;
        !            17:        int ac,i;
        !            18:        pointer *c;
        !            19:        NODE tn;
        !            20:
        !            21:        va_start(ap,f);
        !            22:        if ( !f )
        !            23:                notdef(0,0,0,0);
        !            24:        else {
        !            25:                pushpvs(f);
        !            26:                ac = va_arg(ap,int);
        !            27:                for ( i = 0, tn = f->f.usrf->args; i < ac;
        !            28:                        i++, tn = NEXT(tn) )
        !            29:                        ASSPV((int)FA0((FNODE)BDY(tn)),va_arg(ap,pointer));
        !            30:                c = va_arg(ap,pointer *); *c = evalstat(BDY(f->f.usrf));
        !            31:                va_end(ap);
        !            32:                f_return = 0; poppvs();
        !            33:        }
        !            34: }
        !            35: #else
        !            36: void call_usrf(va_alist)
        !            37: va_dcl
        !            38: {
        !            39:        va_list ap;
        !            40:        int ac,i;
        !            41:        FUNC f;
        !            42:        pointer a,b,*c;
        !            43:        NODE tn;
        !            44:
        !            45:        va_start(ap); f = va_arg(ap,FUNC);
        !            46:        if ( !f )
        !            47:                notdef(0,0,0,0);
        !            48:        else {
        !            49:                pushpvs(f);
        !            50:                ac = va_arg(ap,int);
        !            51:                for ( i = 0, tn = f->f.usrf->args; i < ac;
        !            52:                        i++, tn = NEXT(tn) )
        !            53:                        ASSPV((int)FA0((FNODE)BDY(tn)),va_arg(ap,pointer));
        !            54:                c = va_arg(ap,pointer *); *c = evalstat(BDY(f->f.usrf));
        !            55:                f_return = 0; poppvs();
        !            56:        }
        !            57: }
        !            58: #endif
        !            59:
        !            60: void addcomp(vl,a,b,c)
        !            61: VL vl;
        !            62: COMP a,b,*c;
        !            63: {
        !            64:        if ( a->type != b->type )
        !            65:                error("addcomp : types different");
        !            66:        else
        !            67:                call_usrf(LSS->sa[a->type].arf.add,2,a,b,c);
        !            68: }
        !            69:
        !            70: void subcomp(vl,a,b,c)
        !            71: VL vl;
        !            72: COMP a,b,*c;
        !            73: {
        !            74:        if ( a->type != b->type )
        !            75:                error("subcomp : types different");
        !            76:        else
        !            77:                call_usrf(LSS->sa[a->type].arf.sub,2,a,b,c);
        !            78: }
        !            79:
        !            80: void mulcomp(vl,a,b,c)
        !            81: VL vl;
        !            82: COMP a,b,*c;
        !            83: {
        !            84:        if ( a->type != b->type )
        !            85:                error("mulcomp : types different");
        !            86:        else
        !            87:                call_usrf(LSS->sa[a->type].arf.mul,2,a,b,c);
        !            88: }
        !            89:
        !            90: void divcomp(vl,a,b,c)
        !            91: VL vl;
        !            92: COMP a,b,*c;
        !            93: {
        !            94:        if ( a->type != b->type )
        !            95:                error("divcomp : types different");
        !            96:        else
        !            97:                call_usrf(LSS->sa[a->type].arf.div,2,a,b,c);
        !            98: }
        !            99:
        !           100: void chsgncomp(a,b)
        !           101: COMP a,*b;
        !           102: {
        !           103:        call_usrf(LSS->sa[a->type].arf.chsgn,1,a,b);
        !           104: }
        !           105:
        !           106: void pwrcomp(vl,a,r,c)
        !           107: VL vl;
        !           108: COMP a;
        !           109: Obj r;
        !           110: COMP *c;
        !           111: {
        !           112:        call_usrf(LSS->sa[a->type].arf.pwr,2,a,r,c);
        !           113: }
        !           114:
        !           115: int compcomp(vl,a,b)
        !           116: VL vl;
        !           117: COMP a,b;
        !           118: {
        !           119:        Q c;
        !           120:        int s;
        !           121:
        !           122:        if ( a->type > b->type )
        !           123:                return 1;
        !           124:        else if ( a->type < b->type )
        !           125:                return -1;
        !           126:        else {
        !           127:                call_usrf(LSS->sa[a->type].arf.comp,2,a,b,&c);
        !           128:                s = QTOS(c);
        !           129:                if ( s > 0 )
        !           130:                        return 1;
        !           131:                else if ( s < 0 )
        !           132:                        return -1;
        !           133:                else
        !           134:                        return 0;
        !           135:        }
        !           136: }

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