mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
support 0xffffffff literal and print
This commit is contained in:
parent
38aacc37d0
commit
295ff87e5d
2
port/linux/.vscode/launch.json
vendored
2
port/linux/.vscode/launch.json
vendored
@ -11,7 +11,7 @@
|
||||
"program": "${workspaceFolder}/build/test/pikascript_test",
|
||||
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
|
||||
"args": [
|
||||
"--gtest_filter=VM.num1"
|
||||
"--gtest_filter=vm.test64_hex"
|
||||
],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
|
@ -1690,3 +1690,43 @@ TEST(vm, pass_) {
|
||||
obj_deinit(pikaMain);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
TEST(vm, test64_hex) {
|
||||
/* 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,
|
||||
"import GTestTask\n"
|
||||
"res = GTestTask.test64(0xffffffff, 20)\n");
|
||||
/* collect */
|
||||
int64_t res = obj_getInt(pikaMain, "res");
|
||||
/* assert */
|
||||
EXPECT_EQ(res, 4294967295 * 20);
|
||||
/* deinit */
|
||||
obj_deinit(pikaMain);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
TEST(vm, test64_hex_print) {
|
||||
/* 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,
|
||||
"0xffffffff\n"
|
||||
"print(0xffffffff)\n");
|
||||
/* collect */
|
||||
/* assert */
|
||||
EXPECT_STREQ(log_buff[0], "4294967295\r\n");
|
||||
EXPECT_STREQ(log_buff[1], "4294967295\r\n");
|
||||
/* deinit */
|
||||
obj_deinit(pikaMain);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
22
src/PikaVM.c
22
src/PikaVM.c
@ -1247,7 +1247,7 @@ static char* __get_transferd_str(Args* buffs, char* str, size_t* iout_p) {
|
||||
char hex_str[] = "0x00";
|
||||
hex_str[2] = str_rep[i + 2];
|
||||
hex_str[3] = str_rep[i + 3];
|
||||
char hex = (char)strtol(hex_str, NULL, 0);
|
||||
char hex = (char)strtoll(hex_str, NULL, 0);
|
||||
transfered_str[i_out++] = hex;
|
||||
i += 3;
|
||||
continue;
|
||||
@ -1373,18 +1373,18 @@ static Arg* VM_instruction_handler_NUM(PikaObj* self,
|
||||
Arg* numArg = arg_ret_reg;
|
||||
/* hex */
|
||||
if (data[1] == 'x' || data[1] == 'X') {
|
||||
return arg_setInt(numArg, "", strtol(data, NULL, 0));
|
||||
return arg_setInt(numArg, "", strtoll(data, NULL, 0));
|
||||
}
|
||||
if (data[1] == 'o' || data[1] == 'O') {
|
||||
char strtol_buff[10] = {0};
|
||||
strtol_buff[0] = '0';
|
||||
__platform_memcpy(strtol_buff + 1, data + 2, strGetSize(data) - 2);
|
||||
return arg_setInt(numArg, "", strtol(strtol_buff, NULL, 0));
|
||||
char strtoll_buff[10] = {0};
|
||||
strtoll_buff[0] = '0';
|
||||
__platform_memcpy(strtoll_buff + 1, data + 2, strGetSize(data) - 2);
|
||||
return arg_setInt(numArg, "", strtoll(strtoll_buff, NULL, 0));
|
||||
}
|
||||
if (data[1] == 'b' || data[1] == 'B') {
|
||||
char strtol_buff[10] = {0};
|
||||
__platform_memcpy(strtol_buff, data + 2, strGetSize(data) - 2);
|
||||
return arg_setInt(numArg, "", strtol(strtol_buff, NULL, 2));
|
||||
char strtoll_buff[10] = {0};
|
||||
__platform_memcpy(strtoll_buff, data + 2, strGetSize(data) - 2);
|
||||
return arg_setInt(numArg, "", strtoll(strtoll_buff, NULL, 2));
|
||||
}
|
||||
/* float */
|
||||
if (strIsContain(data, '.') ||
|
||||
@ -2664,7 +2664,11 @@ void VMState_solveUnusedStack(VMState* vm) {
|
||||
char* res = obj_toStr(arg_getPtr(arg));
|
||||
__platform_printf("%s\r\n", res);
|
||||
} else if (type == ARG_TYPE_INT) {
|
||||
#if PIKA_PRINT_LLD_ENABLE
|
||||
__platform_printf("%lld\r\n", arg_getInt(arg));
|
||||
#else
|
||||
__platform_printf("%d\r\n", (int)arg_getInt(arg));
|
||||
#endif
|
||||
} else if (type == ARG_TYPE_FLOAT) {
|
||||
__platform_printf("%f\r\n", arg_getFloat(arg));
|
||||
} else if (type == ARG_TYPE_STRING) {
|
||||
|
@ -401,10 +401,10 @@ char* getPrintSring(Args* self, char* name, char* valString) {
|
||||
return res;
|
||||
}
|
||||
|
||||
char* getPrintStringFromInt(Args* self, char* name, int32_t val) {
|
||||
char* getPrintStringFromInt(Args* self, char* name, int64_t val) {
|
||||
Args buffs = {0};
|
||||
char* res = NULL;
|
||||
char* valString = strsFormat(&buffs, 32, "%d", val);
|
||||
char* valString = strsFormat(&buffs, 32, "%lld", val);
|
||||
res = getPrintSring(self, name, valString);
|
||||
strsDeinit(&buffs);
|
||||
return res;
|
||||
@ -440,7 +440,7 @@ char* args_print(Args* self, char* name) {
|
||||
}
|
||||
|
||||
if (type == ARG_TYPE_INT) {
|
||||
int32_t val = args_getInt(self, name);
|
||||
int64_t val = args_getInt(self, name);
|
||||
res = getPrintStringFromInt(self, name, val);
|
||||
goto exit;
|
||||
}
|
||||
|
@ -300,6 +300,10 @@
|
||||
#ifndef PIKA_STRING_UTF8_ENABLE
|
||||
#define PIKA_STRING_UTF8_ENABLE 1
|
||||
#endif
|
||||
|
||||
#ifndef PIKA_PRINT_LLD_ENABLE
|
||||
#define PIKA_PRINT_LLD_ENABLE 1
|
||||
#endif
|
||||
|
||||
/* configuration validation */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user