/* Copyright 1982 Alcyon Corporation 8716 Production Ave. San Diego, Ca. 92121 */ #include "cgen.h" #define ASGOP OPRAS|OPASSIGN|OPLVAL|OPBIN /*info on operators:*/ /*000077-- OPPRI - priority*/ /*000100-- OPBIN - binary operator*/ /*000200-- OPLVAL - left operand must be lvalue*/ /*000400-- OPREL - relational operator*/ /*001000-- OPASSIGN - assignment operator*/ /*002000-- OPLWORD - int required on left*/ /*004000-- OPRWORD - int required on right*/ /*010000-- OPCOM commutative*/ /*020000-- OPRAS - right associative*/ /*040000-- OPTERM - termination node*/ /*100000 - OPCONVS - conversion operator*/ int opinfo[] { TRMPRI, /*EOF*/ ADDPRI|OPCOM|OPBIN, /*ADD - expr + expr*/ ADDPRI|OPBIN, /*SUB - expr - expr*/ MULPRI|OPCOM|OPBIN, /*MULT - expr * expr*/ MULPRI|OPBIN, /*DIV - expr / expr*/ MULPRI|OPBIN, /*MOD - expr % expr*/ SHFPRI|OPLWORD|OPRWORD|OPBIN, /*RSH - expr >> expr*/ SHFPRI|OPLWORD|OPRWORD|OPBIN, /*LSH - expr << expr*/ ANDPRI|OPCOM|OPLWORD|OPRWORD|OPBIN, /*AND - expr & expr*/ ORPRI|OPCOM|OPLWORD|OPRWORD|OPBIN, /*OR - expr | expr*/ ORPRI|OPCOM|OPLWORD|OPRWORD|OPBIN, /*XOR - expr ^ expr*/ UNOPRI|OPRAS|OPLWORD, /*NOT - ! expr*/ UNOPRI|OPRAS, /*UMINUS - - expr*/ UNOPRI|OPRAS|OPLWORD, /*COMPL - ~ expr*/ UNOPRI|OPRAS|OPLVAL|OPBIN, /*PREDEC - --lvalue*/ UNOPRI|OPRAS|OPLVAL|OPBIN, /*PREINC - ++lvalue*/ UNOPRI|OPRAS|OPLVAL|OPBIN, /*POSTDEC - lvalue--*/ UNOPRI|OPRAS|OPLVAL|OPBIN, /*POSTINC - lvalue++*/ ASGPRI|ASGOP, /*ASSIGN - lvalue = expr*/ ASGPRI|ASGOP, /*EQADD - lvalue += expr*/ ASGPRI|ASGOP, /*EQSUB - lvalue -= expr*/ ASGPRI|ASGOP, /*EQMULT - lvalue *= expr*/ ASGPRI|ASGOP, /*EQDIV - lvalue /= expr*/ ASGPRI|ASGOP, /*EQMOD - lvalue %= expr*/ ASGPRI|ASGOP|OPLWORD|OPRWORD, /*EQRSH - lvalue >>= expr*/ ASGPRI|ASGOP|OPLWORD|OPRWORD, /*EQLSH - lvalue <<= expr*/ ASGPRI|ASGOP|OPLWORD|OPRWORD, /*EQAND - lvalue &= expr*/ ASGPRI|ASGOP|OPLWORD|OPRWORD, /*EQOR - lvalue |= expr*/ ASGPRI|ASGOP|OPLWORD|OPRWORD, /*EQXOR - lvalue ^= expr*/ TRMPRI, /*FJSR - generate function jsr*/ EQLPRI|OPREL|OPBIN, /*EQUALS - expr == expr*/ EQLPRI|OPREL|OPBIN, /*NEQUALS - expr != expr*/ RELPRI|OPREL|OPBIN, /*GREAT - expr > expr*/ RELPRI|OPREL|OPBIN, /*GREATEQ - expr >= expr*/ RELPRI|OPREL|OPBIN, /*LESS - expr < expr*/ RELPRI|OPREL|OPBIN, /*LESSEQ - expr <= expr*/ TRMPRI|OPCONVS, /*INT2L*/ TRMPRI|OPCONVS, /*LONG2I*/ TRMPRI|OPBIN, /*BTST*/ TRMPRI, /*LOAD*/ TRMPRI|OPBIN, /*LMULT*/ TRMPRI|OPBIN, /*LDIV*/ TRMPRI|OPBIN, /*LMOD*/ TRMPRI|OPBIN, /*LEQMULT*/ TRMPRI|OPBIN, /*LEQDIV*/ TRMPRI|OPBIN, /*LEQMOD*/ TRMPRI|ASGOP, /*EQADDR*/ TRMPRI, /*EQNOT*/ TRMPRI, /*EQNEG*/ TRMPRI|OPBIN, /*DOCAST*/ ASGPRI|ASGOP, /*STASSIGN [vlh]*/ TRMPRI|OPCONVS, /*LONG2F [vlh] 3.4*/ TRMPRI|OPCONVS, /*FLOAT2L [vlh] 3.4*/ TRMPRI|OPCONVS, /*INT2F [vlh] 3.4*/ TRMPRI|OPCONVS, /*FLOAT2I [vlh] 3.4*/ UNOPRI|OPRAS, /*TOCHAR [vlh] 4.0*/ TRMPRI, /*unused - 56*/ TRMPRI, /*unused - 57*/ TRMPRI, /*unused - 58*/ TRMPRI, /*unused - 59*/ UNOPRI|OPRAS|OPLVAL, /*ADDR - & expr*/ UNOPRI|OPRAS|OPLWORD, /*INDR - * expr*/ LNDPRI|OPBIN, /*LAND - expr && expr*/ LORPRI|OPBIN, /*LOR - expr || expr*/ QMKPRI|OPRAS|OPBIN, /*QMARK - expr ? expr : expr*/ QMKPRI|OPRAS|OPBIN, /*COLON*/ COMPRI|OPBIN, /*COMMA*/ TRMPRI|OPTERM, /*CINT*/ TRMPRI|OPTERM, /*CLONG*/ TRMPRI|OPTERM, /*SYMBOL*/ TRMPRI|OPTERM, /*AUTOINC*/ TRMPRI|OPTERM, /*AUTODEC*/ LPNPRI|OPBIN, /*CALL - call with arguments*/ LPNPRI, /*NACALL - no argument call*/ TRMPRI, /*BFIELD - field selection*/ TRMPRI, /*CONDBR*/ TRMPRI, /*INIT*/ TRMPRI, /*LOADREG*/ TRMPRI|OPTERM, /*DCLONG - divide const long*/ TRMPRI|OPTERM, /*CFLOAT [vlh] 3.4*/ UNOPRI|OPRAS|OPASSIGN|OPBIN, /*CAST*/ TRMPRI, /*SEMI*/ TRMPRI, /*LCURBR - {*/ TRMPRI, /*RCURBR - }*/ LPNPRI, /*LBRACK - [*/ RPNPRI, /*RBRACK - ]*/ LPNPRI, /*LPAREN - )*/ RPNPRI, /*RPAREN - )*/ TRMPRI|OPTERM, /*STRING*/ TRMPRI, /*RESWORD*/ LPNPRI|OPBIN, /*APTR - expr -> symbol*/ LPNPRI|OPBIN, /*PERIOD - expr . symbol*/ UNOPRI|OPRAS, /*SIZEOF - sizeof expr*/ LPNPRI|OPBIN, /*MPARENS - matching parens ()*/ };