Skip to content

Commit

Permalink
GDScript: Don't optimize division and modulo on debug
Browse files Browse the repository at this point in the history
Since the validated operators don't have checks for division by zero,
use the regular evaluator in debug which has those checks.
  • Loading branch information
vnen committed Oct 18, 2023
1 parent 7f884b4 commit 08e3f30
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions modules/gdscript/gdscript_vm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,14 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
uint32_t op_signature = _code_ptr[ip + 5];
uint32_t actual_signature = (a->get_type() << 8) | (b->get_type());

#ifdef DEBUG_ENABLED
if (op == Variant::OP_DIVIDE || op == Variant::OP_MODULE) {
// Don't optimize division and modulo since there's not check for division by zero with validated calls.
op_signature = 0xFFFF;
_code_ptr[ip + 5] = op_signature;
}
#endif

// Check if this is the first run. If so, store the current signature for the optimized path.
if (unlikely(op_signature == 0)) {
static Mutex initializer_mutex;
Expand Down

0 comments on commit 08e3f30

Please sign in to comment.