| 213 | // SimNode_TryCatch |
| 214 | |
| 215 | vec4f WIN_EH_NO_ASAN SimNode_TryCatch::eval ( Context & context ) { |
| 216 | DAS_PROFILE_NODE |
| 217 | auto aa = context.abiArg; auto acm = context.abiCMRES; |
| 218 | char * EP, * SP; |
| 219 | context.stack.watermark(EP,SP); |
| 220 | #if DAS_ENABLE_EXCEPTIONS |
| 221 | try { |
| 222 | try_block->eval(context); |
| 223 | } catch ( const dasException & ) { |
| 224 | context.abiArg = aa; |
| 225 | context.abiCMRES = acm; |
| 226 | context.stack.pop(EP,SP); |
| 227 | context.stopFlags = 0; |
| 228 | context.last_exception = context.exception; |
| 229 | context.exception = nullptr; |
| 230 | catch_block->eval(context); |
| 231 | } |
| 232 | #else |
| 233 | jmp_buf ev; |
| 234 | jmp_buf * JB = context.throwBuf; |
| 235 | context.throwBuf = &ev; |
| 236 | if ( !setjmp(ev) ) { |
| 237 | try_block->eval(context); |
| 238 | } else { |
| 239 | context.throwBuf = JB; |
| 240 | context.abiArg = aa; |
| 241 | context.abiCMRES = acm; |
| 242 | context.stack.pop(EP,SP); |
| 243 | context.stopFlags = 0; |
| 244 | context.last_exception = context.exception; |
| 245 | context.exception = nullptr; |
| 246 | catch_block->eval(context); |
| 247 | } |
| 248 | context.throwBuf = JB; |
| 249 | #endif |
| 250 | return v_zero(); |
| 251 | } |
| 252 | |
| 253 | #if DAS_DEBUGGER |
| 254 | vec4f WIN_EH_NO_ASAN SimNodeDebug_TryCatch::eval ( Context & context ) { |
no test coverage detected