version 1.4, 2000/12/05 01:24:56 |
version 1.11, 2018/03/29 01:32:54 |
|
|
* 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/comp.c,v 1.3 2000/08/22 05:04:25 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/parse/comp.c,v 1.10 2015/08/14 13:51:56 fujimoto Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
#include "comp.h" |
#include "comp.h" |
#if defined(VISUAL) |
#if defined(__GNUC__) || defined(VISUAL) || defined(__MINGW32__) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) |
#include <stdarg.h> |
#include <stdarg.h> |
#else |
#else |
#include <varargs.h> |
#include <varargs.h> |
|
|
|
|
extern f_return; |
extern f_return; |
|
|
#if defined(VISUAL) |
#if defined(__GNUC__) || defined(VISUAL) || defined(__MINGW32__) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) |
void call_usrf(FUNC f,...) |
void call_usrf(FUNC f,...) |
{ |
{ |
va_list ap; |
va_list ap; |
int ac,i; |
int ac,i; |
pointer *c; |
pointer *c; |
NODE tn; |
VS prev_mpvs; |
|
NODE tn; |
|
|
va_start(ap,f); |
va_start(ap,f); |
if ( !f ) |
if ( !f ) |
notdef(0,0,0,0); |
notdef(0,0,0,0); |
else { |
else { |
pushpvs(f); |
pushpvs(f); |
ac = va_arg(ap,int); |
if ( f->f.usrf->module ) { |
for ( i = 0, tn = f->f.usrf->args; i < ac; |
prev_mpvs = MPVS; |
i++, tn = NEXT(tn) ) |
MPVS = f->f.usrf->module->pvs; |
ASSPV((int)FA0((FNODE)BDY(tn)),va_arg(ap,pointer)); |
} |
c = va_arg(ap,pointer *); *c = evalstat(BDY(f->f.usrf)); |
ac = va_arg(ap,int); |
va_end(ap); |
for ( i = 0, tn = f->f.usrf->args; i < ac; |
f_return = 0; poppvs(); |
i++, tn = NEXT(tn) ) |
} |
ASSPV((int)FA0((FNODE)BDY(tn)),va_arg(ap,pointer)); |
|
c = va_arg(ap,pointer *); *c = evalstat(BDY(f->f.usrf)); |
|
va_end(ap); |
|
f_return = 0; poppvs(); |
|
if ( f->f.usrf->module ) |
|
MPVS = prev_mpvs; |
|
} |
} |
} |
#else |
#else |
void call_usrf(va_alist) |
void call_usrf(va_alist) |
va_dcl |
va_dcl |
{ |
{ |
va_list ap; |
va_list ap; |
int ac,i; |
int ac,i; |
FUNC f; |
FUNC f; |
pointer a,b,*c; |
pointer a,b,*c; |
NODE tn; |
VS prev_mpvs; |
|
NODE tn; |
|
|
va_start(ap); f = va_arg(ap,FUNC); |
va_start(ap); f = va_arg(ap,FUNC); |
if ( !f ) |
if ( !f ) |
notdef(0,0,0,0); |
notdef(0,0,0,0); |
else { |
else { |
pushpvs(f); |
pushpvs(f); |
ac = va_arg(ap,int); |
if ( f->f.usrf->module ) { |
for ( i = 0, tn = f->f.usrf->args; i < ac; |
prev_mpvs = MPVS; |
i++, tn = NEXT(tn) ) |
MPVS = f->f.usrf->module->pvs; |
ASSPV((int)FA0((FNODE)BDY(tn)),va_arg(ap,pointer)); |
} |
c = va_arg(ap,pointer *); *c = evalstat(BDY(f->f.usrf)); |
ac = va_arg(ap,int); |
f_return = 0; poppvs(); |
for ( i = 0, tn = f->f.usrf->args; i < ac; |
} |
i++, tn = NEXT(tn) ) |
|
ASSPV((int)FA0((FNODE)BDY(tn)),va_arg(ap,pointer)); |
|
c = va_arg(ap,pointer *); *c = evalstat(BDY(f->f.usrf)); |
|
f_return = 0; poppvs(); |
|
if ( f->f.usrf->module ) |
|
MPVS = prev_mpvs; |
|
} |
} |
} |
#endif |
#endif |
|
|
Line 109 void addcomp(vl,a,b,c) |
|
Line 123 void addcomp(vl,a,b,c) |
|
VL vl; |
VL vl; |
COMP a,b,*c; |
COMP a,b,*c; |
{ |
{ |
if ( a->type != b->type ) |
if ( a->type != b->type ) |
error("addcomp : types different"); |
error("addcomp : types different"); |
else |
else |
call_usrf(LSS->sa[a->type].arf.add,2,a,b,c); |
call_usrf(LSS->sa[a->type].arf.add,2,a,b,c); |
} |
} |
|
|
void subcomp(vl,a,b,c) |
void subcomp(vl,a,b,c) |
VL vl; |
VL vl; |
COMP a,b,*c; |
COMP a,b,*c; |
{ |
{ |
if ( a->type != b->type ) |
if ( a->type != b->type ) |
error("subcomp : types different"); |
error("subcomp : types different"); |
else |
else |
call_usrf(LSS->sa[a->type].arf.sub,2,a,b,c); |
call_usrf(LSS->sa[a->type].arf.sub,2,a,b,c); |
} |
} |
|
|
void mulcomp(vl,a,b,c) |
void mulcomp(vl,a,b,c) |
VL vl; |
VL vl; |
COMP a,b,*c; |
COMP a,b,*c; |
{ |
{ |
if ( a->type != b->type ) |
if ( a->type != b->type ) |
error("mulcomp : types different"); |
error("mulcomp : types different"); |
else |
else |
call_usrf(LSS->sa[a->type].arf.mul,2,a,b,c); |
call_usrf(LSS->sa[a->type].arf.mul,2,a,b,c); |
} |
} |
|
|
void divcomp(vl,a,b,c) |
void divcomp(vl,a,b,c) |
VL vl; |
VL vl; |
COMP a,b,*c; |
COMP a,b,*c; |
{ |
{ |
if ( a->type != b->type ) |
if ( a->type != b->type ) |
error("divcomp : types different"); |
error("divcomp : types different"); |
else |
else |
call_usrf(LSS->sa[a->type].arf.div,2,a,b,c); |
call_usrf(LSS->sa[a->type].arf.div,2,a,b,c); |
} |
} |
|
|
void chsgncomp(a,b) |
void chsgncomp(a,b) |
COMP a,*b; |
COMP a,*b; |
{ |
{ |
call_usrf(LSS->sa[a->type].arf.chsgn,1,a,b); |
call_usrf(LSS->sa[a->type].arf.chsgn,1,a,b); |
} |
} |
|
|
void pwrcomp(vl,a,r,c) |
void pwrcomp(vl,a,r,c) |
|
|
Obj r; |
Obj r; |
COMP *c; |
COMP *c; |
{ |
{ |
call_usrf(LSS->sa[a->type].arf.pwr,2,a,r,c); |
call_usrf(LSS->sa[a->type].arf.pwr,2,a,r,c); |
} |
} |
|
|
int compcomp(vl,a,b) |
int compcomp(vl,a,b) |
VL vl; |
VL vl; |
COMP a,b; |
COMP a,b; |
{ |
{ |
Q c; |
Q c; |
int s; |
int s; |
|
|
if ( a->type > b->type ) |
if ( a->type > b->type ) |
return 1; |
return 1; |
else if ( a->type < b->type ) |
else if ( a->type < b->type ) |
return -1; |
return -1; |
else { |
else { |
call_usrf(LSS->sa[a->type].arf.comp,2,a,b,&c); |
call_usrf(LSS->sa[a->type].arf.comp,2,a,b,&c); |
s = QTOS(c); |
s = QTOS(c); |
if ( s > 0 ) |
if ( s > 0 ) |
return 1; |
return 1; |
else if ( s < 0 ) |
else if ( s < 0 ) |
return -1; |
return -1; |
else |
else |
return 0; |
return 0; |
} |
} |
} |
} |