mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
support type(bool)
This commit is contained in:
parent
85d989028e
commit
2aafbbdc84
@ -107,11 +107,10 @@ typedef enum {
|
||||
/* clang-format off */
|
||||
|
||||
/* pikascript bool type */
|
||||
typedef enum {
|
||||
PIKA_TRUE = 1,
|
||||
PIKA_FALSE = 0,
|
||||
_PIKA_BOOL_ERR = -1,
|
||||
} PIKA_BOOL;
|
||||
#define PIKA_BOOL int64_t
|
||||
#define PIKA_TRUE 1
|
||||
#define PIKA_FALSE 0
|
||||
#define _PIKA_BOOL_ERR -1
|
||||
|
||||
#define _PIKA_INT_ERR (-999999999)
|
||||
#define _PIKA_FLOAT_ERR (-999999999.0)
|
||||
|
22
src/PikaVM.c
22
src/PikaVM.c
@ -2406,9 +2406,9 @@ static void _OPT_EQU(OperatorInfo* op) {
|
||||
goto exit;
|
||||
exit:
|
||||
if (op->opt[0] == '=') {
|
||||
op->res = arg_setInt(op->res, "", is_equ);
|
||||
op->res = arg_setBool(op->res, "", is_equ);
|
||||
} else {
|
||||
op->res = arg_setInt(op->res, "", !is_equ);
|
||||
op->res = arg_setBool(op->res, "", !is_equ);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -2492,7 +2492,7 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
||||
if (data[1] == 0) {
|
||||
switch (data[0]) {
|
||||
case '<':
|
||||
op.res = arg_setInt(op.res, "", op.f1 < op.f2);
|
||||
op.res = arg_setBool(op.res, "", op.f1 < op.f2);
|
||||
goto exit;
|
||||
case '*':
|
||||
if (op.num == 1) {
|
||||
@ -2554,9 +2554,9 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
||||
if (data[1] == 'i' && data[2] == 'n') {
|
||||
if (op.t1 == ARG_TYPE_STRING && op.t2 == ARG_TYPE_STRING) {
|
||||
if (strstr(arg_getStr(op.a2), arg_getStr(op.a1))) {
|
||||
op.res = arg_setInt(op.res, "", 1);
|
||||
op.res = arg_setBool(op.res, "", PIKA_TRUE);
|
||||
} else {
|
||||
op.res = arg_setInt(op.res, "", 0);
|
||||
op.res = arg_setBool(op.res, "", PIKA_FALSE);
|
||||
}
|
||||
goto exit;
|
||||
}
|
||||
@ -2584,7 +2584,7 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
||||
0x00, /* const pool */
|
||||
};
|
||||
pikaVM_runByteCode(obj2, (uint8_t*)bytes);
|
||||
op.res = arg_setInt(op.res, "", obj_getInt(obj2, "__res"));
|
||||
op.res = arg_setBool(op.res, "", obj_getInt(obj2, "__res"));
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
@ -2628,14 +2628,14 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
||||
goto exit;
|
||||
}
|
||||
if (data[0] == '>' && data[1] == '=') {
|
||||
op.res = arg_setInt(
|
||||
op.res = arg_setBool(
|
||||
op.res, "",
|
||||
(op.f1 > op.f2) ||
|
||||
((op.f1 - op.f2) * (op.f1 - op.f2) < (pika_float)0.000001));
|
||||
goto exit;
|
||||
}
|
||||
if (data[0] == '<' && data[1] == '=') {
|
||||
op.res = arg_setInt(
|
||||
op.res = arg_setBool(
|
||||
op.res, "",
|
||||
(op.f1 < op.f2) ||
|
||||
((op.f1 - op.f2) * (op.f1 - op.f2) < (pika_float)0.000001));
|
||||
@ -2665,17 +2665,17 @@ static Arg* VM_instruction_handler_OPT(PikaObj* self,
|
||||
}
|
||||
if (data[0] == ' ' && data[1] == 'a' && data[2] == 'n' && data[3] == 'd' &&
|
||||
data[4] == ' ') {
|
||||
op.res = arg_setInt(op.res, "", op.i1 && op.i2);
|
||||
op.res = arg_setBool(op.res, "", op.i1 && op.i2);
|
||||
goto exit;
|
||||
}
|
||||
if (data[0] == ' ' && data[1] == 'o' && data[2] == 'r' && data[3] == ' ' &&
|
||||
data[4] == 0) {
|
||||
op.res = arg_setInt(op.res, "", op.i1 || op.i2);
|
||||
op.res = arg_setBool(op.res, "", op.i1 || op.i2);
|
||||
goto exit;
|
||||
}
|
||||
if (data[0] == ' ' && data[1] == 'n' && data[2] == 'o' && data[3] == 't' &&
|
||||
data[4] == ' ' && data[5] == 0) {
|
||||
op.res = arg_setInt(op.res, "", !op.i2);
|
||||
op.res = arg_setBool(op.res, "", !op.i2);
|
||||
goto exit;
|
||||
}
|
||||
exit:
|
||||
|
@ -309,6 +309,7 @@ Arg* arg_toStrArg(Arg* arg) {
|
||||
if (type == ARG_TYPE_METHOD_NATIVE) {
|
||||
MethodProp* method_store = (MethodProp*)arg_getContent(arg);
|
||||
if (strEqu(method_store->name, "int") ||
|
||||
strEqu(method_store->name, "bool") ||
|
||||
strEqu(method_store->name, "float") ||
|
||||
strEqu(method_store->name, "str") ||
|
||||
strEqu(method_store->name, "bytes") ||
|
||||
|
@ -195,6 +195,8 @@ int64_t args_getInt(Args* self, char* name) {
|
||||
return arg_getInt(arg);
|
||||
} else if (arg_type == ARG_TYPE_FLOAT) {
|
||||
return (int)arg_getFloat(arg);
|
||||
} else if (arg_type == ARG_TYPE_BOOL) {
|
||||
return arg_getBool(arg);
|
||||
}
|
||||
return _PIKA_INT_ERR;
|
||||
}
|
||||
|
@ -1082,10 +1082,10 @@ TEST(VM, is) {
|
||||
obj_run(self, line);
|
||||
/* collect */
|
||||
/* assert */
|
||||
EXPECT_EQ(obj_getInt(self, "res1"), 1);
|
||||
EXPECT_EQ(obj_getInt(self, "res2"), 1);
|
||||
EXPECT_EQ(obj_getInt(self, "res3"), 1);
|
||||
EXPECT_EQ(obj_getInt(self, "res4"), 0);
|
||||
EXPECT_EQ(obj_getBool(self, "res1"), PIKA_TRUE);
|
||||
EXPECT_EQ(obj_getBool(self, "res2"), PIKA_TRUE);
|
||||
EXPECT_EQ(obj_getBool(self, "res3"), PIKA_TRUE);
|
||||
EXPECT_EQ(obj_getBool(self, "res4"), PIKA_FALSE);
|
||||
/* deinit */
|
||||
obj_deinit(self);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user