entry_label_(),
start_label_(),
success_label_(),
+ backtrack_label_(),
exit_label_(),
self_(Heap::undefined_value()) {
__ jmp(&entry_label_); // We'll write the entry code later.
entry_label_.Unuse();
start_label_.Unuse();
success_label_.Unuse();
+ backtrack_label_.Unuse();
exit_label_.Unuse();
check_preempt_label_.Unuse();
}
__ pop(esi);
__ ret(0);
+ // Backtrack code (branch target for conditional backtracks).
+ if (backtrack_label_.is_linked()) {
+ __ bind(&backtrack_label_);
+ Backtrack();
+ }
+
// Preempt-code
if (check_preempt_label_.is_linked()) {
__ bind(&check_preempt_label_);
return;
}
if (to == NULL) {
- Label skip;
- __ j(NegateCondition(condition), &skip);
- Backtrack();
- __ bind(&skip);
+ __ j(condition, &backtrack_label_);
return;
}
__ j(condition, to);