mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
code clean-up
- remove unnecessary goto - optimize if-else structure
This commit is contained in:
parent
242550076a
commit
f6e1a3a560
280
src/PikaVM.c
280
src/PikaVM.c
@ -272,128 +272,109 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
||||
if (type_arg1 == TYPE_INT) {
|
||||
num1_i = arg_getInt(arg1);
|
||||
num1_f = (float)num1_i;
|
||||
}
|
||||
if (type_arg1 == TYPE_FLOAT) {
|
||||
} else if (type_arg1 == TYPE_FLOAT) {
|
||||
num1_f = arg_getFloat(arg1);
|
||||
num1_i = (int)num1_f;
|
||||
}
|
||||
if (type_arg2 == TYPE_INT) {
|
||||
num2_i = arg_getInt(arg2);
|
||||
num2_f = (float)num2_i;
|
||||
}
|
||||
if (type_arg2 == TYPE_FLOAT) {
|
||||
} else if (type_arg2 == TYPE_FLOAT) {
|
||||
num2_f = arg_getFloat(arg2);
|
||||
num2_i = (int)num2_f;
|
||||
}
|
||||
if (strEqu("+", data)) {
|
||||
if ((type_arg1 == TYPE_FLOAT) || type_arg2 == TYPE_FLOAT) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f + num2_f);
|
||||
goto OPT_exit;
|
||||
|
||||
//do {
|
||||
if (strEqu("+", data)) {
|
||||
if ((type_arg1 == TYPE_FLOAT) || type_arg2 == TYPE_FLOAT) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f + num2_f);
|
||||
} else {
|
||||
outArg = arg_setInt(outArg, "", num1_i + num2_i);
|
||||
}
|
||||
//break;
|
||||
} else if (strEqu("-", data)) {
|
||||
if ((type_arg1 == TYPE_FLOAT) || type_arg2 == TYPE_FLOAT) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f - num2_f);
|
||||
} else {
|
||||
outArg = arg_setInt(outArg, "", num1_i - num2_i);
|
||||
}
|
||||
//break;
|
||||
} else if (strEqu("*", data)) {
|
||||
if ((type_arg1 == TYPE_FLOAT) || type_arg2 == TYPE_FLOAT) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f * num2_f);
|
||||
} else {
|
||||
outArg = arg_setInt(outArg, "", num1_i * num2_i);
|
||||
}
|
||||
//break;
|
||||
} else if (strEqu("/", data)) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f / num2_f);
|
||||
//break;
|
||||
} else if (strEqu("<", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_f < num2_f);
|
||||
//break;
|
||||
} else if (strEqu(">", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_f > num2_f);
|
||||
//break;
|
||||
} else if (strEqu("%", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i % num2_i);
|
||||
//break;
|
||||
} else if (strEqu("**", data)) {
|
||||
float res = 1;
|
||||
for (int i = 0; i < num2_i; i++) {
|
||||
res = res * num1_f;
|
||||
}
|
||||
outArg = arg_setFloat(outArg, "", res);
|
||||
//break;
|
||||
} else if (strEqu("//", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i / num2_i);
|
||||
//break;
|
||||
} else if (strEqu("==", data)) {
|
||||
outArg = arg_setInt(outArg, "",
|
||||
(num1_f - num2_f) * (num1_f - num2_f) < 0.000001);
|
||||
//break;
|
||||
} else if (strEqu("!=", data)) {
|
||||
outArg = arg_setInt(
|
||||
outArg, "", !((num1_f - num2_f) * (num1_f - num2_f) < 0.000001));
|
||||
//break;
|
||||
} else if (strEqu(">=", data)) {
|
||||
outArg =
|
||||
arg_setInt(outArg, "",
|
||||
(num1_f > num2_f) ||
|
||||
((num1_f - num2_f) * (num1_f - num2_f) < 0.000001));
|
||||
//break;
|
||||
} else if (strEqu("<=", data)) {
|
||||
outArg =
|
||||
arg_setInt(outArg, "",
|
||||
(num1_f < num2_f) ||
|
||||
((num1_f - num2_f) * (num1_f - num2_f) < 0.000001));
|
||||
//break;
|
||||
} else if (strEqu("&", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i & num2_i);
|
||||
//break;
|
||||
} else if (strEqu("|", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i | num2_i);
|
||||
//break;
|
||||
} else if (strEqu("~", data)) {
|
||||
outArg = arg_setInt(outArg, "", ~num1_i);
|
||||
//break;
|
||||
} else if (strEqu(">>", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i >> num2_i);
|
||||
//break;
|
||||
} else if (strEqu("<<", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i << num2_i);
|
||||
//break;
|
||||
} else if (strEqu(" and ", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i && num2_i);
|
||||
//break;
|
||||
} else if (strEqu(" or ", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i || num2_i);
|
||||
//break;
|
||||
} else if (strEqu(" not ", data)) {
|
||||
outArg = arg_setInt(outArg, "", !num1_i);
|
||||
//break;
|
||||
}
|
||||
outArg = arg_setInt(outArg, "", num1_i + num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("-", data)) {
|
||||
if ((type_arg1 == TYPE_FLOAT) || type_arg2 == TYPE_FLOAT) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f - num2_f);
|
||||
goto OPT_exit;
|
||||
}
|
||||
outArg = arg_setInt(outArg, "", num1_i - num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("*", data)) {
|
||||
if ((type_arg1 == TYPE_FLOAT) || type_arg2 == TYPE_FLOAT) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f * num2_f);
|
||||
goto OPT_exit;
|
||||
}
|
||||
outArg = arg_setInt(outArg, "", num1_i * num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("/", data)) {
|
||||
outArg = arg_setFloat(outArg, "", num1_f / num2_f);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("<", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_f < num2_f);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu(">", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_f > num2_f);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("%", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i % num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("**", data)) {
|
||||
float res = 1;
|
||||
for (int i = 0; i < num2_i; i++) {
|
||||
res = res * num1_f;
|
||||
}
|
||||
outArg = arg_setFloat(outArg, "", res);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("//", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i / num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("==", data)) {
|
||||
outArg = arg_setInt(outArg, "",
|
||||
(num1_f - num2_f) * (num1_f - num2_f) < 0.000001);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("!=", data)) {
|
||||
outArg = arg_setInt(
|
||||
outArg, "", !((num1_f - num2_f) * (num1_f - num2_f) < 0.000001));
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu(">=", data)) {
|
||||
outArg =
|
||||
arg_setInt(outArg, "",
|
||||
(num1_f > num2_f) ||
|
||||
((num1_f - num2_f) * (num1_f - num2_f) < 0.000001));
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("<=", data)) {
|
||||
outArg =
|
||||
arg_setInt(outArg, "",
|
||||
(num1_f < num2_f) ||
|
||||
((num1_f - num2_f) * (num1_f - num2_f) < 0.000001));
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("&", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i & num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("|", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i | num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("~", data)) {
|
||||
outArg = arg_setInt(outArg, "", ~num1_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu(">>", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i >> num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu("<<", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i << num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu(" and ", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i && num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu(" or ", data)) {
|
||||
outArg = arg_setInt(outArg, "", num1_i || num2_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
if (strEqu(" not ", data)) {
|
||||
outArg = arg_setInt(outArg, "", !num1_i);
|
||||
goto OPT_exit;
|
||||
}
|
||||
OPT_exit:
|
||||
//} while(0);
|
||||
|
||||
arg_deinit(arg1);
|
||||
arg_deinit(arg2);
|
||||
if (NULL != outArg) {
|
||||
@ -631,35 +612,36 @@ int32_t pikaVM_runAsmLine(PikaObj* self,
|
||||
char* data;
|
||||
Arg* resArg;
|
||||
|
||||
/* Found new script Line, clear the queues*/
|
||||
if ('B' == line[0]) {
|
||||
args_setErrorCode(locals->list, 0);
|
||||
args_setSysOut(locals->list, (char*)"");
|
||||
__clearInvokeQueues(locals);
|
||||
goto nextLine;
|
||||
}
|
||||
invokeDeepth0[0] = line[0];
|
||||
invokeDeepth1[0] = line[0] + 1;
|
||||
instruct = getInstruct(line);
|
||||
data = line + 6;
|
||||
do {
|
||||
/* Found new script Line, clear the queues*/
|
||||
if ('B' == line[0]) {
|
||||
args_setErrorCode(locals->list, 0);
|
||||
args_setSysOut(locals->list, (char*)"");
|
||||
__clearInvokeQueues(locals);
|
||||
break;
|
||||
}
|
||||
invokeDeepth0[0] = line[0];
|
||||
invokeDeepth1[0] = line[0] + 1;
|
||||
instruct = getInstruct(line);
|
||||
data = line + 6;
|
||||
|
||||
vmState.q0 = args_getPtr(locals->list, invokeDeepth0);
|
||||
vmState.q1 = args_getPtr(locals->list, invokeDeepth1);
|
||||
if (NULL == vmState.q0) {
|
||||
vmState.q0 = New_queue();
|
||||
args_setPtr(locals->list, invokeDeepth0, vmState.q0);
|
||||
}
|
||||
if (NULL == vmState.q1) {
|
||||
vmState.q1 = New_queue();
|
||||
args_setPtr(locals->list, invokeDeepth1, vmState.q1);
|
||||
}
|
||||
/* run instruct */
|
||||
resArg = VM_instruct_handler_table[instruct](self, &vmState, data);
|
||||
if (NULL != resArg) {
|
||||
queue_pushArg(vmState.q0, resArg);
|
||||
}
|
||||
} while(0);
|
||||
|
||||
vmState.q0 = args_getPtr(locals->list, invokeDeepth0);
|
||||
vmState.q1 = args_getPtr(locals->list, invokeDeepth1);
|
||||
if (NULL == vmState.q0) {
|
||||
vmState.q0 = New_queue();
|
||||
args_setPtr(locals->list, invokeDeepth0, vmState.q0);
|
||||
}
|
||||
if (NULL == vmState.q1) {
|
||||
vmState.q1 = New_queue();
|
||||
args_setPtr(locals->list, invokeDeepth1, vmState.q1);
|
||||
}
|
||||
/* run instruct */
|
||||
resArg = VM_instruct_handler_table[instruct](self, &vmState, data);
|
||||
if (NULL != resArg) {
|
||||
queue_pushArg(vmState.q0, resArg);
|
||||
}
|
||||
goto nextLine;
|
||||
nextLine:
|
||||
args_deinit(buffs);
|
||||
/* exit */
|
||||
if (-999 == vmState.jmp) {
|
||||
@ -740,14 +722,16 @@ VM_Parameters* pikaVM_run(PikaObj* self, char* multiLine) {
|
||||
Args* buffs = New_strBuff();
|
||||
VM_Parameters* globals = NULL;
|
||||
char* pikaAsm = Parser_multiLineToAsm(buffs, multiLine);
|
||||
if (NULL == pikaAsm) {
|
||||
__platform_printf("[error]: Syntax error.\r\n");
|
||||
globals = NULL;
|
||||
goto exit;
|
||||
}
|
||||
globals = pikaVM_runAsm(self, pikaAsm);
|
||||
goto exit;
|
||||
exit:
|
||||
|
||||
do {
|
||||
if (NULL == pikaAsm) {
|
||||
__platform_printf("[error]: Syntax error.\r\n");
|
||||
globals = NULL;
|
||||
break;
|
||||
}
|
||||
globals = pikaVM_runAsm(self, pikaAsm);
|
||||
} while (0);
|
||||
|
||||
if (NULL != buffs) {
|
||||
args_deinit(buffs);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user