skip when default is given

This commit is contained in:
pikastech 2022-09-02 20:21:58 +08:00
parent 850976953b
commit 854bd2a6a4
4 changed files with 36 additions and 5 deletions

View File

@ -1312,4 +1312,25 @@ TEST(vm, cb_2) {
EXPECT_EQ(pikaMemNow(), 0);
}
#endif
#endif
TEST(vm, default_no_input) {
/* 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");
obj_run(pikaMain,
"def test(a = 1):\n"
" print(a)\n"
"test()"
);
/* collect */
/* assert */
EXPECT_STREQ(log_buff[0], "1\r\n");
/* deinit */
obj_deinit(pikaMain);
EXPECT_EQ(pikaMemNow(), 0);
}

View File

@ -4094,9 +4094,15 @@ TEST(parser, default_fn_1) {
"0 DEF test(a=,b=)\n"
"0 JMP 1\n"
"B1\n"
"0 EST a\n"
"0 JNZ 2\n"
"B1\n"
"0 NUM 1\n"
"0 OUT a\n"
"B1\n"
"0 EST b\n"
"0 JNZ 2\n"
"B1\n"
"0 STR test\n"
"0 OUT b\n"
"B1\n"
@ -4104,9 +4110,7 @@ TEST(parser, default_fn_1) {
"0 RUN print\n"
"B1\n"
"0 RET \n"
"B0\n"
);
"B0\n");
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}

View File

@ -2552,6 +2552,12 @@ char* AST_genAsm(AST* ast, Args* outBuffs) {
int stmt_num = strGetTokenNum(defaultStmts, ',');
for (int i = 0; i < stmt_num; i++) {
char* stmt = strsPopToken(&buffs, defaultStmts, ',');
char* arg_name = strsGetFirstToken(&buffs, stmt, '=');
pikaAsm = ASM_addBlockDeepth(ast, &buffs, pikaAsm, 1);
pikaAsm = strsAppend(&buffs, pikaAsm, "0 EST ");
pikaAsm = strsAppend(&buffs, pikaAsm, arg_name);
pikaAsm = strsAppend(&buffs, pikaAsm, "\n");
pikaAsm = strsAppend(&buffs, pikaAsm, "0 JNZ 2\n");
AST* ast_this = AST_parseLine_withBlockDeepth(
stmt, AST_getBlockDeepthNow(ast) + 1);
pikaAsm =

View File

@ -612,7 +612,7 @@ static int VMState_loadArgsFromMethodArg(VMState* vm,
arg_num_input = VMState_getInputArgNum(vm);
/* check variable */
if (strIsContain(type_list, '*')) {
if (strIsContain(type_list, '*') || strIsContain(type_list, '=')) {
vars_or_keys = PIKA_TRUE;
}