Skip to content

Commit

Permalink
Fixes #86
Browse files Browse the repository at this point in the history
FossilOrigin-Name: 9c3099ff5a311d4fa71612ceba3b14030aacf7581b102c2705e0a13b04e35fab
  • Loading branch information
pmacdona committed Dec 26, 2021
1 parent afe90f9 commit 86ee8b5
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
17 changes: 16 additions & 1 deletion src/jsiArray.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ static Jsi_RC jsi_ArrayPushCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_
return JSI_OK;
}
obj = _this->d.obj;
if (obj->modifying)
return Jsi_LogError("already modifying");

int argc = Jsi_ValueGetLength(interp, args);
int curlen = jsi_SizeOfArray(interp, obj);
Expand All @@ -47,6 +49,8 @@ static Jsi_RC jsi_ArrayPopCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_t
Jsi_Value *v;
Jsi_Obj *obj;
obj = _this->d.obj;
if (obj->modifying)
return Jsi_LogError("already modifying");
int i = jsi_SizeOfArray(interp, obj) - 1;

if (i < 0) {
Expand Down Expand Up @@ -760,6 +764,8 @@ static Jsi_RC jsi_ArrayShiftCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *
Jsi_Obj *obj = _this->d.obj;
Jsi_ObjListifyArray(interp, obj);
uint n = jsi_SizeOfArray(interp, obj);
if (obj->modifying)
return Jsi_LogError("already modifying");
if (n<=0) {
Jsi_ValueMakeUndef(interp, ret);
} else {
Expand All @@ -780,6 +786,8 @@ static Jsi_RC jsi_ArrayUnshiftCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value
return Jsi_LogError("expected array object");

Jsi_Obj *obj = _this->d.obj;
if (obj->modifying)
return Jsi_LogError("already modifying");
int argc = Jsi_ValueGetLength(interp, args);
int curlen = jsi_SizeOfArray(interp, obj);
if (argc <= 0) {
Expand Down Expand Up @@ -815,6 +823,8 @@ static Jsi_RC jsi_ArrayFillCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_
*start = Jsi_ValueArrayIndex(interp, args, 1),
*end = Jsi_ValueArrayIndex(interp, args, 2);
Jsi_Obj *obj = _this->d.obj;
if (obj->modifying)
return Jsi_LogError("already modifying");
n = jsi_SizeOfArray(interp, obj);

if (start) {
Expand Down Expand Up @@ -1037,7 +1047,6 @@ static Jsi_RC jsi_ArraySortCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_

Jsi_Obj *obj = _this->d.obj;
curlen = obj->arrCnt;

if (curlen <= 1) {
goto done;
}
Expand All @@ -1058,6 +1067,9 @@ static Jsi_RC jsi_ArraySortCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_
else
return Jsi_LogError("expected object or function");
}
if (obj->modifying)
return Jsi_LogError("already modifying");
obj->modifying = 1;
si.flags = flags;
Jsi_ObjListifyArray(interp, obj);
#ifdef NO_QSORT_R
Expand Down Expand Up @@ -1110,6 +1122,7 @@ static Jsi_RC jsi_ArraySortCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value *_
done:
v = Jsi_ValueMakeObject(interp, NULL, obj);
Jsi_ValueReplace(interp, ret, v);
obj->modifying = 0;
return JSI_OK;
}

Expand All @@ -1120,6 +1133,8 @@ static Jsi_RC jsi_ArraySpliceCmd(Jsi_Interp *interp, Jsi_Value *args, Jsi_Value
int newlen, argc, istart, n, rhowmany, ilen, curlen;
Jsi_Value *va, *start, *howmany;
Jsi_Obj *nobj, *obj = _this->d.obj;
if (obj->modifying)
return Jsi_LogError("already modifying");

start = Jsi_ValueArrayIndex(interp, args, 0);
howmany = Jsi_ValueArrayIndex(interp, args, 1);
Expand Down
3 changes: 2 additions & 1 deletion src/jsiInt.h
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,8 @@ struct Jsi_Obj {
uint freeze:1;
uint freezeNoModify:1;
uint freezeReadCheck:1;
uint unused2:13;
uint modifying:1;
uint unused2:12;
union { /* switched on by value of "ot" */
int val;
Jsi_Number num;
Expand Down

0 comments on commit 86ee8b5

Please sign in to comment.