| 933 | } |
| 934 | |
| 935 | void Debugger::PushDownPreHook(Node * node, VirtTupleLL * tuple, AdapterRef * adapter, EntryPoint entry, bool deleted) |
| 936 | { |
| 937 | if (globals_.TypedValueVMT == nullptr |
| 938 | && tuple->Data.Items.Size > 0) { |
| 939 | globals_.TypedValueVMT = tuple->Data.Items.Head->Next->Item.Value.VMT; |
| 940 | } |
| 941 | |
| 942 | ServerThreadReentry(); |
| 943 | auto reason = deleted ? BreakpointReason::NodePushDownTupleDelete : BreakpointReason::NodePushDownTuple; |
| 944 | PushFrame({ reason, node, nullptr, 0, &tuple->Data, nullptr }); |
| 945 | |
| 946 | #if defined(DUMP_TRACEPOINTS) |
| 947 | Debug("PushDown(Node %d)", node->Id); |
| 948 | #endif |
| 949 | ConditionalBreakpointInServerThread( |
| 950 | node, |
| 951 | BreakpointManager::MakeNodeBreakpointId(node->Id), |
| 952 | BreakOnPushDown, |
| 953 | GlobalBreakOnPushDown); |
| 954 | |
| 955 | hasLastQueryInfo_ = false; |
| 956 | } |
| 957 | |
| 958 | void Debugger::PushDownPostHook(Node * node, VirtTupleLL * tuple, AdapterRef * adapter, EntryPoint entry, bool deleted) |
| 959 | { |