mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
support del keyword, use v1.10 version name
This commit is contained in:
parent
41a6d1c9f4
commit
7f77407550
@ -1,4 +1,3 @@
|
|||||||
sh api-make.sh
|
sh api-make.sh
|
||||||
sh only_make.sh
|
sh only_make.sh
|
||||||
cp ./build/boot/demo06-pikamain/pikascript_demo06-pikamain package/pikascript/pika
|
|
||||||
cp config/pika_config_default.h config/pika_config.h
|
cp config/pika_config_default.h config/pika_config.h
|
||||||
|
@ -1 +1,2 @@
|
|||||||
cd build && rm ./test/pikascript_test -f && ninja
|
cd build && rm ./test/pikascript_test -f && ninja
|
||||||
|
cd .. && cp ./build/boot/demo06-pikamain/pikascript_demo06-pikamain package/pikascript/pika
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
|
cp config/pika_config_void.h config/pika_config.h
|
||||||
|
sh only_make.sh
|
||||||
cd package/pikascript && \
|
cd package/pikascript && \
|
||||||
./pika $1
|
./pika $1
|
||||||
|
@ -1039,8 +1039,7 @@ TEST(VM, tuple_literal) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
TEST(VM, dvd_opt) {
|
TEST(VM, dvd_opt) {
|
||||||
char* line =
|
char* line = "a = 10%4\n";
|
||||||
"a = 10%4\n";
|
|
||||||
PikaObj* self = newRootObj("root", New_PikaStdLib_SysObj);
|
PikaObj* self = newRootObj("root", New_PikaStdLib_SysObj);
|
||||||
obj_run(self, line);
|
obj_run(self, line);
|
||||||
/* collect */
|
/* collect */
|
||||||
@ -1051,3 +1050,19 @@ TEST(VM, dvd_opt) {
|
|||||||
obj_deinit(self);
|
obj_deinit(self);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(VM, del_) {
|
||||||
|
char* line =
|
||||||
|
"a = 1\n"
|
||||||
|
"print(a)\n"
|
||||||
|
"del a\n"
|
||||||
|
"print(a)\n";
|
||||||
|
PikaObj* self = newRootObj("root", New_PikaStdLib_SysObj);
|
||||||
|
obj_run(self, line);
|
||||||
|
/* collect */
|
||||||
|
/* assert */
|
||||||
|
EXPECT_EQ(obj_isArgExist(self, "a"), 0);
|
||||||
|
/* deinit */
|
||||||
|
obj_deinit(self);
|
||||||
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
|
}
|
||||||
|
@ -3554,3 +3554,17 @@ TEST(parser, tuple1) {
|
|||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(parser, _del) {
|
||||||
|
pikaMemInfo.heapUsedMax = 0;
|
||||||
|
Args* buffs = New_strBuff();
|
||||||
|
char* lines = "del a\n";
|
||||||
|
__platform_printf("%s\n", lines);
|
||||||
|
char* pikaAsm = Parser_multiLineToAsm(buffs, lines);
|
||||||
|
__platform_printf("%s", pikaAsm);
|
||||||
|
EXPECT_STREQ(pikaAsm,
|
||||||
|
"B0\n"
|
||||||
|
"0 DEL a\n");
|
||||||
|
args_deinit(buffs);
|
||||||
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
|
}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
MajorVersion = "2"
|
MajorVersion = "1"
|
||||||
MinorVersion = "0"
|
MinorVersion = "10"
|
||||||
MicroVersion = "0"
|
MicroVersion = "0"
|
||||||
|
@ -943,8 +943,7 @@ void ParserState_beforeIter(struct ParserState* ps) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Parser_popToken(ps->buffs_p, ps->tokens);
|
Parser_popToken(ps->buffs_p, ps->tokens);
|
||||||
ps->last_token =
|
ps->last_token = arg_newStr(Parser_popToken(ps->buffs_p, ps->tokens));
|
||||||
arg_newStr(Parser_popToken(ps->buffs_p, ps->tokens));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PIKA_SYNTAX_SLICE_ENABLE
|
#if PIKA_SYNTAX_SLICE_ENABLE
|
||||||
@ -1830,6 +1829,13 @@ AST* AST_parseLine(char* line, Stack* block_stack) {
|
|||||||
AST_setThisNode(ast, "global", global_list);
|
AST_setThisNode(ast, "global", global_list);
|
||||||
goto block_matched;
|
goto block_matched;
|
||||||
}
|
}
|
||||||
|
if (strIsStartWith(line_start, "del ")) {
|
||||||
|
stmt = "";
|
||||||
|
char* del_dir = line_start + sizeof("del ") - 1;
|
||||||
|
del_dir = strsGetCleanCmd(&buffs, del_dir);
|
||||||
|
AST_setThisNode(ast, "del", del_dir);
|
||||||
|
goto block_matched;
|
||||||
|
}
|
||||||
if (strIsStartWith(line_start, (char*)"def ")) {
|
if (strIsStartWith(line_start, (char*)"def ")) {
|
||||||
stmt = "";
|
stmt = "";
|
||||||
char* declear = strsCut(&buffs, line_start, ' ', ':');
|
char* declear = strsCut(&buffs, line_start, ' ', ':');
|
||||||
@ -2476,6 +2482,15 @@ char* AST_toPikaASM(AST* ast, Args* outBuffs) {
|
|||||||
is_block_matched = 1;
|
is_block_matched = 1;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
if (obj_isArgExist(ast, "del")) {
|
||||||
|
/* parse stmt ast */
|
||||||
|
pikaAsm = AST_appandPikaASM(ast, ast, &buffs, pikaAsm);
|
||||||
|
pikaAsm = strsAppend(&buffs, pikaAsm, "0 DEL ");
|
||||||
|
pikaAsm = strsAppend(&buffs, pikaAsm, obj_getStr(ast, "del"));
|
||||||
|
pikaAsm = strsAppend(&buffs, pikaAsm, "\n");
|
||||||
|
is_block_matched = 1;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
if (obj_isArgExist(ast, "break")) {
|
if (obj_isArgExist(ast, "break")) {
|
||||||
/* parse stmt ast */
|
/* parse stmt ast */
|
||||||
pikaAsm = AST_appandPikaASM(ast, ast, &buffs, pikaAsm);
|
pikaAsm = AST_appandPikaASM(ast, ast, &buffs, pikaAsm);
|
||||||
|
12
src/PikaVM.c
12
src/PikaVM.c
@ -1133,8 +1133,7 @@ static Arg* VM_instruction_handler_JEZ(PikaObj* self,
|
|||||||
thisBlockDeepth = VMState_getBlockDeepthNow(vs);
|
thisBlockDeepth = VMState_getBlockDeepthNow(vs);
|
||||||
int jmp_expect = fast_atoi(data);
|
int jmp_expect = fast_atoi(data);
|
||||||
arg_newStackBuff(pika_assertArg_stack, PIKA_ARG_BUFF_SIZE);
|
arg_newStackBuff(pika_assertArg_stack, PIKA_ARG_BUFF_SIZE);
|
||||||
Arg* pika_assertArg =
|
Arg* pika_assertArg = stack_popArg(&(vs->stack), &pika_assertArg_stack);
|
||||||
stack_popArg(&(vs->stack), &pika_assertArg_stack);
|
|
||||||
int pika_assert = arg_getInt(pika_assertArg);
|
int pika_assert = arg_getInt(pika_assertArg);
|
||||||
arg_deinit(pika_assertArg);
|
arg_deinit(pika_assertArg);
|
||||||
vs->ireg[thisBlockDeepth] = !pika_assert;
|
vs->ireg[thisBlockDeepth] = !pika_assert;
|
||||||
@ -1585,9 +1584,18 @@ static Arg* VM_instruction_handler_DEL(PikaObj* self,
|
|||||||
VMState_delLReg(vs, reg_index);
|
VMState_delLReg(vs, reg_index);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (obj_isArgExist(vs->locals, data)) {
|
||||||
obj_removeArg(vs->locals, data);
|
obj_removeArg(vs->locals, data);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (obj_isArgExist(vs->globals, data)) {
|
||||||
|
obj_removeArg(vs->globals, data);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
VMState_setErrorCode(vs, PIKA_RES_ERR_OPERATION_FAILED);
|
||||||
|
__platform_printf("NameError: name '%s' is not defined\n", data);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static Arg* VM_instruction_handler_EST(PikaObj* self,
|
static Arg* VM_instruction_handler_EST(PikaObj* self,
|
||||||
VMState* vs,
|
VMState* vs,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#define PIKA_VERSION_MAJOR 2
|
#define PIKA_VERSION_MAJOR 1
|
||||||
#define PIKA_VERSION_MINOR 0
|
#define PIKA_VERSION_MINOR 10
|
||||||
#define PIKA_VERSION_MICRO 0
|
#define PIKA_VERSION_MICRO 0
|
||||||
|
|
||||||
#define PIKA_EDIT_TIME "2022/08/01 10:06:47"
|
#define PIKA_EDIT_TIME "2022/08/04 00:10:34"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user