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 1111 "program" : " ${workspaceFolder}/build/test/pikascript_test" ,
1212 // "program": "${workspaceFolder }/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
1313 "args" : [
14- // "--gtest_filter=pikaMain.list_iter "
14+ " --gtest_filter=pikaMain.big_bytes "
1515 ],
1616 "stopAtEntry" : false ,
1717 "cwd" : " ${workspaceFolder}" ,
Original file line number Diff line number Diff line change @@ -1890,4 +1890,17 @@ TEST(pikaMain, int_from_bytes) {
18901890 /* deinit */
18911891 obj_deinit (self);
18921892 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) {
4040 stack -> stack_size_array =
4141 arg_setContent (NULL , NULL , PIKA_STACK_BUFF_SIZE / 4 );
4242 stack_reset (stack );
43+ stack -> stack_totle_size = PIKA_STACK_BUFF_SIZE ;
4344 return 0 ;
4445};
4546
@@ -60,6 +61,19 @@ int32_t stack_deinit(Stack* stack) {
6061}
6162
6263void 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+ }
6377 __platform_memcpy (stack -> sp , content , size );
6478 stack -> sp += size ;
6579}
Original file line number Diff line number Diff line change @@ -35,6 +35,7 @@ typedef struct Stack_t {
3535 uint8_t * sp ;
3636 int16_t * sp_size ;
3737 int16_t top ;
38+ size_t stack_totle_size ;
3839} Stack ;
3940
4041int32_t stack_deinit (Stack * stack );
You can’t perform that action at this time.
0 commit comments