support 0xffffffff literal and print

This commit is contained in:
pikastech 2022-09-17 14:56:39 +08:00
parent 38aacc37d0
commit 295ff87e5d
5 changed files with 61 additions and 13 deletions

View File

@ -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}",

View File

@ -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);
}

View File

@ -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) {

View File

@ -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;
}

View File

@ -301,6 +301,10 @@
#define PIKA_STRING_UTF8_ENABLE 1
#endif
#ifndef PIKA_PRINT_LLD_ENABLE
#define PIKA_PRINT_LLD_ENABLE 1
#endif
/* configuration validation */
#endif