/*ident "@(#)cls4:src/repr.c 1.5" */ /******************************************************************************* C++ source for the C++ Language System, Release 3.0. This product is a new release of the original cfront developed in the computer science research center of AT&T Bell Laboratories. Copyright (c) 1993 UNIX System Laboratories, Inc. Copyright (c) 1991, 1992 AT&T and UNIX System Laboratories, Inc. Copyright (c) 1984, 1989, 1990 AT&T. All Rights Reserved. THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE of AT&T and UNIX System Laboratories, Inc. The copyright notice above does not evidence any actual or intended publication of such source code. *******************************************************************************/ #include "cfront.h" char* oper_name(TOK op) /* return the string representation of operator "op" */ { switch (op) { default: error('i',"oper_name(%k)",op); case GNEW: case NEW: return "__nw"; case GDELETE: case DELETE: return "__dl"; case MUL: return "__ml"; case DIV: return "__dv"; case MOD: return "__md"; case UPLUS: case PLUS: return "__pl"; case MINUS: case UMINUS: return "__mi"; case LS: return "__ls"; case RS: return "__rs"; case EQ: return "__eq"; case NE: return "__ne"; case LT: return "__lt"; case GT: return "__gt"; case LE: return "__le"; case GE: return "__ge"; case AND: case ADDROF: return "__ad"; case OR: return "__or"; case ER: return "__er"; case ANDAND: return "__aa"; case OROR: return "__oo"; case NOT: return "__nt"; case COMPL: return "__co"; case INCR: return "__pp"; case DECR: return "__mm"; case CALL: return "__cl"; case DEREF: return "__vc"; case ASSIGN: return "__as"; case REF: return "__rf"; case ASPLUS: return "__apl"; case ASMINUS: return "__ami"; case ASMUL: return "__amu"; case ASDIV: return "__adv"; case ASMOD: return "__amd"; case ASLS: return "__als"; case ASRS: return "__ars"; case ASAND: return "__aad"; case ASOR: return "__aor"; case ASER: return "__aer"; case CTOR: return "__ct"; case DTOR: return "__dt"; // operator T "__op" // case SIZEOF: return "sizeof"; case CM: return "__cm"; case REFMUL: return "__rm"; // library functions: // "_vec_delete" // "_vec_new" // "_main" } } char* name_oper(char *s) { if (strcmp(s,"__nw")==0) return "operator new"; if (strcmp(s,"__dl")==0) return "operator delete"; if (strcmp(s,"__ml")==0) return "operator mul"; if (strcmp(s,"__dv")==0) return "operator div"; if (strcmp(s,"__md")==0) return "operator mod"; if (strcmp(s,"__pl")==0) return "operator plus"; if (strcmp(s,"__mi")==0) return "operator minus"; if (strcmp(s,"__ls")==0) return "operator left shift"; if (strcmp(s,"__rs")==0) return "operator right shift"; if (strcmp(s,"__eq")==0) return "operator equal"; if (strcmp(s,"__ne")==0) return "operator not equal"; if (strcmp(s,"__lt")==0) return "operator less than"; if (strcmp(s,"__gt")==0) return "operator greater than"; if (strcmp(s,"__le")==0) return "operator less than or equal to"; if (strcmp(s,"__ge")==0) return "operator greater than or equal to"; if (strcmp(s,"__ad")==0) return "operator addrof"; if (strcmp(s,"__or")==0) return "operator or"; if (strcmp(s,"__er")==0) return "operator er"; if (strcmp(s,"__aa")==0) return "operator andand"; if (strcmp(s,"__oo")==0) return "operator oror"; if (strcmp(s,"__nt")==0) return "operator not"; if (strcmp(s,"__co")==0) return "operator compl"; if (strcmp(s,"__pp")==0) return "operator increment"; if (strcmp(s,"__mm")==0) return "operator decrement"; if (strcmp(s,"__cl")==0) return "operator call"; if (strcmp(s,"__vc")==0) return "operator deref"; if (strcmp(s,"__as")==0) return "operator assign"; if (strcmp(s,"__rf")==0) return "operator ref"; if (strcmp(s,"__apl")==0) return "operator asplus"; if (strcmp(s,"__ami")==0) return "operator assignment minus"; if (strcmp(s,"__amu")==0) return "operator assignment multiply"; if (strcmp(s,"__adv")==0) return "operator assignment div"; if (strcmp(s,"__amd")==0) return "operator assignment mod"; if (strcmp(s,"__als")==0) return "operator assignment left shift"; if (strcmp(s,"__ars")==0) return "operator assignment right shift"; if (strcmp(s,"__aad")==0) return "operator assignment and"; if (strcmp(s,"__aor")==0) return "operator assignment or"; if (strcmp(s,"__aer")==0) return "operator assignment er"; if (strcmp(s,"__ct")==0) return "constructor"; if (strcmp(s,"__dt")==0) return "destructor"; if (strcmp(s,"__cm")==0) return "comma operator"; if (strcmp(s,"__rm")==0) return "operator ->*"; return s; } #define new_op(ss,v) keys[v]=ss void otbl_init() /* operator representation table */ { new_op("->",REF); new_op("." ,DOT); new_op(".* or ->*" ,REFMUL); new_op("!" ,NOT); new_op("~" ,COMPL); new_op("++",INCR); new_op("--",DECR); new_op("*" ,MUL); new_op("&" ,AND); new_op("&" ,ADDROF); new_op("&" ,G_ADDROF); new_op("/" ,DIV); new_op("%" ,MOD); new_op("+" ,PLUS); new_op("+" ,UPLUS); new_op("-" ,MINUS); new_op("-" ,UMINUS); new_op("<<",LS); new_op(">>",RS); new_op("<" ,LT); new_op(">" ,GT); new_op("<=",LE); new_op(">=",GE); new_op("==",EQ); new_op("!=",NE); new_op("^" ,ER); new_op("|" ,OR); new_op("&&",ANDAND); new_op("||",OROR); new_op("?:" ,QUEST); // new_op(":" ,COLON); new_op("=" ,ASSIGN); new_op("," ,CM); new_op("," ,G_CM); new_op(";" ,SM); new_op("{" ,LC); new_op("}" ,RC); new_op("(" ,LP); new_op(")" ,RP); new_op("[" ,LB); new_op("]" ,RB); new_op("+=",ASPLUS); new_op("-=",ASMINUS); new_op("*=",ASMUL); new_op("/=",ASDIV); new_op("%=",ASMOD); new_op("&=",ASAND); new_op("|=",ASOR); new_op("^=",ASER); new_op(">>=",ASRS); new_op("<<=",ASLS); // new_op("sizeof",SIZEOF); // new_op("new",NEW); // new_op("delete",DELETE); new_op("0" ,ZERO); new_op("[]" ,DEREF); new_op("expression list", ELIST); new_op("initializer list", ILIST); new_op("static initializer", STAT_INIT); new_op("()", CALL); new_op("generated function call",G_CALL); new_op("inline function call",ICALL); new_op("cast",CAST); new_op("generated cast",G_CAST); new_op("inline argument",ANAME); new_op("text",TEXT); new_op(".*",MEMPTR); new_op("class type", COBJ); new_op("enum type", EOBJ); new_op("union", ANON); new_op("function",FCT); new_op("pointer",PTR); new_op("reference",RPTR); new_op("array",VEC); new_op("identifier",ID); new_op("name",NAME); new_op("constructor",CTOR); new_op("destructor",DTOR); new_op("...",ELLIPSIS); new_op("::",MEM); new_op("type name",TYPE); new_op("tname",TNAME); new_op("{}",BLOCK); new_op("pair",PAIR); new_op("declaration",DCL); new_op("character constant",CCON); new_op("integer constant",ICON); new_op("float constant",FCON); new_op("integer value",IVAL); new_op("string",STRING); new_op("label",LABEL); new_op("'class', 'struct', or 'union'",AGGR); new_op(" argument",ARG); new_op(" empty expression",DUMMY); new_op(" ::new",GNEW); new_op(" constructor call",VALUE); new_op(" ::delete",GDELETE); new_op(ansi_opt?" long double":" double",LDOUBLE); new_op(" typedef",TPDEF); // did not want to introduce new TOKEN }