File tree Expand file tree Collapse file tree 4 files changed +30
-2
lines changed Expand file tree Collapse file tree 4 files changed +30
-2
lines changed Original file line number Diff line number Diff line change 11
11
"program" : " ${workspaceFolder}/build/test/pikascript_test" ,
12
12
// "program": "${workspaceFolder }/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
13
13
"args" : [
14
- // "--gtest_filter=pikaMain.list_iter "
14
+ " --gtest_filter=pikaMain.big_bytes "
15
15
],
16
16
"stopAtEntry" : false ,
17
17
"cwd" : " ${workspaceFolder}" ,
Original file line number Diff line number Diff line change @@ -1890,4 +1890,17 @@ TEST(pikaMain, int_from_bytes) {
1890
1890
/* deinit */
1891
1891
obj_deinit (self);
1892
1892
EXPECT_EQ (pikaMemNow (), 0 );
1893
- }
1893
+ }
1894
+
1895
+ // TEST(pikaMain, big_bytes) {
1896
+ // /* init */
1897
+ // pikaMemInfo.heapUsedMax = 0;
1898
+ // /* run */
1899
+ // PikaObj* self = newRootObj("pikaMain", New_PikaMain);
1900
+ // __platform_printf("BEGIN\r\n");
1901
+ // obj_run(self, "b = bytes(8192)\n");
1902
+ // /* assert */
1903
+ // /* deinit */
1904
+ // obj_deinit(self);
1905
+ // EXPECT_EQ(pikaMemNow(), 0);
1906
+ // }
Original file line number Diff line number Diff line change @@ -40,6 +40,7 @@ int32_t stack_init(Stack* stack) {
40
40
stack -> stack_size_array =
41
41
arg_setContent (NULL , NULL , PIKA_STACK_BUFF_SIZE / 4 );
42
42
stack_reset (stack );
43
+ stack -> stack_totle_size = PIKA_STACK_BUFF_SIZE ;
43
44
return 0 ;
44
45
};
45
46
@@ -60,6 +61,19 @@ int32_t stack_deinit(Stack* stack) {
60
61
}
61
62
62
63
void stack_pushPyload (Stack * stack , Arg * content , size_t size ) {
64
+ size_t stack_size_after_push =
65
+ size + (stack -> sp - arg_getContent (stack -> stack_pyload ));
66
+ if (stack_size_after_push > stack -> stack_totle_size ) {
67
+ __platform_printf (
68
+ "OverflowError: pika VM stack overflow, please use bigger "
69
+ "PIKA_STACK_BUFF_SIZE\r\n" );
70
+ __platform_printf ("Info: stack size request: %d\r\n" ,
71
+ stack_size_after_push );
72
+ __platform_printf ("Info: stack size now: %d\r\n" ,
73
+ stack -> stack_totle_size );
74
+ while (1 ) {
75
+ }
76
+ }
63
77
__platform_memcpy (stack -> sp , content , size );
64
78
stack -> sp += size ;
65
79
}
Original file line number Diff line number Diff line change @@ -35,6 +35,7 @@ typedef struct Stack_t {
35
35
uint8_t * sp ;
36
36
int16_t * sp_size ;
37
37
int16_t top ;
38
+ size_t stack_totle_size ;
38
39
} Stack ;
39
40
40
41
int32_t stack_deinit (Stack * stack );
You can’t perform that action at this time.
0 commit comments