mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
tested ok byteCode_getTotleSize
This commit is contained in:
parent
716abf833c
commit
a4cd654b45
6
port/linux/.vscode/settings.json
vendored
6
port/linux/.vscode/settings.json
vendored
@ -31,7 +31,11 @@
|
||||
"datastack.h": "c",
|
||||
"dataqueueobj.h": "c",
|
||||
"datastring.h": "c",
|
||||
"datalink.h": "c"
|
||||
"datalink.h": "c",
|
||||
"array": "c",
|
||||
"string_view": "c",
|
||||
"initializer_list": "c",
|
||||
"utility": "c"
|
||||
},
|
||||
"python.formatting.provider": "autopep8"
|
||||
}
|
@ -773,15 +773,12 @@ TEST(ByteCodeUnit, base) {
|
||||
ByteCodeUnit bu = {
|
||||
.deepth = 0,
|
||||
.isNewLine_instruct = 0,
|
||||
.data_size = 0,
|
||||
};
|
||||
byteCodeUnit_setDataSize(&bu, 11);
|
||||
byteCodeUnit_setBlockDeepth(&bu, 2);
|
||||
byteCodeUnit_setIsNewLine(&bu, 1);
|
||||
byteCodeUnit_setInvokeDeepth(&bu, 3);
|
||||
byteCodeUnit_setInstruct(&bu, (Instruct)4);
|
||||
|
||||
EXPECT_EQ(byteCodeUnit_getDataSize(&bu), 11);
|
||||
EXPECT_EQ(byteCodeUnit_getBlockDeepth(&bu), 2);
|
||||
EXPECT_EQ(byteCodeUnit_getIsNewLine(&bu), 1);
|
||||
EXPECT_EQ(byteCodeUnit_getInvokeDeepth(&bu), 3);
|
||||
@ -790,9 +787,11 @@ TEST(ByteCodeUnit, base) {
|
||||
|
||||
TEST(ByteCodeUnit, new_) {
|
||||
char data[] = "test";
|
||||
ByteCodeUnit* bu_p = New_byteCodeUnit(strGetSize(data) + 1);
|
||||
ByteCodeUnit* bu_p = New_byteCodeUnit(strGetSize(data));
|
||||
byteCodeUnit_setData(bu_p, data);
|
||||
EXPECT_STREQ(byteCodeUnit_getData(bu_p), (char*)"test");
|
||||
EXPECT_EQ(byteCodeUnit_getTotleSize(bu_p), 8);
|
||||
EXPECT_EQ(byteCodeUnit_getTotleSize_withDataSize(strGetSize(data)), 8);
|
||||
byteCodeUnit_deinit(bu_p);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
@ -839,11 +839,11 @@ exit:
|
||||
}
|
||||
|
||||
ByteCodeUnit* New_byteCodeUnit(uint8_t data_size) {
|
||||
ByteCodeUnit* self = pikaMalloc(sizeof(ByteCodeUnit) + data_size);
|
||||
byteCodeUnit_setDataSize(self, data_size);
|
||||
ByteCodeUnit* self =
|
||||
pikaMalloc(byteCodeUnit_getTotleSize_withDataSize(data_size));
|
||||
return self;
|
||||
}
|
||||
|
||||
void byteCodeUnit_deinit(ByteCodeUnit* self) {
|
||||
pikaFree(self, sizeof(ByteCodeUnit) + byteCodeUnit_getDataSize(self));
|
||||
pikaFree(self, (byteCodeUnit_getTotleSize(self)));
|
||||
}
|
||||
|
28
src/PikaVM.h
28
src/PikaVM.h
@ -38,7 +38,6 @@ enum Instruct {
|
||||
typedef struct ByteCodeUnit_t {
|
||||
uint8_t deepth;
|
||||
uint8_t isNewLine_instruct;
|
||||
uint8_t data_size;
|
||||
uint8_t data[];
|
||||
} ByteCodeUnit;
|
||||
|
||||
@ -47,7 +46,7 @@ VMParameters* pikaVM_runAsm(PikaObj* self, char* pikaAsm);
|
||||
|
||||
#define byteCodeUnit_getBlockDeepth(self) (((self)->deepth) & 0x0F)
|
||||
#define byteCodeUnit_getInvokeDeepth(self) (((self)->deepth) >> 4)
|
||||
#define byteCodeUnit_getDataSize(self) ((self)->data_size)
|
||||
#define byteCodeUnit_getDataSize(self) (strGetSize((char*)(self)->data))
|
||||
#define byteCodeUnit_getData(self) (char*)((self)->data)
|
||||
#define byteCodeUnit_getInstruct(self) ((self)->isNewLine_instruct & 0x7F)
|
||||
#define byteCodeUnit_getIsNewLine(self) ((self)->isNewLine_instruct >> 7)
|
||||
@ -62,27 +61,28 @@ VMParameters* pikaVM_runAsm(PikaObj* self, char* pikaAsm);
|
||||
((self)->deepth) |= ((0x0F & val) << 4); \
|
||||
} while (0)
|
||||
|
||||
#define byteCodeUnit_setDataSize(self, val) \
|
||||
do { \
|
||||
((self)->data_size) = val; \
|
||||
#define byteCodeUnit_setData(self, val) \
|
||||
do { \
|
||||
__platform_memcpy((self)->data, val, strGetSize(val) + 1); \
|
||||
} while (0)
|
||||
|
||||
#define byteCodeUnit_setData(self, val) \
|
||||
do { \
|
||||
__platform_memcpy((self)->data, val, byteCodeUnit_getDataSize(self)); \
|
||||
} while (0)
|
||||
|
||||
#define byteCodeUnit_setInstruct(self, val) \
|
||||
do { \
|
||||
#define byteCodeUnit_setInstruct(self, val) \
|
||||
do { \
|
||||
((self)->isNewLine_instruct) |= (0x7F & val); \
|
||||
} while (0)
|
||||
|
||||
#define byteCodeUnit_setIsNewLine(self, val) \
|
||||
do { \
|
||||
#define byteCodeUnit_setIsNewLine(self, val) \
|
||||
do { \
|
||||
((self)->isNewLine_instruct) |= ((0x01 & val) << 7); \
|
||||
} while (0)
|
||||
|
||||
ByteCodeUnit* New_byteCodeUnit(uint8_t data_size);
|
||||
void byteCodeUnit_deinit(ByteCodeUnit* self);
|
||||
|
||||
#define __get_alined_size(size) (((((size)-1) / 4) + 1) * 4)
|
||||
#define byteCodeUnit_getTotleSize_withDataSize(data_size) \
|
||||
(__get_alined_size(sizeof(ByteCodeUnit) + data_size + 1))
|
||||
#define byteCodeUnit_getTotleSize(self) \
|
||||
(byteCodeUnit_getTotleSize_withDataSize(byteCodeUnit_getDataSize(self)))
|
||||
|
||||
#endif
|
||||
|
@ -35,7 +35,7 @@ void* pikaMalloc(uint32_t size) {
|
||||
if (0 != __is_locked_pikaMemory()) {
|
||||
__platform_wait();
|
||||
}
|
||||
|
||||
|
||||
//! if you unsure about the __impl_pikaMalloc, uncomment this to force alignment
|
||||
#if 0
|
||||
/* force alignment to avoid unaligned access */
|
||||
|
Loading…
x
Reference in New Issue
Block a user