From f3fc7558bb425c4bd59b55527d2fafaa744fe0aa Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 30 Nov 2024 15:34:35 -0500 Subject: Deprecate 'array ++= item' syntax --- compile.c | 21 ++++++--------------- test/arrays.tm | 6 +----- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/compile.c b/compile.c index 2e13a37a..8356fbb7 100644 --- a/compile.c +++ b/compile.c @@ -703,8 +703,7 @@ CORD compile_statement(env_t *env, ast_t *ast) if (update->rhs->tag == Int && is_numeric_type(non_optional(lhs_t))) { rhs = compile_int_to_type(env, update->rhs, lhs_t); } else if (!promote(env, update->rhs, &rhs, rhs_t, lhs_t)) { - if (!(lhs_t->tag == ArrayType && promote(env, update->rhs, &rhs, rhs_t, Match(lhs_t, ArrayType)->item_type))) - code_err(ast, "I can't do operations between %T and %T", lhs_t, rhs_t); + code_err(ast, "I can't do operations between %T and %T", lhs_t, rhs_t); } bool lhs_is_optional_num = (lhs_t->tag == OptionalType && Match(lhs_t, OptionalType)->type && Match(lhs_t, OptionalType)->type->tag == NumType); @@ -804,19 +803,11 @@ CORD compile_statement(env_t *env, ast_t *ast) return CORD_all(lhs, " = Texts(", lhs, ", ", rhs, ");"); } else if (lhs_t->tag == ArrayType) { CORD padded_item_size = CORD_asprintf("%ld", type_size(Match(lhs_t, ArrayType)->item_type)); - if (promote(env, update->rhs, &rhs, rhs_t, Match(lhs_t, ArrayType)->item_type)) { - // arr ++= item - if (update->lhs->tag == Var) - return CORD_all("Array$insert(&", lhs, ", stack(", rhs, "), I(0), ", padded_item_size, ");"); - else - return CORD_all(lhs, "Array$concat(", lhs, ", Array(", rhs, "), ", padded_item_size, ");"); - } else { - // arr ++= [...] - if (update->lhs->tag == Var) - return CORD_all("Array$insert_all(&", lhs, ", ", rhs, ", I(0), ", padded_item_size, ");"); - else - return CORD_all(lhs, "Array$concat(", lhs, ", ", rhs, ", ", padded_item_size, ");"); - } + // arr ++= [...] + if (update->lhs->tag == Var) + return CORD_all("Array$insert_all(&", lhs, ", ", rhs, ", I(0), ", padded_item_size, ");"); + else + return CORD_all(lhs, "Array$concat(", lhs, ", ", rhs, ", ", padded_item_size, ");"); } else { code_err(ast, "'++=' is not implemented for %T types", lhs_t); } diff --git a/test/arrays.tm b/test/arrays.tm index 6f99f3f2..0d21ea1d 100644 --- a/test/arrays.tm +++ b/test/arrays.tm @@ -35,14 +35,10 @@ func main(): >> arr = [10, 20, 30, 40, 50, 60] - >> arr ++= 70 - >> arr - = [10, 20, 30, 40, 50, 60, 70] - do: >> arr := [10, 20] >> copy := arr - >> arr ++= 30 + >> arr ++= [30] >> arr = [10, 20, 30] >> copy -- cgit v1.2.3