diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2022-02-09 17:06:41 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2022-02-09 17:06:41 +0000 |
commit | 36e45dfccb5e5321682c0ec24dead22cf40fcb16 (patch) | |
tree | 5b51a2f46d50c4ae2ae93e94bf337ca9af2f4348 /eval.c | |
parent | e195d66a333102924bae452ba09dc20cba4e96e6 (diff) |
Make the array type a tiny bit smaller, by packing control information into a bit array
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 22 |
1 files changed, 11 insertions, 11 deletions
@@ -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); |