Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix mislinking of phi operations on the error branch of 'invoke' |
---|---|
Timelines: | family | ancestors | descendants | both | notworking | kbk-refactor-callframe |
Files: | files | file ages | folders |
SHA3-256: |
407e1ef055bfeceffdc509a45e988175 |
User & Date: | kbk 2019-01-21 19:45:39.998 |
Context
2019-01-21
| ||
22:33 | Enough partial implementation for expandtest::test1-test3 check-in: 89030dcc42 user: kbk tags: notworking, kbk-refactor-callframe | |
19:45 | Fix mislinking of phi operations on the error branch of 'invoke' check-in: 407e1ef055 user: kbk tags: notworking, kbk-refactor-callframe | |
18:14 | Enough changes to get through first two 'expandtest' tests check-in: 5557b1e592 user: kbk tags: notworking, kbk-refactor-callframe | |
Changes
Changes to quadcode/varargs.tcl.
︙ | ︙ | |||
161 162 163 164 165 166 167 | } set cf [lindex $q2 1] $B emit [list extractCallFrame [$B maketemp "callframe"] [lindex $newq 1]] my debug-varargs { $B log-last } | | | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | } set cf [lindex $q2 1] $B emit [list extractCallFrame [$B maketemp "callframe"] [lindex $newq 1]] my debug-varargs { $B log-last } set cfin [lindex $newq 2] my va_ConvergeErrorPath $B $result $cf $cfin [lreplace $bb[set bb ""] 0 1] $B destroy return } |
︙ | ︙ | |||
224 225 226 227 228 229 230 231 232 233 234 235 236 237 | # # The command name being invoked, and the expected arguments, are always known # at this point. oo::define quadcode::transformer method va_PrepareArgs {B b pc q arginfo} { set argl [lassign $q opcode result cfin cmd] # Create the first part of the 'invoke' instruction. set iresult [my newVarInstance $result] set newq [list invoke $iresult $cfin $cmd] # Find out how many plain parameters (that is, not 'args') the | > | 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | # # The command name being invoked, and the expected arguments, are always known # at this point. oo::define quadcode::transformer method va_PrepareArgs {B b pc q arginfo} { set argl [lassign $q opcode result cfin cmd] set callee [lindex $cmd 1] # Create the first part of the 'invoke' instruction. set iresult [my newVarInstance $result] set newq [list invoke $iresult $cfin $cmd] # Find out how many plain parameters (that is, not 'args') the |
︙ | ︙ | |||
1095 1096 1097 1098 1099 1100 1101 | $B emit [list jump [list bb $finalb]] my debug-varargs { $B log-last } # Move to the error block, and emit a jump to the join point set errResult [$B gettemp "error"] | | > | 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 | $B emit [list jump [list bb $finalb]] my debug-varargs { $B log-last } # Move to the error block, and emit a jump to the join point set errResult [$B gettemp "error"] set errFail [$B maketemp "error"] $B buildin $errorb $B emit [list extractFail $errFail $errResult] my debug-varargs { $B log-last } $B emit [list jump [list bb $finalb]] my debug-varargs { $B log-last } # Move to the finalization block, and emit phis for the callframe # and the result puts "* cfin = $cfin" $B buildin $finalb $B emit [list phi $cf \ [list bb $errorb] $cfin [list bb $normb] $normcf] my debug-varargs { $B log-last } $B emit [list phi $result \ |
︙ | ︙ |