From ff3618bd2b62a6815780f0a941411dad39ae47b9 Mon Sep 17 00:00:00 2001 From: Will Date: Sat, 23 Dec 2023 13:48:01 +0000 Subject: [PATCH] Fix unreachable string & number branches in `compileExprIndexExpr` --- Compiler/src/Compiler.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Compiler/src/Compiler.cpp b/Compiler/src/Compiler.cpp index 4363a74c..fe55f2f1 100644 --- a/Compiler/src/Compiler.cpp +++ b/Compiler/src/Compiler.cpp @@ -1978,11 +1978,10 @@ struct Compiler { RegScope rs(this); - Constant cv = getConstant(expr->index); - - if (cv.type == Constant::Type_Number && cv.valueNumber >= 1 && cv.valueNumber <= 256 && double(int(cv.valueNumber)) == cv.valueNumber) + if (AstExprConstantNumber* number = expr->index->as(); + number && number->value >= 1 && number->value <= 256 && double(int(number->value)) == number->value) { - uint8_t i = uint8_t(int(cv.valueNumber) - 1); + uint8_t i = uint8_t(int(number->value) - 1); uint8_t rt = compileExprAuto(expr->expr, rs); @@ -1990,9 +1989,9 @@ struct Compiler bytecode.emitABC(LOP_GETTABLEN, target, rt, i); } - else if (cv.type == Constant::Type_String) + else if (AstExprConstantString* string = expr->index->as()) { - BytecodeBuilder::StringRef iname = sref(cv.getString()); + BytecodeBuilder::StringRef iname = sref(string->value); int32_t cid = bytecode.addConstantString(iname); if (cid < 0) CompileError::raise(expr->location, "Exceeded constant limit; simplify the code to compile");