fix suger_multiassin inner def or class

This commit is contained in:
lyon 2023-01-30 01:47:18 +08:00
parent d00e1f9158
commit 73b9effffd
5 changed files with 133 additions and 8 deletions

View File

@ -11,7 +11,7 @@
"program": "${workspaceFolder}/build/test/pikascript_test",
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
"args": [
// "--gtest_filter=vm.kw_no_empty"
// "--gtest_filter=socket.server_client"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",

View File

@ -1777,20 +1777,24 @@ exit:
return ast;
}
static int32_t Parser_getPyLineBlockDeepth(char* line) {
static int32_t _getSpaceNum(char* line) {
uint32_t size = strGetSize(line);
for (uint32_t i = 0; i < size; i++) {
if (line[i] != ' ') {
uint32_t spaceNum = i;
return i;
}
}
return 0;
}
static int32_t Parser_getPyLineBlockDeepth(char* line) {
int32_t spaceNum = _getSpaceNum(line);
if (0 == spaceNum % 4) {
return spaceNum / 4;
}
/* space Num is not 4N, error*/
return -1;
}
}
return 0;
}
char* Parser_removeAnnotation(char* line) {
uint8_t is_annotation_exit = 0;
@ -2221,6 +2225,7 @@ static char* Suger_multiAssign(Args* out_buffs, char* line) {
#endif
Args buffs = {0};
char* line_out = line;
int space_num = _getSpaceNum(line);
PIKA_BOOL is_assign = PIKA_FALSE;
Arg* stmt = arg_newStr("");
Arg* out_list = arg_newStr("");
@ -2257,6 +2262,11 @@ static char* Suger_multiAssign(Args* out_buffs, char* line) {
line_item =
strsFormat(&buffs, PIKA_LINE_BUFF_SIZE, "$tmp= %s\n", arg_getStr(stmt));
/* add space */
for (int i = 0; i < space_num; i++) {
line_out_arg = arg_strAppend(line_out_arg, " ");
}
line_out_arg = arg_strAppend(line_out_arg, line_item);
out_list_str = arg_getStr(out_list);
@ -2267,9 +2277,17 @@ static char* Suger_multiAssign(Args* out_buffs, char* line) {
}
char* line_item = strsFormat(&buffs, PIKA_LINE_BUFF_SIZE,
"%s = $tmp[%d]\n", item, out_num);
/* add space */
for (int i = 0; i < space_num; i++) {
line_out_arg = arg_strAppend(line_out_arg, " ");
}
line_out_arg = arg_strAppend(line_out_arg, line_item);
out_num++;
}
/* add space */
for (int i = 0; i < space_num; i++) {
line_out_arg = arg_strAppend(line_out_arg, " ");
}
line_out_arg = arg_strAppend(line_out_arg, "del $tmp");
line_out = strsCopy(out_buffs, arg_getStr(line_out_arg));

View File

@ -180,6 +180,27 @@ TEST(module, unittest_test2) {
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(module, unittest_test3) {
/* init */
pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
extern unsigned char pikaModules_py_a[];
obj_linkLibrary(pikaMain, pikaModules_py_a);
/* run */
__platform_printf("BEGIN\r\n");
pikaVM_runSingleFile(pikaMain, "test/python/unittest/test3.py");
/* collect */
int testsRun = obj_getInt(pikaMain, "res.testsRun");
int errorsNum = obj_getInt(pikaMain, "res.errorsNum");
/* assert */
EXPECT_EQ(testsRun, 1);
EXPECT_EQ(errorsNum, 0);
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}
#endif
TEST(socket, gethostname) {

View File

@ -5138,6 +5138,55 @@ TEST(parser, syntex_issue_l1l2) {
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(parser, syntex_issue_12ojd) {
pikaMemInfo.heapUsedMax = 0;
Args* buffs = New_strBuff();
char* lines =
"class Test:\n"
" def test(self):\n"
" a, b = c\n";
printf("%s\r\n", lines);
char* pikaAsm = Parser_linesToAsm(buffs, lines);
printf("%s", pikaAsm);
EXPECT_STREQ(pikaAsm,
"B0\n"
"0 CLS Test()\n"
"0 JMP 1\n"
"B1\n"
"0 RUN TinyObj\n"
"0 OUT self\n"
"B1\n"
"0 RAS self\n"
"B1\n"
"0 DEF test(self)\n"
"0 JMP 1\n"
"B2\n"
"0 REF c\n"
"0 OUT $tmp\n"
"B2\n"
"1 REF $tmp\n"
"1 NUM 0\n"
"0 SLC \n"
"0 OUT a\n"
"B2\n"
"1 REF $tmp\n"
"1 NUM 1\n"
"0 SLC \n"
"0 OUT b\n"
"B2\n"
"0 DEL $tmp\n"
"B2\n"
"0 RET \n"
"B1\n"
"0 RAS $origin\n"
"B1\n"
"0 NEW self\n"
"0 RET \n"
"B0\n");
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}
#endif
TEST_END

View File

@ -0,0 +1,37 @@
import socket
import random
import unittest
class TestUnittestAssertions(unittest.TestCase):
def testSocket(self):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 9999 + random.randint(0, 1000) + 1
print("port:", port)
server.bind((host, port))
server.listen(5)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
accept, addr = server.accept()
self.assertEqual(addr, "127.0.0.1")
print("recv from client: %s" % str(addr))
client.send("send test from client".encode())
print("server recv:", accept.recv(1024).decode())
accept.send("send test from server".encode())
print("client recv:", client.recv(1024).decode())
accept.close()
client.close()
server.close()
suit = unittest.TestSuite("test1")
suit.addTest(TestUnittestAssertions())
runner = unittest.TextTestRunner()
res = runner.run(suit)