|
|
1.1 ! root 1: #define csync(c) (global_filename = (c)->c_value.no.no_name, global_lineno = (c)->c_value.no.no_offset) ! 2: #define cunpack(x) ((cnodes)x) ! 3: ! 4: typedef enum ! 5: { ! 6: ct_args, ! 7: ct_binopfsfx, ! 8: ct_binopft, ! 9: ct_binopfv, ! 10: ct_block, ! 11: ct_booltest, ! 12: ct_boolval, ! 13: ct_call, ! 14: ct_callfv, ! 15: ct_dcast, ! 16: ct_clear, ! 17: ct_colon, ! 18: ct_discard, ! 19: ct_fake, ! 20: ct_ftnentry, ! 21: ct_ftnxit, ! 22: ct_hard, ! 23: ct_jmp, ! 24: ct_jmpf, ! 25: ct_jmpt, ! 26: ct_intrin, ! 27: ct_intrinfv, ! 28: ct_label, ! 29: ct_ldiff, ! 30: ct_nop, ! 31: ct_not, ! 32: ct_obj, ! 33: ct_objfv, ! 34: ct_objref, ! 35: ct_question, ! 36: ct_ret, ! 37: ct_switch, ! 38: ct_sync, ! 39: ct_ujmp, ! 40: ct_unopfsfx, ! 41: ct_unopfv, ! 42: ct_vret, ! 43: ct_xnd, ! 44: ct_xndtest, ! 45: ! 46: ct_char, ! 47: ct_double, ! 48: ct_extern, ! 49: ct_float, ! 50: ct_int, ! 51: ct_long, ! 52: ct_short, ! 53: ct_space, ! 54: ct_ptr, ! 55: ct_string, ! 56: } ! 57: cnodes; ! 58: ! 59: struct cnode ! 60: { ! 61: /* ! 62: * whenever in a list. ! 63: */ ! 64: cnode *c_next; ! 65: /* ! 66: * last - during optimisation ! 67: * type - codegen and beyond ! 68: * symtab - intrinsics (currently unused) ! 69: */ ! 70: union ! 71: { ! 72: cnode *cu_last; ! 73: xnode *cu_type; ! 74: char *cu_symtab; ! 75: } ! 76: cu1; ! 77: /* ! 78: * value - general use ! 79: * labs - label difference (switch table) ! 80: */ ! 81: union ! 82: { ! 83: data cu_value; ! 84: struct ! 85: { ! 86: cnode *cu_l1; ! 87: cnode *cu_l2; ! 88: } ! 89: cu_labs; ! 90: } ! 91: cu2; ! 92: /* ! 93: * what - whenever in a list ! 94: * label - switch labels ! 95: */ ! 96: union ! 97: { ! 98: cnodes cu_what; ! 99: cnode *cu_label; ! 100: } ! 101: cu3; ! 102: /* ! 103: * choice - switch tree ! 104: * link - labels ! 105: * ids - register allocation ! 106: * xwhat - codegen operator ! 107: */ ! 108: union ! 109: { ! 110: choice *cu_choice; ! 111: cnode *cu_link; ! 112: xnodes cu_xwhat; ! 113: xnode *cu_ids; ! 114: } ! 115: cu4; ! 116: /* ! 117: * flow_set - opt/flow ! 118: */ ! 119: union ! 120: { ! 121: xnode *cu_flow; ! 122: cnode *cu_switch; ! 123: } ! 124: cu5; ! 125: /* ! 126: * short1 - flags (almost everywhere) ! 127: * short2 - optimisation ! 128: */ ! 129: short c_short1; ! 130: short c_short2; ! 131: }; ! 132: #define c_code c_next ! 133: ! 134: #define c_symtab cu1.cu_symtab ! 135: #define c_last cu1.cu_last ! 136: #define c_type cu1.cu_type ! 137: ! 138: #define c_value cu2.cu_value ! 139: #define c_l1 cu2.cu_labs.cu_l1 ! 140: #define c_l2 cu2.cu_labs.cu_l2 ! 141: #define c_uncomarg cu2.cu_labs.cu_l1 ! 142: #define c_uncomnext cu2.cu_labs.cu_l2 ! 143: ! 144: #define c_label cu3.cu_label ! 145: #define c_what cu3.cu_what ! 146: ! 147: #define c_link cu4.cu_link ! 148: #define c_xwhat cu4.cu_xwhat ! 149: #define c_choice cu4.cu_choice ! 150: #define c_ids cu4.cu_ids ! 151: ! 152: #define c_left c_next ! 153: #define c_right c_last ! 154: #define c_switch cu5.cu_switch ! 155: ! 156: #define c_flow cu5.cu_flow ! 157: ! 158: #define c_height c_short1 ! 159: #define c_flags c_short1 ! 160: #define c_known c_short2 ! 161: #define c_dist c_short2 ! 162: #define c_ord c_short2 ! 163: ! 164: /* ! 165: * Used in ct_clear nodes for memory layout definitions as passed ! 166: * to memory(). ! 167: */ ! 168: #define C_READONLY 0x0001 ! 169: #define C_EXECUTEONLY 0x0002 ! 170: #define C_ALLZERO 0x0004 ! 171: ! 172: /* ! 173: * cnode / xnode flow flags ! 174: * ! 175: * The first five are the flow sets, the rest ! 176: * are allocated identifier classes. ! 177: */ ! 178: #define C_X_CUT 0x0001 ! 179: #define C_X_MOD 0x0002 ! 180: #define C_X_REF 0x0004 ! 181: #define C_X_HIDE 0x0008 ! 182: #define C_X_CMOD 0x0010 ! 183: ! 184: #define C_ID_BEGIN 0x0020 ! 185: #define C_ID_END 0x0040 ! 186: #define C_ID_BECOMES 0x0080 ! 187: ! 188: /* ! 189: * A switch label ref cnode does not live in the list. ! 190: * It is on the label ref list and has c_flags & C_SWITCH ! 191: * Its c_label points to the abel itself and its c_switch ! 192: * points to the switch. ! 193: */ ! 194: #define C_SWITCH 0x0100 ! 195: ! 196: #define LABIS_NORMAL 0x1000 ! 197: #define LABIS_PRECIOUS 0x2000 ! 198: ! 199: struct cfrag ! 200: { ! 201: union ! 202: { ! 203: cnode *c_cn; ! 204: cfrag *c_cf; ! 205: } ! 206: c_un; ! 207: cnode *c_tail; ! 208: }; ! 209: #define c_head c_un.c_cn ! 210: #define k_next c_un.c_cf ! 211: ! 212: typedef set cnodes cnset;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.