support RES on pikaCompiler

This commit is contained in:
lyon 2022-10-24 10:14:12 +08:00
parent 287d515bd0
commit df65e2def9
20 changed files with 136 additions and 101 deletions

View File

@ -79,7 +79,7 @@ pika_float PikaStdLib_SysObj_float(PikaObj* self, Arg* arg) {
if (ARG_TYPE_FLOAT == type) { if (ARG_TYPE_FLOAT == type) {
return (float)arg_getFloat(arg); return (float)arg_getFloat(arg);
} }
obj_setSysOut(self, "[error] convert to pika_float type faild."); obj_setSysOut(self, "[error] convert to pika_float type failed.");
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
return -99999.99999; return -99999.99999;
} }
@ -105,7 +105,7 @@ int PikaStdLib_SysObj_int(PikaObj* self, Arg* arg) {
uint8_t val = *arg_getBytes(arg); uint8_t val = *arg_getBytes(arg);
return val; return val;
} }
obj_setSysOut(self, "[error] convert to int type faild."); obj_setSysOut(self, "[error] convert to int type failed.");
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
return -999999999; return -999999999;
} }

View File

@ -11,7 +11,7 @@
"program": "${workspaceFolder}/build/test/pikascript_test", "program": "${workspaceFolder}/build/test/pikascript_test",
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain", // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
"args": [ "args": [
// "--gtest_filter=parser.multi_import" // "--gtest_filter=pikaMain.synac_err_1"
], ],
"stopAtEntry": false, "stopAtEntry": false,
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}",

View File

@ -79,7 +79,7 @@ pika_float PikaStdLib_SysObj_float(PikaObj* self, Arg* arg) {
if (ARG_TYPE_FLOAT == type) { if (ARG_TYPE_FLOAT == type) {
return (float)arg_getFloat(arg); return (float)arg_getFloat(arg);
} }
obj_setSysOut(self, "[error] convert to pika_float type faild."); obj_setSysOut(self, "[error] convert to pika_float type failed.");
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
return -99999.99999; return -99999.99999;
} }
@ -105,7 +105,7 @@ int PikaStdLib_SysObj_int(PikaObj* self, Arg* arg) {
uint8_t val = *arg_getBytes(arg); uint8_t val = *arg_getBytes(arg);
return val; return val;
} }
obj_setSysOut(self, "[error] convert to int type faild."); obj_setSysOut(self, "[error] convert to int type failed.");
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
return -999999999; return -999999999;
} }

View File

@ -6,7 +6,7 @@ PikaObj* pika_cjson_Parse(PikaObj* self, char* value) {
cJSON* item = cJSON_Parse(value); cJSON* item = cJSON_Parse(value);
if (NULL == item) { if (NULL == item) {
obj_setErrorCode(self, 3); obj_setErrorCode(self, 3);
__platform_printf("Error: cJSON parse faild.\r\n"); __platform_printf("Error: cJSON parse failed.\r\n");
return NULL; return NULL;
} }
PikaObj* cjson_obj = newNormalObj(New_pika_cjson_cJSON); PikaObj* cjson_obj = newNormalObj(New_pika_cjson_cJSON);

View File

@ -20,7 +20,7 @@ void pika_lua_eval(PikaObj* self, char* cmd) {
int res = luaL_dostring(pika_L, cmd); int res = luaL_dostring(pika_L, cmd);
if (LUA_OK != res) { if (LUA_OK != res) {
obj_setErrorCode(self, PIKA_RES_ERR_OPERATION_FAILED); obj_setErrorCode(self, PIKA_RES_ERR_OPERATION_FAILED);
obj_setSysOut(self, "Error: Lua dostring faild.\r\n"); obj_setSysOut(self, "Error: Lua dostring failed.\r\n");
} }
} }

View File

@ -61,10 +61,16 @@ static void __handler_instructArray_output_file(InstructArray* self,
__platform_fclose() __platform_fclose()
*/ */
int pikaCompile(char* output_file_name, char* py_lines) { PIKA_RES pikaCompile(char* output_file_name, char* py_lines) {
PIKA_RES res = PIKA_RES_OK;
ByteCodeFrame bytecode_frame = {0}; ByteCodeFrame bytecode_frame = {0};
FILE* bytecode_f = __platform_fopen(output_file_name, "wb+"); FILE* bytecode_f = __platform_fopen(output_file_name, "wb+");
if (NULL == bytecode_f) {
__platform_printf("Error: open file %s failed.\r\n", output_file_name);
res = PIKA_RES_ERR_IO_ERROR;
goto exit;
}
/* main process */ /* main process */
/* step 1, get size of const pool and instruct array */ /* step 1, get size of const pool and instruct array */
@ -73,7 +79,11 @@ int pikaCompile(char* output_file_name, char* py_lines) {
bytecode_frame.instruct_array.output_f = bytecode_f; bytecode_frame.instruct_array.output_f = bytecode_f;
bytecode_frame.instruct_array.output_redirect_fun = bytecode_frame.instruct_array.output_redirect_fun =
__handler_instructArray_output_none; __handler_instructArray_output_none;
Parser_linesToBytes(&bytecode_frame, py_lines); res = Parser_linesToBytes(&bytecode_frame, py_lines);
if (PIKA_RES_OK != res) {
__platform_printf(" Error: Syntax error.\r\n");
goto exit;
}
uint32_t const_pool_size = bytecode_frame.const_pool.size; uint32_t const_pool_size = bytecode_frame.const_pool.size;
uint32_t instruct_array_size = bytecode_frame.instruct_array.size; uint32_t instruct_array_size = bytecode_frame.instruct_array.size;
byteCodeFrame_deinit(&bytecode_frame); byteCodeFrame_deinit(&bytecode_frame);
@ -105,12 +115,15 @@ int pikaCompile(char* output_file_name, char* py_lines) {
bytecode_frame.instruct_array.output_redirect_fun = bytecode_frame.instruct_array.output_redirect_fun =
__handler_instructArray_output_none; __handler_instructArray_output_none;
Parser_linesToBytes(&bytecode_frame, py_lines); Parser_linesToBytes(&bytecode_frame, py_lines);
byteCodeFrame_deinit(&bytecode_frame);
/* deinit */ /* deinit */
exit:
byteCodeFrame_deinit(&bytecode_frame);
if (NULL != bytecode_f) {
__platform_fclose(bytecode_f); __platform_fclose(bytecode_f);
}
/* succeed */ /* succeed */
return 0; return res;
}; };
/* /*
@ -120,12 +133,12 @@ int pikaCompile(char* output_file_name, char* py_lines) {
__platform_fwrite() __platform_fwrite()
__platform_fclose() __platform_fclose()
*/ */
int pikaCompileFileWithOutputName(char* output_file_name, PIKA_RES pikaCompileFileWithOutputName(char* output_file_name,
char* input_file_name) { char* input_file_name) {
Args buffs = {0}; Args buffs = {0};
Arg* input_file_arg = arg_loadFile(NULL, input_file_name); Arg* input_file_arg = arg_loadFile(NULL, input_file_name);
if (NULL == input_file_arg) { if (NULL == input_file_arg) {
return 1; return PIKA_RES_ERR_IO_ERROR;
} }
char* lines = (char*)arg_getBytes(input_file_arg); char* lines = (char*)arg_getBytes(input_file_arg);
/* replace the "\r\n" to "\n" */ /* replace the "\r\n" to "\n" */
@ -134,19 +147,20 @@ int pikaCompileFileWithOutputName(char* output_file_name,
lines = strsReplace(&buffs, lines, "\n\n", "\n"); lines = strsReplace(&buffs, lines, "\n\n", "\n");
/* add '\n' at the end */ /* add '\n' at the end */
lines = strsAppend(&buffs, lines, "\n\n"); lines = strsAppend(&buffs, lines, "\n\n");
pikaCompile(output_file_name, lines); PIKA_RES res = pikaCompile(output_file_name, lines);
arg_deinit(input_file_arg); arg_deinit(input_file_arg);
strsDeinit(&buffs); strsDeinit(&buffs);
return 0; return res;
} }
int pikaCompileFile(char* input_file_name) { PIKA_RES pikaCompileFile(char* input_file_name) {
Args buffs = {0}; Args buffs = {0};
char* output_file_name = strsGetFirstToken(&buffs, input_file_name, '.'); char* output_file_name = strsGetFirstToken(&buffs, input_file_name, '.');
output_file_name = strsAppend(&buffs, input_file_name, ".o"); output_file_name = strsAppend(&buffs, input_file_name, ".o");
PIKA_RES res =
pikaCompileFileWithOutputName(output_file_name, input_file_name); pikaCompileFileWithOutputName(output_file_name, input_file_name);
strsDeinit(&buffs); strsDeinit(&buffs);
return 0; return res;
} }
LibObj* New_LibObj(Args* args) { LibObj* New_LibObj(Args* args) {
@ -400,7 +414,8 @@ exit:
return res; return res;
} }
static void __Maker_compileModuleWithInfo(PikaMaker* self, char* module_name) { static PIKA_RES __Maker_compileModuleWithInfo(PikaMaker* self,
char* module_name) {
Args buffs = {0}; Args buffs = {0};
char* input_file_name = strsAppend(&buffs, module_name, ".py"); char* input_file_name = strsAppend(&buffs, module_name, ".py");
char* input_file_path = char* input_file_path =
@ -411,13 +426,16 @@ static void __Maker_compileModuleWithInfo(PikaMaker* self, char* module_name) {
output_file_path = output_file_path =
strsAppend(&buffs, obj_getStr(self, "pwd"), "pikascript-api/"); strsAppend(&buffs, obj_getStr(self, "pwd"), "pikascript-api/");
output_file_path = strsAppend(&buffs, output_file_path, output_file_name); output_file_path = strsAppend(&buffs, output_file_path, output_file_name);
PIKA_RES res =
pikaCompileFileWithOutputName(output_file_path, input_file_path); pikaCompileFileWithOutputName(output_file_path, input_file_path);
strsDeinit(&buffs); strsDeinit(&buffs);
return res;
} }
PikaMaker* New_PikaMaker(void) { PikaMaker* New_PikaMaker(void) {
PikaMaker* self = New_TinyObj(NULL); PikaMaker* self = New_TinyObj(NULL);
obj_setStr(self, "pwd", ""); obj_setStr(self, "pwd", "");
obj_setInt(self, "err", 0);
return self; return self;
} }
@ -432,10 +450,15 @@ void pikaMaker_setState(PikaMaker* self, char* module_name, char* state) {
obj_setStr(module_obj, "state", state); obj_setStr(module_obj, "state", state);
} }
void pikaMaker_compileModule(PikaMaker* self, char* module_name) { PIKA_RES pikaMaker_compileModule(PikaMaker* self, char* module_name) {
__Maker_compileModuleWithInfo(self, module_name); PIKA_RES res = __Maker_compileModuleWithInfo(self, module_name);
/* update compile info */ /* update compile info */
if (PIKA_RES_OK == res) {
pikaMaker_setState(self, module_name, "compiled"); pikaMaker_setState(self, module_name, "compiled");
} else {
pikaMaker_setState(self, module_name, "failed");
}
return res;
} }
int pikaMaker_getDependencies(PikaMaker* self, char* module_name) { int pikaMaker_getDependencies(PikaMaker* self, char* module_name) {
@ -589,8 +612,14 @@ char* pikaMaker_getFirstNocompiled(PikaMaker* self) {
return obj_getStr(self, "res"); return obj_getStr(self, "res");
} }
void pikaMaker_compileModuleWithDepends(PikaMaker* self, char* module_name) { PIKA_RES pikaMaker_compileModuleWithDepends(PikaMaker* self,
pikaMaker_compileModule(self, module_name); char* module_name) {
PIKA_RES res = PIKA_RES_OK;
res = pikaMaker_compileModule(self, module_name);
if (PIKA_RES_OK != res) {
obj_setInt(self, "err", res);
return res;
}
pikaMaker_getDependencies(self, module_name); pikaMaker_getDependencies(self, module_name);
while (1) { while (1) {
char* uncompiled = pikaMaker_getFirstNocompiled(self); char* uncompiled = pikaMaker_getFirstNocompiled(self);
@ -598,9 +627,14 @@ void pikaMaker_compileModuleWithDepends(PikaMaker* self, char* module_name) {
if (NULL == uncompiled) { if (NULL == uncompiled) {
break; break;
} }
pikaMaker_compileModule(self, uncompiled); res = pikaMaker_compileModule(self, uncompiled);
if (PIKA_RES_OK != res) {
obj_setInt(self, "err", res);
return res;
}
pikaMaker_getDependencies(self, uncompiled); pikaMaker_getDependencies(self, uncompiled);
} }
return PIKA_RES_OK;
} }
int32_t __foreach_handler_linkCompiledModules(Arg* argEach, Args* context) { int32_t __foreach_handler_linkCompiledModules(Arg* argEach, Args* context) {
@ -624,7 +658,13 @@ int32_t __foreach_handler_linkCompiledModules(Arg* argEach, Args* context) {
return 0; return 0;
} }
void pikaMaker_linkCompiledModulesFullPath(PikaMaker* self, char* lib_path) { PIKA_RES pikaMaker_linkCompiledModulesFullPath(PikaMaker* self,
char* lib_path) {
PIKA_RES compile_err = obj_getInt(self, "err");
if (PIKA_RES_OK != compile_err) {
__platform_printf(" Error: compile failed, link aborted.\r\n");
return compile_err;
}
Args context = {0}; Args context = {0};
LibObj* lib = New_LibObj(NULL); LibObj* lib = New_LibObj(NULL);
Args buffs = {0}; Args buffs = {0};
@ -643,11 +683,13 @@ void pikaMaker_linkCompiledModulesFullPath(PikaMaker* self, char* lib_path) {
Lib_loadLibraryFileToArray(lib_file_path, folder_path); Lib_loadLibraryFileToArray(lib_file_path, folder_path);
LibObj_deinit(lib); LibObj_deinit(lib);
strsDeinit(&buffs); strsDeinit(&buffs);
return PIKA_RES_OK;
} }
void pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name) { PIKA_RES pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name) {
Args buffs = {0}; Args buffs = {0};
char* lib_file_path = strsAppend(&buffs, "pikascript-api/", lib_name); char* lib_file_path = strsAppend(&buffs, "pikascript-api/", lib_name);
pikaMaker_linkCompiledModulesFullPath(self, lib_file_path); PIKA_RES res = pikaMaker_linkCompiledModulesFullPath(self, lib_file_path);
strsDeinit(&buffs); strsDeinit(&buffs);
return res;
} }

View File

@ -3,10 +3,10 @@
#include "PikaObj.h" #include "PikaObj.h"
#include "stdint.h" #include "stdint.h"
int pikaCompileFile(char* input_file_name); PIKA_RES pikaCompileFile(char* input_file_name);
int pikaCompileFileWithOutputName(char* output_file_name, PIKA_RES pikaCompileFileWithOutputName(char* output_file_name,
char* input_file_name); char* input_file_name);
int pikaCompile(char* output_file_name, char* py_lines); PIKA_RES pikaCompile(char* output_file_name, char* py_lines);
LibObj* New_LibObj(Args* args); LibObj* New_LibObj(Args* args);
void LibObj_deinit(LibObj* self); void LibObj_deinit(LibObj* self);
@ -22,14 +22,14 @@ int LibObj_loadLibraryFile(LibObj* self, char* input_file_name);
int Lib_loadLibraryFileToArray(char* origin_file_name, char* pikascript_root); int Lib_loadLibraryFileToArray(char* origin_file_name, char* pikascript_root);
PikaMaker* New_PikaMaker(void); PikaMaker* New_PikaMaker(void);
void pikaMaker_setPWD(PikaMaker* self, char* pwd); void pikaMaker_setPWD(PikaMaker* self, char* pwd);
void pikaMaker_compileModule(PikaMaker* self, char* module_name); PIKA_RES pikaMaker_compileModule(PikaMaker* self, char* module_name);
int pikaMaker_getDependencies(PikaMaker* self, char* module_name); int pikaMaker_getDependencies(PikaMaker* self, char* module_name);
void pikaMaker_printStates(PikaMaker* self); void pikaMaker_printStates(PikaMaker* self);
char* pikaMaker_getFirstNocompiled(PikaMaker* self); char* pikaMaker_getFirstNocompiled(PikaMaker* self);
void pikaMaker_compileModuleWithDepends(PikaMaker* self, char* module_name); PIKA_RES pikaMaker_compileModuleWithDepends(PikaMaker* self, char* module_name);
void pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name); PIKA_RES pikaMaker_linkCompiledModulesFullPath(PikaMaker* self, char* lib_path);
PIKA_RES pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name);
int LibObj_loadLibrary(LibObj* self, uint8_t* library_bytes); int LibObj_loadLibrary(LibObj* self, uint8_t* library_bytes);
void pikaMaker_linkCompiledModulesFullPath(PikaMaker* self, char* lib_path);
#define LIB_VERSION_NUMBER 2 #define LIB_VERSION_NUMBER 2
#define LIB_INFO_BLOCK_SIZE 32 #define LIB_INFO_BLOCK_SIZE 32

View File

@ -270,7 +270,6 @@ void _temp_obj_shellLineProcess(PikaObj* self, ShellConfig* cfg);
__platform_fwrite() __platform_fwrite()
__platform_fclose() __platform_fclose()
*/ */
int pikaCompile(char* output_file_name, char* py_lines);
Method obj_getNativeMethod(PikaObj* self, char* method_name); Method obj_getNativeMethod(PikaObj* self, char* method_name);
PIKA_RES obj_runNativeMethod(PikaObj* self, char* method_name, Args* args); PIKA_RES obj_runNativeMethod(PikaObj* self, char* method_name, Args* args);
Arg* obj_newObjInPackage(NewFun newObjFun); Arg* obj_newObjInPackage(NewFun newObjFun);

View File

@ -2506,18 +2506,12 @@ exit:
return out_ASM; return out_ASM;
}; };
char* Parser_linesToBytes(ByteCodeFrame* bf, char* py_lines) { PIKA_RES Parser_linesToBytes(ByteCodeFrame* bf, char* py_lines) {
return _Parser_linesToBytesOrAsm(NULL, bf, py_lines); if (1 == (uintptr_t)_Parser_linesToBytesOrAsm(NULL, bf, py_lines)) {
} return PIKA_RES_OK;
int bytecodeFrame_fromLines(ByteCodeFrame* bytecode_frame, char* multi_line) {
if (NULL == Parser_linesToBytes(bytecode_frame, multi_line)) {
/* error */
return 1;
} }
/* succeed */ return PIKA_RES_ERR_SYNTAX_ERROR;
return 0; }
};
char* Parser_linesToAsm(Args* outBuffs, char* multi_line) { char* Parser_linesToAsm(Args* outBuffs, char* multi_line) {
return _Parser_linesToBytesOrAsm(outBuffs, NULL, multi_line); return _Parser_linesToBytesOrAsm(outBuffs, NULL, multi_line);
@ -3024,7 +3018,7 @@ ByteCodeFrame* byteCodeFrame_appendFromAsm(ByteCodeFrame* self, char* pikaAsm) {
char* Parser_linesToArray(char* lines) { char* Parser_linesToArray(char* lines) {
ByteCodeFrame bytecode_frame; ByteCodeFrame bytecode_frame;
byteCodeFrame_init(&bytecode_frame); byteCodeFrame_init(&bytecode_frame);
bytecodeFrame_fromLines(&bytecode_frame, lines); Parser_linesToBytes(&bytecode_frame, lines);
/* do something */ /* do something */
byteCodeFrame_print(&bytecode_frame); byteCodeFrame_print(&bytecode_frame);

View File

@ -100,12 +100,11 @@ struct Cursor {
char* Parser_fileToAsm(Args* outBuffs, char* filename); char* Parser_fileToAsm(Args* outBuffs, char* filename);
char* Parser_linesToAsm(Args* outBuffs, char* multiLine); char* Parser_linesToAsm(Args* outBuffs, char* multiLine);
char* Parser_linesToBytes(ByteCodeFrame* bf, char* py_lines); PIKA_RES Parser_linesToBytes(ByteCodeFrame* bf, char* py_lines);
char* Parser_linesToArray(char* lines); char* Parser_linesToArray(char* lines);
char* instructUnit_fromAsmLine(Args* outBuffs, char* pikaAsm); char* instructUnit_fromAsmLine(Args* outBuffs, char* pikaAsm);
ByteCodeFrame* byteCodeFrame_appendFromAsm(ByteCodeFrame* bf, char* pikaAsm); ByteCodeFrame* byteCodeFrame_appendFromAsm(ByteCodeFrame* bf, char* pikaAsm);
int bytecodeFrame_fromLines(ByteCodeFrame* bytecode_frame, char* python_lines);
#define Cursor_forEach(cursor) \ #define Cursor_forEach(cursor) \
_Cursor_beforeIter(&cursor); \ _Cursor_beforeIter(&cursor); \

View File

@ -1255,7 +1255,7 @@ static Arg* VM_instruction_handler_RUN(PikaObj* self,
arg_num_used += VMState_loadArgsFromMethodArg( arg_num_used += VMState_loadArgsFromMethodArg(
vm, obj_this, sub_locals->list, method, run_path, arg_num_used); vm, obj_this, sub_locals->list, method, run_path, arg_num_used);
/* load args faild */ /* load args failed */
if (vm->error_code != 0) { if (vm->error_code != 0) {
goto exit; goto exit;
} }
@ -1290,7 +1290,7 @@ static Arg* VM_instruction_handler_RUN(PikaObj* self,
} }
VMState_loadArgsFromMethodArg(vm, new_obj, sub_locals->list, method_arg, VMState_loadArgsFromMethodArg(vm, new_obj, sub_locals->list, method_arg,
"__init__", arg_num_used); "__init__", arg_num_used);
/* load args faild */ /* load args failed */
if (vm->error_code != 0) { if (vm->error_code != 0) {
goto init_exit; goto init_exit;
} }
@ -2211,7 +2211,7 @@ static Arg* VM_instruction_handler_ASS(PikaObj* self,
arg2 = stack_popArg(&vm->stack, &reg2); arg2 = stack_popArg(&vm->stack, &reg2);
arg1 = stack_popArg(&vm->stack, &reg1); arg1 = stack_popArg(&vm->stack, &reg1);
} }
/* assert faild */ /* assert failed */
if (arg_getType(arg1) == ARG_TYPE_INT && arg_getInt(arg1) == 0) { if (arg_getType(arg1) == ARG_TYPE_INT && arg_getInt(arg1) == 0) {
stack_pushArg(&vm->stack, arg_newInt(PIKA_RES_ERR_ASSERT)); stack_pushArg(&vm->stack, arg_newInt(PIKA_RES_ERR_ASSERT));
res = VM_instruction_handler_RIS(self, vm, data, arg_ret_reg); res = VM_instruction_handler_RIS(self, vm, data, arg_ret_reg);
@ -2506,7 +2506,7 @@ static VMParameters* __pikaVM_runPyLines_or_byteCode(PikaObj* self,
if (is_run_py) { if (is_run_py) {
/* generate byte code */ /* generate byte code */
byteCodeFrame_init(bytecode_frame_p); byteCodeFrame_init(bytecode_frame_p);
if (1 == bytecodeFrame_fromLines(bytecode_frame_p, py_lines)) { if (PIKA_RES_OK != Parser_linesToBytes(bytecode_frame_p, py_lines)) {
__platform_printf("Error: Syntax error.\r\n"); __platform_printf("Error: Syntax error.\r\n");
globals = NULL; globals = NULL;
goto exit; goto exit;

View File

@ -2,4 +2,4 @@
#define PIKA_VERSION_MINOR 11 #define PIKA_VERSION_MINOR 11
#define PIKA_VERSION_MICRO 5 #define PIKA_VERSION_MICRO 5
#define PIKA_EDIT_TIME "2022/10/23 18:55:43" #define PIKA_EDIT_TIME "2022/10/24 10:14:10"

View File

@ -234,7 +234,7 @@ PIKA_RES args_setStructWithSize(Args* self,
uint32_t struct_size) { uint32_t struct_size) {
Arg* struct_arg = arg_setStruct(NULL, name, struct_ptr, struct_size); Arg* struct_arg = arg_setStruct(NULL, name, struct_ptr, struct_size);
if (NULL == struct_arg) { if (NULL == struct_arg) {
/* faild */ /* failed */
return PIKA_RES_ERR_ARG_NO_FOUND; return PIKA_RES_ERR_ARG_NO_FOUND;
} }
args_setArg(self, struct_arg); args_setArg(self, struct_arg);
@ -262,7 +262,7 @@ PIKA_RES args_setHeapStructWithSize(Args* self,
Arg* struct_arg = arg_setHeapStruct(NULL, name, struct_ptr, struct_size, Arg* struct_arg = arg_setHeapStruct(NULL, name, struct_ptr, struct_size,
struct_deinit_fun); struct_deinit_fun);
if (NULL == struct_arg) { if (NULL == struct_arg) {
/* faild */ /* failed */
return PIKA_RES_ERR_ARG_NO_FOUND; return PIKA_RES_ERR_ARG_NO_FOUND;
} }
args_setArg(self, struct_arg); args_setArg(self, struct_arg);

View File

@ -59,7 +59,7 @@ char* strCut(char* strOut, char* strIn, char startSign, char endSign) {
/* succeed */ /* succeed */
return strOut; return strOut;
} }
/* faild */ /* failed */
return NULL; return NULL;
} }

View File

@ -377,7 +377,7 @@ TEST(cJSON, test6) {
EXPECT_EQ(pikaMemNow(), 0); EXPECT_EQ(pikaMemNow(), 0);
} }
TEST(cJSON, parse_faild) { TEST(cJSON, parse_failed) {
/* init */ /* init */
pikaMemInfo.heapUsedMax = 0; pikaMemInfo.heapUsedMax = 0;
PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);

View File

@ -256,7 +256,7 @@ TEST(compiler, import_bf_mem) {
"\n"; "\n";
ByteCodeFrame bf; ByteCodeFrame bf;
byteCodeFrame_init(&bf); byteCodeFrame_init(&bf);
bytecodeFrame_fromLines(&bf, lines); Parser_linesToBytes(&bf, lines);
obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf); obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf);
byteCodeFrame_deinit(&bf); byteCodeFrame_deinit(&bf);
obj_deinit(pikaMain); obj_deinit(pikaMain);
@ -271,7 +271,7 @@ TEST(compiler, import_bf1) {
"\n"; "\n";
ByteCodeFrame bf; ByteCodeFrame bf;
byteCodeFrame_init(&bf); byteCodeFrame_init(&bf);
bytecodeFrame_fromLines(&bf, lines); Parser_linesToBytes(&bf, lines);
obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf); obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf);
obj_run(pikaMain, obj_run(pikaMain,
"mtest.mytest()\n" "mtest.mytest()\n"
@ -291,7 +291,7 @@ TEST(compiler, import_bf2) {
"\n"; "\n";
ByteCodeFrame bf; ByteCodeFrame bf;
byteCodeFrame_init(&bf); byteCodeFrame_init(&bf);
bytecodeFrame_fromLines(&bf, lines); Parser_linesToBytes(&bf, lines);
obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf); obj_importModuleWithByteCodeFrame(pikaMain, "mtest", &bf);
obj_run(pikaMain, obj_run(pikaMain,
"m = mtest.Test()\n" "m = mtest.Test()\n"

View File

@ -35,12 +35,13 @@ TEST(except, trycmodule1) {
"import pika_cjson\n" "import pika_cjson\n"
"try:\n" "try:\n"
" b = pika_cjson.Parse('')\n" " b = pika_cjson.Parse('')\n"
" print('after faild')\n" " print('after failed')\n"
"except:\n" "except:\n"
" print('parse faild')\n" " print('parse failed')\n"
"\n"); "\n");
/* collect */ /* collect */
EXPECT_STREQ("BEGIN\r\n", log_buff[2]); EXPECT_STREQ("BEGIN\r\n", log_buff[2]);
EXPECT_STREQ("parse failed\r\n", log_buff[0]);
/* assert */ /* assert */
/* deinit */ /* deinit */
obj_deinit(pikaMain); obj_deinit(pikaMain);

View File

@ -1091,7 +1091,7 @@ TEST(pikaMain, complex_str) {
EXPECT_EQ(pikaMemNow(), 0); EXPECT_EQ(pikaMemNow(), 0);
} }
TEST(pikaMain, synac_err_1) { TEST(pikaMain, syntax_err_1) {
/* init */ /* init */
pikaMemInfo.heapUsedMax = 0; pikaMemInfo.heapUsedMax = 0;
/* run */ /* run */

View File

@ -8,6 +8,25 @@
#include "dataStrs.h" #include "dataStrs.h"
#include "libpikabinder.h" #include "libpikabinder.h"
void help(char* argv0) {
Args buffs = {0};
char* exe = argv0;
printf(
"Usage:\r\n"
" %s"
" - [Binding C modules and compile all from main.py]\r\n"
" %s test.py"
" - [Compile all from test.py]\r\n"
" %s test.py -o out.a"
" - [Compile all from test.py and link to out.a]\r\n"
" %s -c test.py"
" - [Only compile test.py to test.py.o]\r\n"
" %s -c test.py -o out.o"
" - [Only compile test.py to out.o]\r\n",
exe, exe, exe, exe, exe);
strsDeinit(&buffs);
}
/* fake implement */ /* fake implement */
PikaObj* __pikaMain; PikaObj* __pikaMain;
void New_PikaStdLib_SysObj(void) {} void New_PikaStdLib_SysObj(void) {}
@ -20,7 +39,6 @@ char* string_slice(Args* outBuffs, char* str, int start, int end) {
return NULL; return NULL;
} }
void help(char* argv0);
int main(int argc, char** argv) { int main(int argc, char** argv) {
int parc = argc - 1; int parc = argc - 1;
if (0 == parc) { if (0 == parc) {
@ -29,9 +47,9 @@ int main(int argc, char** argv) {
pika_binder(); pika_binder();
PikaMaker* maker = New_PikaMaker(); PikaMaker* maker = New_PikaMaker();
pikaMaker_compileModuleWithDepends(maker, "main"); pikaMaker_compileModuleWithDepends(maker, "main");
pikaMaker_linkCompiledModules(maker, "pikaModules.py.a"); PIKA_RES res = pikaMaker_linkCompiledModules(maker, "pikaModules.py.a");
obj_deinit(maker); obj_deinit(maker);
return 0; return res;
} }
/* example: ./rust-msc-latest-linux -h | --help */ /* example: ./rust-msc-latest-linux -h | --help */
@ -52,9 +70,9 @@ int main(int argc, char** argv) {
*subfix = '\0'; *subfix = '\0';
} }
pikaMaker_compileModuleWithDepends(maker, module_entry); pikaMaker_compileModuleWithDepends(maker, module_entry);
pikaMaker_linkCompiledModules(maker, "pikaModules.py.a"); PIKA_RES res = pikaMaker_linkCompiledModules(maker, "pikaModules.py.a");
obj_deinit(maker); obj_deinit(maker);
return 0; return res;
} }
/* example ./rust-msc-latest-linux main.py -o out.a */ /* example ./rust-msc-latest-linux main.py -o out.a */
@ -68,9 +86,9 @@ int main(int argc, char** argv) {
*subfix = '\0'; *subfix = '\0';
} }
pikaMaker_compileModuleWithDepends(maker, module_entry); pikaMaker_compileModuleWithDepends(maker, module_entry);
pikaMaker_linkCompiledModules(maker, argv[3]); PIKA_RES res = pikaMaker_linkCompiledModules(maker, argv[3]);
obj_deinit(maker); obj_deinit(maker);
return 0; return res;
} }
} }
@ -88,9 +106,10 @@ int main(int argc, char** argv) {
} }
module_out = strsAppend(&buffs, module_out, ".py.o"); module_out = strsAppend(&buffs, module_out, ".py.o");
printf("compiling %s to %s...\r\n", module_entry, module_out); printf("compiling %s to %s...\r\n", module_entry, module_out);
PIKA_RES res =
pikaCompileFileWithOutputName(module_out, module_entry); pikaCompileFileWithOutputName(module_out, module_entry);
strsDeinit(&buffs); strsDeinit(&buffs);
return 0; return res;
} }
} }
@ -100,33 +119,14 @@ int main(int argc, char** argv) {
/* compile only */ /* compile only */
char* module_entry = argv[2]; char* module_entry = argv[2];
printf("compiling %s to %s...\r\n", module_entry, argv[4]); printf("compiling %s to %s...\r\n", module_entry, argv[4]);
pikaCompileFileWithOutputName(argv[4], module_entry); PIKA_RES res = pikaCompileFileWithOutputName(argv[4], module_entry);
return 0; return res;
} }
} }
/* no valid input */ /* no valid input */
printf("invalid input\r\n"); printf("Invalid input.\r\n");
help(argv[0]); help(argv[0]);
return 0; return -1;
}
void help(char* argv0) {
Args buffs = {0};
char* exe = argv0;
printf(
"Usage:\r\n"
" %s"
" - [Binding C modules and compile all from main.py]\r\n"
" %s test.py"
" - [Compile all from test.py]\r\n"
" %s test.py -o out.a"
" - [Compile all from test.py and link to out.a]\r\n"
" %s -c test.py"
" - [Only compile test.py to test.py.o]\r\n"
" %s -c test.py -o out.o"
" - [Only compile test.py to out.o]\r\n",
exe, exe, exe, exe, exe);
strsDeinit(&buffs);
} }