int test(void) { int i, i1, i2; int ia[10]; int ia1[10]; int ia2[10]; int *ip, *ip1, *ip2; int *iap[10]; struct st { int i; int ia[10]; struct st *stp; int *ip; } struct st st1; struct st sta[10]; struct st *stp; struct st *stap[10]; i = 1; PROC test ; AST_DefProc PUSH #1 ; AST_Const POP i ; [[typeinfo=1080]] ip = &i; PUSH &i ; AddressOf() POP ip ; [[typeinfo=1079]] ; next is addressof(LHS) *ip = 2; PUSH ip ; [[typeinfo=1079]] PUSH #2 ; AST_Const POPI ; modify TOS-1 with contents of TOS ; next is addressof(LHS) *(ip) = 2; PUSH ip ; [[typeinfo=1079]] PUSH #2 ; AST_Const POPI ; modify TOS-1 with contents of TOS ; next is addressof(LHS) *ip = i; PUSH ip ; [[typeinfo=1079]] PUSH i ; [[typeinfo=1080]] POPI ; modify TOS-1 with contents of TOS ia[1] = 3; ; next is addressof(LHS) PUSH &ia ; AddressOf() PUSH #1 ; AST_Const INDEX 4 ; (by size of object type 2) PUSH #3 ; AST_Const POPI ; modify TOS-1 with contents of TOS iap[1] = &i; ; next is addressof(LHS) PUSH &iap ; AddressOf() PUSH #1 ; AST_Const INDEX 4 ; (by size of object type 2) PUSH &i ; AddressOf() POPI ; modify TOS-1 with contents of TOS iap[2] = ip; ; next is addressof(LHS) PUSH &iap ; AddressOf() PUSH #2 ; AST_Const INDEX 4 ; (by size of object type 2) PUSH ip ; [[typeinfo=1079]] POPI ; modify TOS-1 with contents of TOS *iap[1] = 4; ; next is addressof(LHS) PUSH &iap ; push address of zeroth element of array PUSH #1 ; AST_Const INDEX 4 ; (by size of object type 1079) PUSH #4 ; AST_Const POPI ; modify TOS-1 with contents of TOS st1.i = i; ; next is addressof(LHS) PUSH &st1 ; AddressOf() PUSH i ; [[typeinfo=1080]] ADD ; add offset to this member to object base address PUSH i ; [[typeinfo=1080]] POPI ; modify TOS-1 with contents of TOS st1.ip = ip; ; next is addressof(LHS) PUSH &st1 ; AddressOf() PUSH ip ; [[typeinfo=1079]] ADD ; add offset to this member to object base address PUSH ip ; [[typeinfo=1079]] POPI ; modify TOS-1 with contents of TOS *st1.ip = i; ; next is addressof(LHS) PUSH st1 ; [[typeinfo=1078]] PUSH ip ; [[typeinfo=1079]] ADD ; add offset to this member to object base address PUSH i ; [[typeinfo=1080]] POPI ; modify TOS-1 with contents of TOS i = ia[2]; PUSH &ia ; push address of zeroth element of array PUSH #2 ; AST_Const INDEX 4 ; (by size of object type 1080) POP i ; [[typeinfo=1080]] ia[3] = ia[4]; PUSH &ia ; AddressOf() PUSH #3 ; AST_Const INDEX 4 ; (by size of object type 2) PUSH &ia ; push address of zeroth element of array PUSH #4 ; AST_Const INDEX 4 ; (by size of object type 1080) POPI ; modify TOS-1 with contents of TOS st1.i = i; ; next is addressof(LHS) ; next is addressof(LHS) PUSH &st1 ; AddressOf() PUSH i ; [[typeinfo=1080]] ADD ; add offset to this member to object base address PUSH i ; [[typeinfo=1080]] POPI ; modify TOS-1 with contents of TOS ; next is addressof(LHS) st1.ia[3] = i; PUSH &st1 ; AddressOf() PUSH &ia ; push address of zeroth element of array ADD ; add offset to this member to object base address PUSH #3 ; AST_Const INDEX 4 ; (by size of object type 2) PUSH i ; [[typeinfo=1080]] POPI ; modify TOS-1 with contents of TOS stp = &sta[5]; PUSH &sta ; AddressOf() PUSH #5 ; AST_Const INDEX 4 ; (by size of object type 2) POP stp ; [[typeinfo=1079]] ; next is addressof(LHS) stp->i = i; PUSH &stp ; AddressOf() PUSHI ; dereference pointer to base of struct PUSH i ; [[typeinfo=1080]] ADD ; add offset to this field in the struct PUSH i ; [[typeinfo=1080]] POPI ; modify TOS-1 with contents of TOS return 0; } PUSH #0 ; AST_Const RET 1 ; Return a result RET 0 ; Return by dropping through end of proc ----------------- 1255: AST_Scope [1250] -1 0 [[typeinfo=-1]] 1250: AST_SEQ [1243] [-1] [[typeinfo=-1]] 1243: AST_DefProc 1 [6] [-1] [10] [[typeinfo=-1]] 6: AST_TAG "test" [[typeinfo=-1]] 10: AST_Scope [1238] 1255 1 [[typeinfo=-1]] 1238: AST_SEQ [-1] [1233] [[typeinfo=-1]] 1233: AST_SEQ [713] [1228] [[typeinfo=-1]] 713: AST_SEQ [16] [708] [[typeinfo=-1]] 16: AST_SEQ [71] [77] [[typeinfo=-1]] 71: AST_Declare [26] [21] [-1] [[typeinfo=-1]] 26: AST_TAG "i" [[typeinfo=-1]] 21: AST_TYPE_Atom 77: AST_SEQ [82] [88] [[typeinfo=-1]] 82: AST_Declare [30] [21] [-1] [[typeinfo=-1]] 30: AST_TAG "i1" [[typeinfo=-1]] 21: AST_TYPE_Atom 88: AST_SEQ [93] [-1] [[typeinfo=-1]] 93: AST_Declare [34] [21] [-1] [[typeinfo=-1]] 34: AST_TAG "i2" [[typeinfo=-1]] 21: AST_TYPE_Atom 708: AST_SEQ [126] [703] [[typeinfo=-1]] 126: AST_Declare [104] [118] [-1] [[typeinfo=-1]] 104: AST_TAG "ia" [[typeinfo=-1]] 118: AST_TYPE_ArrayOf [99] [113] 0 108 -1 [[typeinfo=-1]] 99: AST_TYPE_Atom 113: AST_TYPE_Atom 703: AST_SEQ [159] [698] [[typeinfo=-1]] 159: AST_Declare [137] [151] [-1] [[typeinfo=-1]] 137: AST_TAG "ia1" [[typeinfo=-1]] 151: AST_TYPE_ArrayOf [132] [146] 0 141 -1 [[typeinfo=-1]] 132: AST_TYPE_Atom 146: AST_TYPE_Atom 698: AST_SEQ [192] [693] [[typeinfo=-1]] 192: AST_Declare [170] [184] [-1] [[typeinfo=-1]] 170: AST_TAG "ia2" [[typeinfo=-1]] 184: AST_TYPE_ArrayOf [165] [179] 0 174 -1 [[typeinfo=-1]] 165: AST_TYPE_Atom 179: AST_TYPE_Atom 693: AST_SEQ [198] [688] [[typeinfo=-1]] 198: AST_SEQ [265] [271] [[typeinfo=-1]] 265: AST_Declare [212] [208] [-1] [[typeinfo=-1]] 212: AST_TAG "ip" [[typeinfo=-1]] 208: AST_TYPE_PointerTo [203] [[typeinfo=-1]] 203: AST_TYPE_Atom 271: AST_SEQ [276] [282] [[typeinfo=-1]] 276: AST_Declare [220] [216] [-1] [[typeinfo=-1]] 220: AST_TAG "ip1" [[typeinfo=-1]] 216: AST_TYPE_PointerTo [203] [[typeinfo=-1]] 203: AST_TYPE_Atom 282: AST_SEQ [287] [-1] [[typeinfo=-1]] 287: AST_Declare [228] [224] [-1] [[typeinfo=-1]] 228: AST_TAG "ip2" [[typeinfo=-1]] 224: AST_TYPE_PointerTo [203] [[typeinfo=-1]] 203: AST_TYPE_Atom 688: AST_SEQ [324] [683] [[typeinfo=-1]] 324: AST_Declare [302] [316] [-1] [[typeinfo=-1]] 302: AST_TAG "iap" [[typeinfo=-1]] 316: AST_TYPE_ArrayOf [298] [311] 0 306 -1 [[typeinfo=-1]] 298: AST_TYPE_PointerTo [293] [[typeinfo=-1]] 293: AST_TYPE_Atom 311: AST_TYPE_Atom 683: AST_SEQ [501] [678] [[typeinfo=-1]] 678: AST_SEQ [507] [673] [[typeinfo=-1]] 507: AST_SEQ [537] [-1] [[typeinfo=-1]] 537: AST_Declare [522] [516] [-1] [[typeinfo=-1]] 522: AST_TAG "st1" [[typeinfo=-1]] 673: AST_SEQ [575] [668] [[typeinfo=-1]] 575: AST_Declare [553] [567] [-1] [[typeinfo=-1]] 553: AST_TAG "sta" [[typeinfo=-1]] 567: AST_TYPE_ArrayOf [547] [562] 0 557 -1 [[typeinfo=-1]] 562: AST_TYPE_Atom 668: AST_SEQ [581] [663] [[typeinfo=-1]] 581: AST_SEQ [615] [-1] [[typeinfo=-1]] 615: AST_Declare [600] [596] [-1] [[typeinfo=-1]] 600: AST_TAG "stp" [[typeinfo=-1]] 596: AST_TYPE_PointerTo [590] [[typeinfo=-1]] 663: AST_SEQ [657] [-1] [[typeinfo=-1]] 657: AST_Declare [635] [649] [-1] [[typeinfo=-1]] 635: AST_TAG "stap" [[typeinfo=-1]] 649: AST_TYPE_ArrayOf [631] [644] 0 639 -1 [[typeinfo=-1]] 631: AST_TYPE_PointerTo [625] [[typeinfo=-1]] 644: AST_TYPE_Atom 1228: AST_SEQ [722] [1223] [[typeinfo=-1]] 722: AST_AssignTo [718] [727] [[typeinfo=21]] 718: AST_TAG "i" [[typeinfo=21]] 727: AST_Const 1 1223: AST_SEQ [736] [1218] [[typeinfo=-1]] 736: AST_AssignTo [732] [741] [[typeinfo=208]] 732: AST_TAG "ip" [[typeinfo=208]] 741: AST_AddressOf [745] [[typeinfo=-1]] 745: AST_TAG "i" [[typeinfo=-1]] 1218: AST_SEQ [757] [1213] [[typeinfo=-1]] 757: AST_AssignTo [749] [762] [[typeinfo=203]] 749: AST_IndirectThrough [753] [[typeinfo=203]] 753: AST_TAG "ip" [[typeinfo=208]] 762: AST_Const 2 1213: AST_SEQ [775] [1208] [[typeinfo=-1]] 775: AST_AssignTo [767] [780] [[typeinfo=203]] 767: AST_IndirectThrough [771] [[typeinfo=203]] 771: AST_TAG "ip" [[typeinfo=208]] 780: AST_Const 2 1208: AST_SEQ [793] [1203] [[typeinfo=-1]] 793: AST_AssignTo [785] [798] [[typeinfo=203]] 785: AST_IndirectThrough [789] [[typeinfo=203]] 789: AST_TAG "ip" [[typeinfo=208]] 798: AST_TAG "i" [[typeinfo=21]] 1203: AST_SEQ [816] [1198] [[typeinfo=-1]] 816: AST_AssignTo [811] [821] [[typeinfo=99]] 811: AST_Idx [802] [806] [[typeinfo=99]] 802: AST_TAG "ia" [[typeinfo=118]] 806: AST_Const 1 821: AST_Const 3 1198: AST_SEQ [840] [1193] [[typeinfo=-1]] 840: AST_AssignTo [835] [845] [[typeinfo=298]] 835: AST_Idx [826] [830] [[typeinfo=298]] 826: AST_TAG "iap" [[typeinfo=316]] 830: AST_Const 1 845: AST_AddressOf [849] [[typeinfo=-1]] 849: AST_TAG "i" [[typeinfo=-1]] 1193: AST_SEQ [867] [1188] [[typeinfo=-1]] 867: AST_AssignTo [862] [872] [[typeinfo=298]] 862: AST_Idx [853] [857] [[typeinfo=298]] 853: AST_TAG "iap" [[typeinfo=316]] 857: AST_Const 2 872: AST_TAG "ip" [[typeinfo=208]] 1188: AST_SEQ [894] [1183] [[typeinfo=-1]] 894: AST_AssignTo [876] [899] [[typeinfo=293]] 876: AST_IndirectThrough [889] [[typeinfo=293]] 889: AST_Idx [880] [884] [[typeinfo=298]] 880: AST_TAG "iap" [[typeinfo=316]] 884: AST_Const 1 899: AST_Const 4 1183: AST_SEQ [917] [1178] [[typeinfo=-1]] 917: AST_AssignTo [912] [922] [[typeinfo=339]] 912: AST_Member [904] [908] [[typeinfo=339]] 904: AST_TAG "st1" [[typeinfo=516]] 908: AST_TAG "i" [[typeinfo=339]] 922: AST_TAG "i" [[typeinfo=21]] 1178: AST_SEQ [939] [1173] [[typeinfo=-1]] 939: AST_AssignTo [934] [944] [[typeinfo=448]] 934: AST_Member [926] [930] [[typeinfo=448]] 926: AST_TAG "st1" [[typeinfo=516]] 930: AST_TAG "ip" [[typeinfo=448]] 944: AST_TAG "ip" [[typeinfo=208]] 1173: AST_SEQ [965] [1168] [[typeinfo=-1]] 965: AST_AssignTo [948] [970] [[typeinfo=443]] 948: AST_IndirectThrough [960] [[typeinfo=443]] 960: AST_Member [952] [956] [[typeinfo=448]] 952: AST_TAG "st1" [[typeinfo=516]] 956: AST_TAG "ip" [[typeinfo=448]] 970: AST_TAG "i" [[typeinfo=21]] 1168: AST_SEQ [978] [1163] [[typeinfo=-1]] 978: AST_AssignTo [974] [992] [[typeinfo=21]] 974: AST_TAG "i" [[typeinfo=21]] 992: AST_Idx [983] [987] [[typeinfo=99]] 983: AST_TAG "ia" [[typeinfo=118]] 987: AST_Const 2 1163: AST_SEQ [1011] [1158] [[typeinfo=-1]] 1011: AST_AssignTo [1006] [1025] [[typeinfo=99]] 1006: AST_Idx [997] [1001] [[typeinfo=99]] 997: AST_TAG "ia" [[typeinfo=118]] 1001: AST_Const 3 1025: AST_Idx [1016] [1020] [[typeinfo=99]] 1016: AST_TAG "ia" [[typeinfo=118]] 1020: AST_Const 4 1158: AST_SEQ [1043] [1153] [[typeinfo=-1]] 1043: AST_AssignTo [1038] [1048] [[typeinfo=339]] 1038: AST_Member [1030] [1034] [[typeinfo=339]] 1030: AST_TAG "st1" [[typeinfo=516]] 1034: AST_TAG "i" [[typeinfo=339]] 1048: AST_TAG "i" [[typeinfo=21]] 1153: AST_SEQ [1075] [1148] [[typeinfo=-1]] 1075: AST_AssignTo [1065] [1080] [[typeinfo=365]] 1065: AST_Idx [1070] [1060] [[typeinfo=365]] 1070: AST_Member [1052] [1056] [[typeinfo=384]] 1052: AST_TAG "st1" [[typeinfo=516]] 1056: AST_TAG "ia" [[typeinfo=384]] 1060: AST_Const 3 1080: AST_TAG "i" [[typeinfo=21]] 1148: AST_SEQ [1088] [1143] [[typeinfo=-1]] 1088: AST_AssignTo [1084] [1093] [[typeinfo=596]] 1084: AST_TAG "stp" [[typeinfo=596]] 1093: AST_AddressOf [1106] [[typeinfo=-1]] 1106: AST_Idx [1097] [1101] [[typeinfo=547]] 1097: AST_TAG "sta" [[typeinfo=567]] 1101: AST_Const 5 1143: AST_SEQ [1124] [1138] [[typeinfo=-1]] 1124: AST_AssignTo [1119] [1129] [[typeinfo=339]] 1119: AST_Ptr [1111] [1115] [[typeinfo=339]] 1111: AST_TAG "stp" [[typeinfo=596]] 1115: AST_TAG "i" [[typeinfo=339]] 1129: AST_TAG "i" [[typeinfo=21]] 1138: AST_ReturnResult [1133] -1 [[typeinfo=-1]] 1133: AST_Const 0