From af2f5549c59a174eea54e3580c661c5bd293a9b2 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 18 Jul 2018 15:16:13 +0300 Subject: [PATCH] Debugger: Do not report division by zero also for rem --- .../src/org/jetbrains/eval4j/interpreter.kt | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/eval4j/src/org/jetbrains/eval4j/interpreter.kt b/eval4j/src/org/jetbrains/eval4j/interpreter.kt index 25dbf809cb6..722c6c23b05 100644 --- a/eval4j/src/org/jetbrains/eval4j/interpreter.kt +++ b/eval4j/src/org/jetbrains/eval4j/interpreter.kt @@ -232,7 +232,13 @@ class SingleInstructionInterpreter(private val eval: Eval) : Interpreter( } int(value1.int / divider) } - IREM -> int(value1.int % value2.int) + IREM -> { + val divider = value2.int + if (divider == 0) { + divisionByZero() + } + int(value1.int % divider) + } ISHL -> int(value1.int shl value2.int) ISHR -> int(value1.int shr value2.int) IUSHR -> int(value1.int ushr value2.int) @@ -250,7 +256,13 @@ class SingleInstructionInterpreter(private val eval: Eval) : Interpreter( } long(value1.long / divider) } - LREM -> long(value1.long % value2.long) + LREM -> { + val divider = value2.long + if (divider == 0L) { + divisionByZero() + } + long(value1.long % divider) + } LSHL -> long(value1.long shl value2.int) LSHR -> long(value1.long shr value2.int) LUSHR -> long(value1.long ushr value2.int) @@ -268,7 +280,13 @@ class SingleInstructionInterpreter(private val eval: Eval) : Interpreter( } float(value1.float / divider) } - FREM -> float(value1.float % value2.float) + FREM -> { + val divider = value2.float + if (divider == 0f) { + divisionByZero() + } + float(value1.float % divider) + } DADD -> double(value1.double + value2.double) DSUB -> double(value1.double - value2.double) @@ -280,7 +298,13 @@ class SingleInstructionInterpreter(private val eval: Eval) : Interpreter( } double(value1.double / divider) } - DREM -> double(value1.double % value2.double) + DREM -> { + val divider = value2.double + if (divider == 0.0) { + divisionByZero() + } + double(value1.double % divider) + } LCMP -> { val l1 = value1.long