From 4d00974f2cb14d61650e97ec5e8ba6a1ac6c9479 Mon Sep 17 00:00:00 2001 From: PaddiM8 Date: Fri, 7 Jan 2022 01:24:19 +0100 Subject: [PATCH] Switch to one-based indexing --- kalk/src/interpreter.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/kalk/src/interpreter.rs b/kalk/src/interpreter.rs index 6343115..e6a6875 100644 --- a/kalk/src/interpreter.rs +++ b/kalk/src/interpreter.rs @@ -593,7 +593,11 @@ fn eval_indexer( } let index_value = eval_expr(context, &indexes[0], unit)?.to_f64() as usize; - if let Some(value) = values.get(index_value) { + if index_value == 0 { + return Err(CalcError::ItemOfIndexDoesNotExist(vec![index_value])); + } + + if let Some(value) = values.get(index_value - 1) { Ok(value.clone()) } else { Err(CalcError::ItemOfIndexDoesNotExist(vec![index_value])) @@ -606,8 +610,15 @@ fn eval_indexer( let row_index = eval_expr(context, &indexes[0], unit)?.to_f64() as usize; let column_index = eval_expr(context, &indexes[1], unit)?.to_f64() as usize; - if let Some(row) = rows.get(row_index) { - if let Some(value) = row.get(column_index) { + if row_index == 0 || column_index == 0 { + return Err(CalcError::ItemOfIndexDoesNotExist(vec![ + row_index, + column_index, + ])); + } + + if let Some(row) = rows.get(row_index - 1) { + if let Some(value) = row.get(column_index - 1) { return Ok(value.clone()); } }