|
|
1.1 ! root 1: /* ! 2: * n0/dope.c ! 3: * C compiler. ! 4: * Operator and type conversion ! 5: * information ("dope") tables. ! 6: */ ! 7: #ifdef vax ! 8: #include "INC$LIB:cc0.h" ! 9: #else ! 10: #include "cc0.h" ! 11: #endif ! 12: ! 13: /* ! 14: * This table is indexed by operator number less MIOBASE ! 15: * to get the legal left and right operand rules. ! 16: */ ! 17: short opdope[] = { ! 18: ! 19: 13 + FOLD+NSTR+NSTL, /* + */ ! 20: 13 + FOLD+NSTR+NSTL, /* - */ ! 21: 14 + FOLD+NSTR+NSTL+NPTR+NPTL, /* * */ ! 22: 14 + FOLD+NSTR+NSTL+NPTR+NPTL, /* / */ ! 23: 14 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* % */ ! 24: 9 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* & */ ! 25: 7 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* | */ ! 26: 8 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* ^ */ ! 27: 12 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* << */ ! 28: 12 + FOLD+NSTR+NSTL+NPTR+NPTL+NFLT, /* >> */ ! 29: ! 30: 2 + NSTR+NSTL+NPTR +ASGN+RLVL+RAS, /* += */ ! 31: 2 + NSTR+NSTL+NPTR +ASGN+RLVL+RAS, /* -= */ ! 32: 2 + NSTR+NSTL+NPTR+NPTL +ASGN+RLVL+RAS, /* *= */ ! 33: 2 + NSTR+NSTL+NPTR+NPTL +ASGN+RLVL+RAS, /* /= */ ! 34: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* %= */ ! 35: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* &= */ ! 36: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* |= */ ! 37: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* ^= */ ! 38: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* <<= */ ! 39: 2 + NSTR+NSTL+NPTR+NPTL+NFLT+ASGN+RLVL+RAS, /* >>= */ ! 40: ! 41: 10 + FOLD+NSTR+NSTL, /* == */ ! 42: 10 + FOLD+NSTR+NSTL, /* != */ ! 43: 11 + FOLD+NSTR+NSTL, /* > */ ! 44: 11 + FOLD+NSTR+NSTL, /* >= */ ! 45: 11 + FOLD+NSTR+NSTL, /* <= */ ! 46: 11 + FOLD+NSTR+NSTL, /* < */ ! 47: 0, /* > unsigned */ ! 48: 0, /* >= unsigned */ ! 49: 0, /* <= unsigned */ ! 50: 0, /* < unsigned */ ! 51: ! 52: 0 + NSTL+NFLT, /* Ind */ ! 53: 0 + RLVL, /* Addr */ ! 54: 0 + FOLD+NSTL+NPTL, /* - u */ ! 55: 0 + FOLD+NSTL+NPTL+NFLT, /* ~ */ ! 56: 0 + FOLD+RTOL, /* ! */ ! 57: 4 + FOLD+RTOL, /* ? */ ! 58: 4 + RAS, /* : */ ! 59: 15 + NSTL+RLVL+RAS, /* ++x */ ! 60: 15 + NSTL+RLVL+RAS, /* --x */ ! 61: 15 + NSTL+RLVL+RAS, /* x++ */ ! 62: 15 + NSTL+RLVL+RAS, /* x-- */ ! 63: 1 + FOLD, /* , */ ! 64: 0 + NSTL, /* Call */ ! 65: 6 + FOLD+RTOL+RTOR, /* && */ ! 66: 5 + FOLD+RTOL+RTOR, /* || */ ! 67: 0, /* Cast of types */ ! 68: 0, /* Conversion */ ! 69: 0, /* Field marker */ ! 70: 0 + RAS, /* Sizeof */ ! 71: 2 + ASGN+RLVL+RAS, /* = */ ! 72: 0, /* Drain conversions */ ! 73: 0, /* Init */ ! 74: 0, /* Arglist */ ! 75: 0, /* Leaf */ ! 76: 0, /* Fix up */ ! 77: 0 /* Block move */ ! 78: ! 79: }; ! 80: ! 81: /* ! 82: * Conversions. ! 83: * Indexed by 12*(lt-T_CHAR) + (rt-T_CHAR). ! 84: * Linear types are the same as the abstract types, ! 85: * with all pointers mapped to T_PTR ! 86: * and nothing greater than T_STRUCT. ! 87: * Flags are: ! 88: * GOAL Mask to get goal type. ! 89: * GTR Goal is same as right. ! 90: * GTL Goal is same as left. ! 91: * CVR Convert right. ! 92: * CVL Convert left. ! 93: * CVRA If op is ASGN, do CVR. ! 94: * CARA If op is ASGN, do CAST right side. ! 95: * UREL Use unsigned relations. ! 96: */ ! 97: short cvdope[] = { ! 98: ! 99: T_INT + CVL + CVR + CVRA, /* c :: c */ ! 100: T_UINT + CVL + CVR + CVRA + UREL, /* c :: uc */ ! 101: T_INT + CVL + CVR + CVRA, /* c :: s */ ! 102: T_UINT + CVL + CVR + CVRA + UREL, /* c :: us */ ! 103: T_INT + CVL, /* c :: i */ ! 104: T_UINT + CVL + CVRA + UREL, /* c :: ui */ ! 105: GTR + CVL + CARA + UREL, /* c :: p */ ! 106: T_LONG + CVL + CVRA, /* c :: l */ ! 107: T_ULONG + CVL + CVRA + UREL, /* c :: ul */ ! 108: T_DOUBLE+ CVL + CVR + CVRA, /* c :: f */ ! 109: T_DOUBLE+ CVL + CVRA, /* c :: d */ ! 110: 0, /* c :: v */ ! 111: 0, /* c :: t */ ! 112: ! 113: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: c */ ! 114: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: uc */ ! 115: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: s */ ! 116: T_UINT + CVL + CVR + CVRA + UREL, /* uc :: us */ ! 117: T_UINT + CVL + CVR + UREL, /* uc :: i */ ! 118: T_UINT + CVL + CVRA + UREL, /* uc :: ui */ ! 119: GTR + CVL + CARA + UREL, /* uc :: p */ ! 120: T_ULONG + CVL + CVR + CVRA + UREL, /* uc :: l */ ! 121: T_ULONG + CVL + CVRA + UREL, /* uc :: ul */ ! 122: T_DOUBLE+ CVL + CVR + CVRA, /* uc :: f */ ! 123: T_DOUBLE+ CVL + CVRA, /* uc :: d */ ! 124: 0, /* uc :: v */ ! 125: 0, /* uc :: t */ ! 126: ! 127: T_INT + CVL + CVR + CVRA, /* s :: c */ ! 128: T_UINT + CVL + CVR + CVRA + UREL, /* s :: uc */ ! 129: T_INT + CVL + CVR + CVRA, /* s :: s */ ! 130: T_UINT + CVL + CVR + CVRA + UREL, /* s :: us */ ! 131: T_INT + CVL, /* s :: i */ ! 132: T_UINT + CVL + CVRA + UREL, /* s :: ui */ ! 133: GTR + CVL + CARA + UREL, /* s :: p */ ! 134: T_LONG + CVL + CVRA, /* s :: l */ ! 135: T_ULONG + CVL + CVRA + UREL, /* s :: ul */ ! 136: T_DOUBLE+ CVL + CVR + CVRA, /* s :: f */ ! 137: T_DOUBLE+ CVL + CVRA, /* s :: d */ ! 138: 0, /* s :: v */ ! 139: 0, /* s :: t */ ! 140: ! 141: T_UINT + CVL + CVR + CVRA + UREL, /* us :: c */ ! 142: T_UINT + CVL + CVR + CVRA + UREL, /* us :: uc */ ! 143: T_UINT + CVL + CVR + CVRA + UREL, /* us :: s */ ! 144: T_UINT + CVL + CVR + CVRA + UREL, /* us :: us */ ! 145: T_UINT + CVL + CVR + CVRA + UREL, /* us :: i */ ! 146: T_UINT + CVL + UREL, /* us :: ui */ ! 147: GTR + CVL + CARA + UREL, /* us :: p */ ! 148: T_ULONG + CVL + CVR + CVRA + UREL, /* us :: l */ ! 149: T_ULONG + CVL + CVRA + UREL, /* us :: ul */ ! 150: T_DOUBLE+ CVL + CVR + CVRA, /* us :: f */ ! 151: T_DOUBLE+ CVL + CVRA, /* us :: d */ ! 152: 0, /* us :: v */ ! 153: 0, /* us :: t */ ! 154: ! 155: T_INT + CVR + CVRA, /* i :: c */ ! 156: T_UINT + CVL + CVR + CVRA + UREL, /* i :: uc */ ! 157: T_INT + CVR + CVRA, /* i :: s */ ! 158: T_UINT + CVL + CVR + CVRA + UREL, /* i :: us */ ! 159: T_INT, /* i :: i */ ! 160: T_UINT + CVL + CVRA + UREL, /* i :: ui */ ! 161: GTR + CVL + CARA + UREL, /* i :: p */ ! 162: T_LONG + CVL + CVRA, /* i :: l */ ! 163: T_ULONG + CVL + CVRA + UREL, /* i :: ul */ ! 164: T_DOUBLE+ CVL + CVR + CVRA, /* i :: f */ ! 165: T_DOUBLE+ CVL + CVRA, /* i :: d */ ! 166: 0, /* i :: v */ ! 167: 0, /* i :: t */ ! 168: ! 169: T_UINT + CVR + CVRA + UREL, /* ui :: c */ ! 170: T_UINT + CVR + CVRA + UREL, /* ui :: uc */ ! 171: T_UINT + CVR + CVRA + UREL, /* ui :: s */ ! 172: T_UINT + CVR + CVRA + UREL, /* ui :: us */ ! 173: T_UINT + CVR + CVRA + UREL, /* ui :: i */ ! 174: T_UINT + UREL, /* ui :: ui */ ! 175: GTR + CVL + CARA + UREL, /* ui :: p */ ! 176: T_ULONG + CVL + CVR + CVRA + UREL, /* ui :: l */ ! 177: T_ULONG + CVL + CVRA + UREL, /* ui :: ul */ ! 178: T_DOUBLE+ CVL + CVR + CVRA, /* ui :: f */ ! 179: T_DOUBLE+ CVL + CVRA, /* ui :: d */ ! 180: 0, /* ui :: v */ ! 181: 0, /* ui :: t */ ! 182: ! 183: GTL + CVR + CVRA + UREL, /* p :: c */ ! 184: GTL + CVR + CVRA + UREL, /* p :: uc */ ! 185: GTL + CVR + CVRA + UREL, /* p :: s */ ! 186: GTL + CVR + CVRA + UREL, /* p :: us */ ! 187: GTL + CVR + CVRA + UREL, /* p :: i */ ! 188: GTL + CVR + CVRA + UREL, /* p :: ui */ ! 189: GTL + UREL, /* p :: p */ ! 190: GTL + CVR + CVRA + UREL, /* p :: l */ ! 191: GTL + CVR + CVRA + UREL, /* p :: ul */ ! 192: 0, /* p :: f */ ! 193: 0, /* p :: d */ ! 194: 0, /* p :: v */ ! 195: 0, /* p :: t */ ! 196: ! 197: T_LONG + CVR + CVRA, /* l :: c */ ! 198: T_ULONG + CVL + CVR + CVRA + UREL, /* l :: uc */ ! 199: T_LONG + CVR + CVRA, /* l :: s */ ! 200: T_ULONG + CVL + CVR + CVRA + UREL, /* l :: us */ ! 201: T_LONG + CVR + CVRA, /* l :: i */ ! 202: T_ULONG + CVL + CVR + CVRA + UREL, /* l :: ui */ ! 203: GTR + CVL + CARA + UREL, /* l :: p */ ! 204: T_LONG, /* l :: l */ ! 205: T_ULONG + CVL + CVRA + UREL, /* l :: ul */ ! 206: T_DOUBLE+ CVL + CVR + CVRA, /* l :: f */ ! 207: T_DOUBLE+ CVL + CVRA, /* l :: d */ ! 208: 0, /* l :: v */ ! 209: 0, /* l :: t */ ! 210: ! 211: T_ULONG + CVR + CVRA + UREL, /* ul :: c */ ! 212: T_ULONG + CVR + CVRA + UREL, /* ul :: uc */ ! 213: T_ULONG + CVR + CVRA + UREL, /* ul :: s */ ! 214: T_ULONG + CVR + CVRA + UREL, /* ul :: us */ ! 215: T_ULONG + CVR + CVRA + UREL, /* ul :: i */ ! 216: T_ULONG + CVR + CVRA + UREL, /* ul :: ui */ ! 217: GTR + CVL + CARA + UREL, /* ul :: p */ ! 218: T_ULONG + CVR + CVRA + UREL, /* ul :: l */ ! 219: T_ULONG + UREL, /* ul :: ul */ ! 220: T_DOUBLE+ CVL + CVR + CVRA, /* ul :: f */ ! 221: T_DOUBLE+ CVL + CVRA, /* ul :: d */ ! 222: 0, /* ul :: v */ ! 223: 0, /* ul :: t */ ! 224: ! 225: T_DOUBLE+ CVL + CVR + CVRA, /* f :: c */ ! 226: T_DOUBLE+ CVL + CVR + CVRA, /* f :: uc */ ! 227: T_DOUBLE+ CVL + CVR + CVRA, /* f :: s */ ! 228: T_DOUBLE+ CVL + CVR + CVRA, /* f :: us */ ! 229: T_DOUBLE+ CVL + CVR + CVRA, /* f :: i */ ! 230: T_DOUBLE+ CVL + CVR + CVRA, /* f :: ui */ ! 231: 0, /* f :: p */ ! 232: T_DOUBLE+ CVL + CVR + CVRA, /* f :: l */ ! 233: T_DOUBLE+ CVL + CVR + CVRA, /* f :: ul */ ! 234: T_DOUBLE+ CVL + CVR + CVRA, /* f :: f */ ! 235: T_DOUBLE+ CVL + CVRA, /* f :: d */ ! 236: 0, /* f :: v */ ! 237: 0, /* f :: t */ ! 238: ! 239: T_DOUBLE + CVR + CVRA, /* d :: c */ ! 240: T_DOUBLE + CVR + CVRA, /* d :: uc */ ! 241: T_DOUBLE + CVR + CVRA, /* d :: s */ ! 242: T_DOUBLE + CVR + CVRA, /* d :: us */ ! 243: T_DOUBLE + CVR + CVRA, /* d :: i */ ! 244: T_DOUBLE + CVR + CVRA, /* d :: ui */ ! 245: 0, /* d :: p */ ! 246: T_DOUBLE + CVR + CVRA, /* d :: l */ ! 247: T_DOUBLE + CVR + CVRA, /* d :: ul */ ! 248: T_DOUBLE + CVR + CVRA, /* d :: f */ ! 249: T_DOUBLE, /* d :: d */ ! 250: 0, /* d :: v */ ! 251: 0, /* d :: t */ ! 252: ! 253: 0, /* v :: c */ ! 254: 0, /* v :: uc */ ! 255: 0, /* v :: s */ ! 256: 0, /* v :: us */ ! 257: 0, /* v :: i */ ! 258: 0, /* v :: ui */ ! 259: 0, /* v :: p */ ! 260: 0, /* v :: l */ ! 261: 0, /* v :: ul */ ! 262: 0, /* v :: f */ ! 263: 0, /* v :: d */ ! 264: 0, /* v :: v */ ! 265: 0, /* v :: t */ ! 266: ! 267: 0, /* t :: c */ ! 268: 0, /* t :: uc */ ! 269: 0, /* t :: s */ ! 270: 0, /* t :: us */ ! 271: 0, /* t :: i */ ! 272: 0, /* t :: ui */ ! 273: 0, /* t :: p */ ! 274: 0, /* t :: l */ ! 275: 0, /* t :: ul */ ! 276: 0, /* t :: f */ ! 277: 0, /* t :: d */ ! 278: 0, /* t :: v */ ! 279: GTL /* t :: t */ ! 280: }; ! 281: ! 282: /* end of n0/dope.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.