Skip to content

Commit db1942c

Browse files
fix Berry - add missing be_pop
1 parent b21ca34 commit db1942c

File tree

3 files changed

+104
-41
lines changed

3 files changed

+104
-41
lines changed

src/berry/be_run.c

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,23 +73,34 @@ bool berryRun(bvm *vm, const char *prog) {
7373
}
7474

7575
void berryRunClosure(bvm *vm, int closureId) {
76+
//int s1 = Berry_GetStackSizeCurrent();
7677
if (!be_getglobal(vm, "run_closure")) {
7778
return;
7879
}
7980
be_pushint(vm, closureId);
8081
// call run_closure(closureId)
8182
be_call(vm, 1);
83+
//int s2 = Berry_GetStackSizeCurrent();
84+
be_pop(vm, 2);
85+
//int s3 = Berry_GetStackSizeCurrent();
86+
//printf("%i %i %i\n", s1, s2, s3);
8287
}
8388
void berryRunClosureBytes(bvm *vm, int closureId, byte *data, int len) {
89+
//int s1 = Berry_GetStackSizeCurrent();
8490
if (!be_getglobal(vm, "run_closure")) {
8591
return;
8692
}
8793
be_pushint(vm, closureId);
8894
be_pushbytes(vm, data, len);
8995
// call run_closure(closureId)
9096
be_call(vm, 2);
97+
//int s2 = Berry_GetStackSizeCurrent();
98+
be_pop(vm, 3);
99+
//int s3 = Berry_GetStackSizeCurrent();
100+
//printf("%i %i %i\n", s1, s2, s3);
91101
}
92102
void berryRunClosureIntBytes(bvm *vm, int closureId, int x, const byte *data, int len) {
103+
//int s1 = Berry_GetStackSizeCurrent();
93104
if (!be_getglobal(vm, "run_closure")) {
94105
return;
95106
}
@@ -98,8 +109,13 @@ void berryRunClosureIntBytes(bvm *vm, int closureId, int x, const byte *data, in
98109
be_pushbytes(vm, data, len);
99110
// call run_closure(closureId)
100111
be_call(vm, 3);
112+
//int s2 = Berry_GetStackSizeCurrent();
113+
be_pop(vm, 4);
114+
//int s3 = Berry_GetStackSizeCurrent();
115+
//printf("%i %i %i\n", s1, s2, s3);
101116
}
102117
void berryRunClosureIntInt(bvm *vm, int closureId, int x, int y) {
118+
//int s1 = Berry_GetStackSizeCurrent();
103119
if (!be_getglobal(vm, "run_closure")) {
104120
return;
105121
}
@@ -108,29 +124,59 @@ void berryRunClosureIntInt(bvm *vm, int closureId, int x, int y) {
108124
be_pushint(vm, y);
109125
// call run_closure(closureId)
110126
be_call(vm, 3);
127+
//int s2 = Berry_GetStackSizeCurrent();
128+
be_pop(vm, 4);
129+
//int s3 = Berry_GetStackSizeCurrent();
130+
//printf("%i %i %i\n", s1, s2, s3);
131+
}
132+
void berryRunClosureInt(bvm *vm, int closureId, int x) {
133+
int s1 = Berry_GetStackSizeCurrent();
134+
if (!be_getglobal(vm, "run_closure")) {
135+
return;
136+
}
137+
be_pushint(vm, closureId);
138+
be_pushint(vm, x);
139+
be_call(vm, 2);
140+
//int s2 = Berry_GetStackSizeCurrent();
141+
be_pop(vm, 3);
142+
//int s3 = Berry_GetStackSizeCurrent();
143+
//printf("%i %i %i\n", s1, s2, s3);
111144
}
112145
void berryRunClosureStr(bvm *vm, int closureId, const char * x, const char * y) {
146+
//int s1 = Berry_GetStackSizeCurrent();
113147
if (!be_getglobal(vm, "run_closure")) {
114148
return;
115149
}
116150
// call run_closure(closureId)
117151
be_pushint(vm, closureId);
118152
be_pushstring(vm, x);
153+
//int s2;
119154
if (y) {
120155
be_pushstring(vm, y);
121156
be_call(vm, 3);
157+
//s2 = Berry_GetStackSizeCurrent();
158+
be_pop(vm, 4);
122159
}
123160
else {
124161
be_call(vm, 2);
162+
//s2 = Berry_GetStackSizeCurrent();
163+
be_pop(vm, 3);
125164
}
165+
//int s3 = Berry_GetStackSizeCurrent();
166+
//printf("%i %i %i\n", s1, s2, s3);
126167
}
127168
void berryRemoveClosure(bvm *vm, int closureId) {
169+
//int s1 = Berry_GetStackSizeCurrent();
128170
if (!be_getglobal(vm, "remove_closure")) {
129171
return;
130172
}
131173
be_pushint(vm, closureId);
132174
// call remove_closure(closureId)
133175
be_call(vm, 1);
176+
//int s2 = Berry_GetStackSizeCurrent();
177+
be_pop(vm, 2);
178+
//int s3 = Berry_GetStackSizeCurrent();
179+
//printf("%i %i %i\n", s1, s2, s3);
134180
}
135181

136182
void berryFreeAllClosures(bvm *vm) {

src/cmnds/cmd_berry.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void CMD_Berry_RunEventHandlers_IntInt(byte eventCode, int argument, int argumen
8686
} else if (t->wait.waitingForEvent == eventCode
8787
&& t->wait.waitingForRelation == 'm'
8888
&& t->wait.waitingForArgument == argument) {
89-
berryRunClosureIntInt(g_vm, t->closureId, argument2, 0);
89+
berryRunClosureInt(g_vm, t->closureId, argument2);
9090
}
9191
t = t->next;
9292
}
@@ -463,13 +463,20 @@ void Berry_StopScripts(int id) {
463463
t = t->next;
464464
}
465465
}
466-
int Berry_GetStackSize() {
466+
int Berry_GetStackSizeTotal() {
467467
if (g_vm) {
468468
int size = g_vm->stacktop - g_vm->stack; /* with debug enabled, stack increase may be negative */
469469
return size;
470470
}
471471
return 0;
472472
}
473+
int Berry_GetStackSizeCurrent() {
474+
if (g_vm) {
475+
int size = g_vm->top - g_vm->stack;
476+
return size;
477+
}
478+
return 0;
479+
}
473480

474481
void Berry_RunThreads(int deltaMS) {
475482
int c_sleep, c_run;

0 commit comments

Comments
 (0)