diff --git a/src/sfall_opcodes.cc b/src/sfall_opcodes.cc index 73c2aee..5e7f77e 100644 --- a/src/sfall_opcodes.cc +++ b/src/sfall_opcodes.cc @@ -539,9 +539,13 @@ static void opGetArray(Program* program) // TODO: If type is string then do substr instead of array operation auto key = programStackPopValue(program); - auto arrayId = programStackPopInteger(program); - auto value = GetArray(arrayId, SFallScriptValue { key }); - programStackPushValue(program, value); + + auto arrayId = SFallScriptValue { programStackPopValue(program) }; + if (arrayId.isInt()) { + auto value = GetArray(arrayId.integerValue, SFallScriptValue { key }); + programStackPushValue(program, value); + } else { + } } // free_array diff --git a/src/sfall_script_value.cc b/src/sfall_script_value.cc index 8da8ca4..fa2d35b 100644 --- a/src/sfall_script_value.cc +++ b/src/sfall_script_value.cc @@ -18,7 +18,7 @@ SFallScriptValue::SFallScriptValue(Object* value) opcode = VALUE_TYPE_PTR; pointerValue = value; }; -SFallScriptValue::SFallScriptValue(ProgramValue& value) +SFallScriptValue::SFallScriptValue(const ProgramValue& value) { opcode = value.opcode; diff --git a/src/sfall_script_value.h b/src/sfall_script_value.h index b5a0ffd..05d6dcd 100644 --- a/src/sfall_script_value.h +++ b/src/sfall_script_value.h @@ -11,7 +11,7 @@ public: SFallScriptValue(); SFallScriptValue(int value); SFallScriptValue(Object* value); - SFallScriptValue(ProgramValue& value); + SFallScriptValue(const ProgramValue& value); bool isInt() const; bool isFloat() const;