mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-02-05 17:28:23 +08:00
support and tested char() and ord() builtin-fun
This commit is contained in:
parent
09bb50a98c
commit
d3fd9512b4
@ -23,6 +23,8 @@ class SysObj(BaseObj):
|
|||||||
def list(self) -> any: ...
|
def list(self) -> any: ...
|
||||||
def dict(self) -> any: ...
|
def dict(self) -> any: ...
|
||||||
def hex(self, val: int) -> str: ...
|
def hex(self, val: int) -> str: ...
|
||||||
|
def ord(self, val: str) -> int: ...
|
||||||
|
def chr(self, val: int) -> str: ...
|
||||||
|
|
||||||
|
|
||||||
class RangeObj(TinyObj):
|
class RangeObj(TinyObj):
|
||||||
|
@ -270,14 +270,28 @@ Arg* PikaStdLib_SysObj_dict(PikaObj* self) {
|
|||||||
return arg_setNull(NULL);
|
return arg_setNull(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* PikaStdLib_SysObj_hex(PikaObj *self, int val){
|
char* PikaStdLib_SysObj_hex(PikaObj* self, int val) {
|
||||||
char buff[PIKA_SPRINTF_BUFF_SIZE] = {0};
|
char buff[PIKA_SPRINTF_BUFF_SIZE] = {0};
|
||||||
if(val > 0){
|
if (val > 0) {
|
||||||
__platform_sprintf(buff, "0x%02x", val);
|
__platform_sprintf(buff, "0x%02x", val);
|
||||||
}else{
|
} else {
|
||||||
__platform_sprintf(buff, "-0x%02x", -val);
|
__platform_sprintf(buff, "-0x%02x", -val);
|
||||||
}
|
}
|
||||||
/* load the string from stack to heap */
|
/* load the string from stack to heap */
|
||||||
obj_setStr(self, "__buf", buff);
|
obj_setStr(self, "__buf", buff);
|
||||||
return obj_getStr(self, "__buf");
|
return obj_getStr(self, "__buf");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int PikaStdLib_SysObj_ord(PikaObj* self, char* val) {
|
||||||
|
return (int)val[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
char* PikaStdLib_SysObj_chr(PikaObj* self, int val) {
|
||||||
|
char buff[PIKA_SPRINTF_BUFF_SIZE] = {0};
|
||||||
|
char to_str[] = "0";
|
||||||
|
to_str[0] = val;
|
||||||
|
__platform_sprintf(buff, "%s", to_str);
|
||||||
|
/* load the string from stack to heap */
|
||||||
|
obj_setStr(self, "__buf", buff);
|
||||||
|
return obj_getStr(self, "__buf");
|
||||||
|
}
|
||||||
|
@ -23,6 +23,8 @@ class SysObj(BaseObj):
|
|||||||
def list(self) -> any: ...
|
def list(self) -> any: ...
|
||||||
def dict(self) -> any: ...
|
def dict(self) -> any: ...
|
||||||
def hex(self, val: int) -> str: ...
|
def hex(self, val: int) -> str: ...
|
||||||
|
def ord(self, val: str) -> int: ...
|
||||||
|
def chr(self, val: int) -> str: ...
|
||||||
|
|
||||||
|
|
||||||
class RangeObj(TinyObj):
|
class RangeObj(TinyObj):
|
||||||
|
@ -270,14 +270,28 @@ Arg* PikaStdLib_SysObj_dict(PikaObj* self) {
|
|||||||
return arg_setNull(NULL);
|
return arg_setNull(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* PikaStdLib_SysObj_hex(PikaObj *self, int val){
|
char* PikaStdLib_SysObj_hex(PikaObj* self, int val) {
|
||||||
char buff[PIKA_SPRINTF_BUFF_SIZE] = {0};
|
char buff[PIKA_SPRINTF_BUFF_SIZE] = {0};
|
||||||
if(val > 0){
|
if (val > 0) {
|
||||||
__platform_sprintf(buff, "0x%02x", val);
|
__platform_sprintf(buff, "0x%02x", val);
|
||||||
}else{
|
} else {
|
||||||
__platform_sprintf(buff, "-0x%02x", -val);
|
__platform_sprintf(buff, "-0x%02x", -val);
|
||||||
}
|
}
|
||||||
/* load the string from stack to heap */
|
/* load the string from stack to heap */
|
||||||
obj_setStr(self, "__buf", buff);
|
obj_setStr(self, "__buf", buff);
|
||||||
return obj_getStr(self, "__buf");
|
return obj_getStr(self, "__buf");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int PikaStdLib_SysObj_ord(PikaObj* self, char* val) {
|
||||||
|
return (int)val[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
char* PikaStdLib_SysObj_chr(PikaObj* self, int val) {
|
||||||
|
char buff[PIKA_SPRINTF_BUFF_SIZE] = {0};
|
||||||
|
char to_str[] = "0";
|
||||||
|
to_str[0] = val;
|
||||||
|
__platform_sprintf(buff, "%s", to_str);
|
||||||
|
/* load the string from stack to heap */
|
||||||
|
obj_setStr(self, "__buf", buff);
|
||||||
|
return obj_getStr(self, "__buf");
|
||||||
|
}
|
||||||
|
@ -1805,3 +1805,33 @@ TEST(pikaMain, builtin_hex) {
|
|||||||
obj_deinit(self);
|
obj_deinit(self);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(pikaMain, builtin_ord) {
|
||||||
|
/* init */
|
||||||
|
pikaMemInfo.heapUsedMax = 0;
|
||||||
|
/* run */
|
||||||
|
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
|
||||||
|
__platform_printf("BEGIN\r\n");
|
||||||
|
obj_run(self, "ord('a')\n");
|
||||||
|
/* assert */
|
||||||
|
EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
|
||||||
|
EXPECT_STREQ(log_buff[0], "97\r\n");
|
||||||
|
/* deinit */
|
||||||
|
obj_deinit(self);
|
||||||
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(pikaMain, builtin_chr) {
|
||||||
|
/* init */
|
||||||
|
pikaMemInfo.heapUsedMax = 0;
|
||||||
|
/* run */
|
||||||
|
PikaObj* self = newRootObj("pikaMain", New_PikaMain);
|
||||||
|
__platform_printf("BEGIN\r\n");
|
||||||
|
obj_run(self, "chr(97)\n");
|
||||||
|
/* assert */
|
||||||
|
EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
|
||||||
|
EXPECT_STREQ(log_buff[0], "a\r\n");
|
||||||
|
/* deinit */
|
||||||
|
obj_deinit(self);
|
||||||
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user