ack/lang/cem/ctest/ctgen/OPS
1985-02-06 21:25:27 +00:00

144 lines
2.4 KiB
Plaintext

ISTART
FN() {
teff() ; tass() ; tsta() ; tasssta() ; tiff() ; tifass() ;
return 0 ;
}
teff() {
/* simple operator test */
/* first evaluate for side effects */
LSTART
X + Y
X - Y
X / Y
X % Y
X * Y
X & Y
X | Y
X ^ Y
X || Y
X && Y
X << S
X >> S
-X
!X
~X
X == Y
X != Y
X <= Y
X >= Y
X < Y
X > Y
X ? X : Y
}
tass() {
LSTART
/* assignment ops */
Z1 = X
Z1 += X
Z1 -= X
Z1 /= X
Z1 %= X
Z1 *= X
Z1 &= X
Z1 |= X
Z1 ^= X
Z1 <<= S
Z1 >>= S
Z1 ++
Z1 --
-- Z1
++ Z1
}
tsta() {
/* secondly evaluate and use the value */
LSTART
Z2 = ( X + Y )
Z2 = ( X - Y )
Z2 = ( X / Y )
Z2 = ( X % Y )
Z2 = ( X * Y )
Z2 = ( X & Y )
Z2 = ( X | Y )
Z2 = ( X ^ Y )
Z2 = ( X || Y )
Z2 = ( X && Y )
Z2 = ( X << S )
Z2 = ( X >> S )
Z2 = ( -X )
Z2 = ( !X )
Z2 = ( ~X )
Z2 = ( X == Y )
Z2 = ( X != Y )
Z2 = ( X <= Y )
Z2 = ( X >= Y )
Z2 = ( X < Y )
Z2 = ( X > Y )
Z2 = ( X ? X : Y )
}
tasssta() {
/* assignment ops */
LSTART
Z2 = ( Z1 = X )
Z2 = ( Z1 += X )
Z2 = ( Z1 -= X )
Z2 = ( Z1 /= X )
Z2 = ( Z1 %= X )
Z2 = ( Z1 *= X )
Z2 = ( Z1 &= X )
Z2 = ( Z1 |= X )
Z2 = ( Z1 ^= X )
Z2 = ( Z1 <<= S )
Z2 = ( Z1 >>= S )
Z2 = ( Z1 ++ )
Z2 = ( Z1 -- )
Z2 = ( -- Z1 )
Z2 = ( ++ Z1 )
}
tiff() {
LSTART
/* conditional context */
if ( X + Y ) yes() ; else no()
if ( X - Y ) yes() ; else no()
if ( X / Y ) yes() ; else no()
if ( X % Y ) yes() ; else no()
if ( X * Y ) yes() ; else no()
if ( X & Y ) yes() ; else no()
if ( X | Y ) yes() ; else no()
if ( X ^ Y ) yes() ; else no()
if ( X || Y ) yes() ; else no()
if ( X && Y ) yes() ; else no()
if ( X << S ) yes() ; else no()
if ( X >> S ) yes() ; else no()
if ( -X ) yes() ; else no()
if ( !X ) yes() ; else no()
if ( ~X ) yes() ; else no()
if ( X == Y ) yes() ; else no()
if ( X != Y ) yes() ; else no()
if ( X <= Y ) yes() ; else no()
if ( X >= Y ) yes() ; else no()
if ( X < Y ) yes() ; else no()
if ( X > Y ) yes() ; else no()
if ( X ? X : Y ) yes() ; else no()
}
tifass() {
LSTART
/* assignment ops */
if ( Z1 = X ) yes() ; else no()
if ( Z1 += X ) yes() ; else no()
if ( Z1 -= X ) yes() ; else no()
if ( Z1 /= X ) yes() ; else no()
if ( Z1 %= X ) yes() ; else no()
if ( Z1 *= X ) yes() ; else no()
if ( Z1 &= X ) yes() ; else no()
if ( Z1 |= X ) yes() ; else no()
if ( Z1 ^= X ) yes() ; else no()
if ( Z1 <<= S ) yes() ; else no()
if ( Z1 >>= S ) yes() ; else no()
if ( Z1 ++ ) yes() ; else no()
if ( Z1 -- ) yes() ; else no()
if ( -- Z1 ) yes() ; else no()
if ( ++ Z1 ) yes() ; else no()
}
yes() { printf("yes ") ; }
no() { printf("no ") ; }