diff --git a/port/linux/.vscode/launch.json b/port/linux/.vscode/launch.json index 7927ff9dd..da9cc38b7 100644 --- a/port/linux/.vscode/launch.json +++ b/port/linux/.vscode/launch.json @@ -11,7 +11,7 @@ "program": "${workspaceFolder}/build/test/pikascript_test", // "program": "${workspaceFolder}/../build/src/boot/demo06-pikamain/pikascript_demo06-pikamain", "args": [ - "--gtest_filter=pikaMain.list_for_loop" + // "--gtest_filter=pikaMain.list_for_loop" // "--gtest_filter=pikaMain.err_scop" // "--gtest_filter=VM.a_jjcc" // "--gtest_filter=VM.a_1_1d1" diff --git a/port/linux/test/pikaMain-test.cpp b/port/linux/test/pikaMain-test.cpp index 6ffb0d0f8..f558f4729 100644 --- a/port/linux/test/pikaMain-test.cpp +++ b/port/linux/test/pikaMain-test.cpp @@ -127,7 +127,6 @@ TEST(pikaMain, a_signed) { EXPECT_EQ(pikaMemNow(), 0); } - TEST(pikaMain, a_mm) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -240,9 +239,7 @@ TEST(pikaMain, err_scop) { pikaMemInfo.heapUsedMax = 0; PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); /* run */ - obj_run(pikaMain, (char*) - "print('test'" - ); + obj_run(pikaMain, (char*)"print('test'"); /* collect */ /* assert */ @@ -252,17 +249,14 @@ TEST(pikaMain, err_scop) { EXPECT_EQ(pikaMemNow(), 0); } - TEST(pikaMain, __init__) { /* init */ pikaMemInfo.heapUsedMax = 0; PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); /* run */ - obj_run(pikaMain, (char*) - "pin = PikaStdDevice.GPIO()\n" - ); + obj_run(pikaMain, (char*)"pin = PikaStdDevice.GPIO()\n"); /* collect */ - char* a = obj_getStr(pikaMain, (char *)"pin.pin"); + char* a = obj_getStr(pikaMain, (char*)"pin.pin"); /* assert */ EXPECT_STREQ(a, "PA0"); @@ -271,7 +265,7 @@ TEST(pikaMain, __init__) { EXPECT_EQ(pikaMemNow(), 0); } -TEST(pikaMain, PikaStdData){ +TEST(pikaMain, PikaStdData) { /* init */ pikaMemInfo.heapUsedMax = 0; PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); @@ -285,8 +279,8 @@ TEST(pikaMain, PikaStdData){ "b = dict.get('b')\n" ); /* collect */ - int a = obj_getInt(pikaMain, (char *)"a"); - int b = obj_getInt(pikaMain, (char *)"b"); + int a = obj_getInt(pikaMain, (char*)"a"); + int b = obj_getInt(pikaMain, (char*)"b"); /* assert */ EXPECT_EQ(a, 1); EXPECT_EQ(b, 0); @@ -296,35 +290,65 @@ TEST(pikaMain, PikaStdData){ EXPECT_EQ(pikaMemNow(), 0); } -// TEST(pikaMain, list_for_loop) { -// /* init */ -// pikaMemInfo.heapUsedMax = 0; -// PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); -// /* run */ -// Parameters* globals = -// obj_runDirect(pikaMain, (char*) -// "list = PikaStdData.List()\n" -// "list.append(7)\n" -// "list.append('eee')\n" -// "len = list.len()\n" -// "a1 = list.get(0)\n" -// "a2 = list.get(1)\n" -// "for item in list:\n" -// " print(item)\n" -// "\n" -// ); -// /* collect */ -// int len = obj_getInt(globals, (char*)"len"); -// int a1 = obj_getInt(globals, (char*)"a1"); -// char* a2 = obj_getStr(globals, (char*)"a2"); -// // -// /* assert */ -// EXPECT_EQ(len, 2); -// EXPECT_EQ(a1, 7); -// EXPECT_STREQ(a2, "eee"); -// // -// /* deinit */ -// // obj_deinit(globals); -// obj_deinit(pikaMain); -// EXPECT_EQ(pikaMemNow(), 0); -// } \ No newline at end of file +TEST(pikaMain, iter) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); + /* run */ + Parameters* globals = + obj_runDirect(pikaMain, (char*) + "list = PikaStdData.List()\n" + "list.append(7)\n" + "list.append('eee')\n" + "len = list.len()\n" + "a1 = list.get(0)\n" + "a2 = list.get(1)\n" + "res = iter(list)\n" + "\n" + ); + /* collect */ + int len = obj_getInt(globals, (char*)"len"); + int a1 = obj_getInt(globals, (char*)"a1"); + char* a2 = obj_getStr(globals, (char*)"a2"); + /* assert */ + EXPECT_EQ(len, 2); + EXPECT_EQ(a1, 7); + EXPECT_STREQ(a2, "eee"); + /* deinit */ + // obj_deinit(globals); + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} + + // TEST(pikaMain, list_for_loop) { + // /* init */ + // pikaMemInfo.heapUsedMax = 0; + // PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); + // /* run */ + // Parameters* globals = + // obj_runDirect(pikaMain, (char*) + // "list = PikaStdData.List()\n" + // "list.append(7)\n" + // "list.append('eee')\n" + // "len = list.len()\n" + // "a1 = list.get(0)\n" + // "a2 = list.get(1)\n" + // "for item in list:\n" + // " print(item)\n" + // "\n" + // ); + // /* collect */ + // int len = obj_getInt(globals, (char*)"len"); + // int a1 = obj_getInt(globals, (char*)"a1"); + // char* a2 = obj_getStr(globals, (char*)"a2"); + // // + // /* assert */ + // EXPECT_EQ(len, 2); + // EXPECT_EQ(a1, 7); + // EXPECT_STREQ(a2, "eee"); + // // + // /* deinit */ + // // obj_deinit(globals); + // obj_deinit(pikaMain); + // EXPECT_EQ(pikaMemNow(), 0); + // } \ No newline at end of file diff --git a/src/PikaVM.c b/src/PikaVM.c index 37b0f8c2a..c587a3359 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -169,6 +169,10 @@ Arg* pikaVM_runInstruct(PikaObj* self, /* find in global list second */ arg = arg_copy(obj_getArg(globals, data)); } + ArgType arg_type = arg_getType(arg); + if(TYPE_OBJECT == arg_type){ + arg = arg_setType(arg, TYPE_POINTER); + } return arg; } if (instruct == EST) {