From 36e45dfccb5e5321682c0ec24dead22cf40fcb16 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Wed, 9 Feb 2022 17:06:41 +0000 Subject: Make the array type a tiny bit smaller, by packing control information into a bit array --- eval.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index ea7e84f..aa74698 100644 --- a/eval.c +++ b/eval.c @@ -113,9 +113,9 @@ retry: int guardOK = 1; if(stmt->toks[0]->tag != ArrayTag) guardOK = 0; - else if(stmt->toks[0]->array->size != 1) + else if(GetSize(stmt->toks[0]->array) != 1) guardOK = 0; - else if(stmt->toks[0]->array->type != AtypeInt) + else if(GetType(stmt->toks[0]->array) != AtypeInt) guardOK = 0; else if(stmt->toks[0]->array->intdata[0] != 0 && stmt->toks[0]->array->intdata[0] != 1) guardOK = 0; @@ -161,13 +161,13 @@ lookup(Datum *var) Datum * strand(Datum *left, Datum *right) { - traceprint("Stranding (%d %d)\n", left->array->stranded, right->array->stranded); + traceprint("Stranding (%d %d)\n", GetStrand(left->array), GetStrand(right->array)); Datum *result = allocdatum(ArrayTag, 0); - Array *leftarr = left->array->stranded ? fnSame(left->array) : fnEnclose(left->array); - Array *rightarr = right->array->stranded ? fnSame(right->array) : fnEnclose(right->array); + Array *leftarr = GetStrand(left->array) ? fnSame(left->array) : fnEnclose(left->array); + Array *rightarr = GetStrand(right->array) ? fnSame(right->array) : fnEnclose(right->array); Array *tmp = fnCatenateFirst(leftarr, rightarr); result->array = simplifyarray(tmp); - result->array->stranded = 1; + SetStrand(result->array, 1); freearray(tmp); freearray(leftarr); freearray(rightarr); @@ -207,7 +207,7 @@ parens(Datum *left, Datum *right) Datum *result = eval(&left->stmt, 1); incdatumref(result); if(result->tag == ArrayTag) - result->array->stranded = 0; + SetStrand(result->array, 0); result->shy = 0; return result; /* TODO handle error if ntoks != 1 */ } @@ -263,12 +263,12 @@ assign(Datum *left, Datum *right) symbol->value = right; incdatumref(right); if(symbol->value->tag == ArrayTag) - symbol->value->array->stranded = 0; + SetStrand(symbol->value->array, 0); } }else{ if(right->tag != ArrayTag) throwerror(nil, ESyntax); - if(right->array->rank != 1 && right->array->rank != 0) + if(GetRank(right->array) != 1 && GetRank(right->array) != 0) throwerror(nil, ERank); int nlocs = 0; @@ -297,12 +297,12 @@ assign(Datum *left, Datum *right) } } - if(right->array->rank == 1 && right->array->size != nlocs) + if(GetRank(right->array) == 1 && GetSize(right->array) != nlocs) throwerror(nil, ELength); for(int i = 0; i < nlocs; i++){ Datum *item; - if(right->array->rank == 0) + if(GetRank(right->array) == 0) item = right; else{ item = allocdatum(ArrayTag, 0); -- cgit v1.2.3