diff --git a/port/linux/test/pikaMain-test.cpp b/port/linux/test/pikaMain-test.cpp index ce5ee1c6e..99b18faa0 100644 --- a/port/linux/test/pikaMain-test.cpp +++ b/port/linux/test/pikaMain-test.cpp @@ -1126,3 +1126,29 @@ TEST(pikaMain, class_def_print) { obj_deinit(self); EXPECT_EQ(pikaMemNow(), 0); } + +TEST(pikaMain, class_demo_1) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + /* run */ + PikaObj* self = newRootObj((char*)"pikaMain", New_PikaMain); + __platform_printf((char*)"BEGIN\r\n"); + obj_run(self, (char*) + "class MyClass:\n" + " i = 12345\n" + " def f(self):\n" + " return 'hello world'\n" + " \n" + "x = MyClass()\n" + " \n" + "print(x.i)\n" + "print(x.f())\n" + ); + /* assert */ + EXPECT_STREQ(log_buff[0], (char*)"hello world\r\n"); + EXPECT_STREQ(log_buff[1], (char*)"12345\r\n"); + EXPECT_STREQ(log_buff[2], (char*)"BEGIN\r\n"); + /* deinit */ + obj_deinit(self); + EXPECT_EQ(pikaMemNow(), 0); +} diff --git a/src/PikaParser.c b/src/PikaParser.c index c15c1388b..cc37fde8e 100644 --- a/src/PikaParser.c +++ b/src/PikaParser.c @@ -1441,8 +1441,15 @@ char* AST_toPikaASM(AST* ast, Args* outBuffs) { if (strEqu(obj_getStr(ast, "block"), "class")) { Args* buffs = New_strBuff(); char* declear = obj_getStr(ast, "declear"); - char* thisClass = strsGetFirstToken(buffs, declear, '('); - char* superClass = strsCut(buffs, declear, '(', ')'); + char* thisClass = NULL; + char* superClass = NULL; + if (strIsContain(declear, '(')) { + thisClass = strsGetFirstToken(buffs, declear, '('); + superClass = strsCut(buffs, declear, '(', ')'); + } else { + thisClass = declear; + superClass = ""; + } if (strEqu("", superClass)) { /* default superClass */ superClass = "PikaStdLib.PikaObj";