update bytecode_gen to v1.5.2

This commit is contained in:
lyon 2022-03-24 18:04:32 +08:00
parent f4b1b5fbd8
commit 4ddb60726a
15 changed files with 505 additions and 119 deletions

View File

View File

@ -0,0 +1,3 @@
{
"CurrentProjectSetting": "x64-Debug"
}

View File

@ -0,0 +1,8 @@
{
"ExpandedNodes": [
"",
"\\pikascript"
],
"SelectedNode": "\\main.c",
"PreviewInSolutionExplorer": false
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -5,6 +5,8 @@
#include "PikaParser.h"
#include "dataStrs.h"
PikaObj* __pikaMain;
void main() {
FILE* file_mian_py = fopen("main.py", "rb");
if (NULL == file_mian_py) {
@ -29,55 +31,3 @@ void main() {
return;
}
/* portable */
void __platformDisableIrqHandle(void) {
/* disable irq to support thread */
}
void __platformEnableIrqHandle(void) {
/* disable irq to support thread */
}
void* __platformMalloc(size_t size) {
return malloc(size);
}
void __platformFree(void* ptr) {
free(ptr);
}
void* __impl_pikaMalloc(size_t size) {
return __platformMalloc(size);
}
void __impl_pikaFree(void* ptrm, size_t size) {
__platformFree(ptrm);
}
void __platformPoolInit(void) {}
uint8_t __is_quick_malloc(void) {
return 0;
}
void __quick_malloc_enable(void) {}
void __quick_malloc_disable(void) {}
uint8_t __isLocked_pikaMemory(void) {
return 0;
}
void __platformPrintf(char* fmt, ...) {
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
}
char* __platformLoadPikaAsm(void) {
/* faild */
return NULL;
}
int32_t __platformSavePikaAsm(char* PikaAsm) {
/* faild */
return 1;
}
uint8_t __platformAsmIsToFlash(char* pyMultiLine) {
/* not to flash */
return 0;
}
int32_t __platformSavePikaAsmEOF(void) {
return 1;
}

View File

@ -1,28 +1,95 @@
time = STM32.Time()
uart = STM32.UART()
adc = STM32.ADC()
pin = STM32.GPIO()
pwm = STM32.PWM()
uart = STM32.UART()
rgb = PikaPiZero.RGB()
import PikaStdLib
import PikaStdData
mem = PikaStdLib.MemChecker()
op = PikaMath.Operator()
mem.resetMax()
def EXPECT_EQ(test_name, input, expected):
print('-----TEST-----')
print(test_name)
if input != expected:
print('[Error]')
print(test_name)
print('[info] Expected:')
print(expected)
print('[info] Input:')
print(input)
# error
while True:
is_error = 1
else:
print('[ OK ]')
uart.init()
uart.setId(1)
uart.setBaudRate(115200)
uart.enable()
a = 0
for i in range(0, 10):
if i == 5:
continue
a = a + i
EXPECT_EQ('for_if_continue', a, 40)
a = 0
for i in range(0, 10):
if i == 5:
break
a = a + i
EXPECT_EQ('for_if_break', a, 10)
rgb.init()
rgb.enable()
a = 0
for i in range(0, 10):
for k in range(0, 3):
# print(k)
a = a + k
EXPECT_EQ('for_for_in_range', a, 30)
print('hello 2')
a = 0
for i in range(0, 10):
# print(i)
a = a + i
EXPECT_EQ('for_in_range', a, 45)
list = PikaStdData.List()
list.append(7)
list.append('eee')
len = list.len()
for item in list:
# print(item)
a = item
EXPECT_EQ('list_for_loop', a, 'eee')
list = PikaStdData.List()
list.append(7)
list.append('eee')
len = list.len()
a1 = list.get(0)
a2 = list.get(1)
res = iter(list)
EXPECT_EQ('iter', res, list)
dict = PikaStdData.Dict()
dict.set('a', 1)
dict.set('b', 2)
dict.remove('b')
a = dict.get('a')
b = dict.get('b')
EXPECT_EQ('PikaStdData', a, 1)
EXPECT_EQ('PikaStdData_2', b, 0)
num = 0
i = 2
for i in range(2,30):
j=2
is_prime = 1
for j in range(2,i):
if i%j==0 :
is_prime = 0
break
if is_prime:
num = num + i
EXPECT_EQ('prime_number_30', num, 129)
print('====================')
print('[Unit Tests Succeed]')
print('====================')
print('mem used max:')
mem.max()
while True:
time.sleep_ms(10)
rgb.flow()
print('flowing')

View File

@ -1,68 +1,426 @@
B0
0 RUN STM32.Time
0 OUT time
0 REF importPikaStdLib
B0
0 RUN STM32.UART
0 OUT uart
0 REF importPikaStdData
B0
0 RUN STM32.ADC
0 OUT adc
B0
0 RUN STM32.GPIO
0 OUT pin
B0
0 RUN STM32.PWM
0 OUT pwm
B0
0 RUN STM32.UART
0 OUT uart
B0
0 RUN PikaPiZero.RGB
0 OUT rgb
B0
0 RUN PikaStdLib.MemChecker
0 OUT mem
B0
0 RUN PikaMath.Operator
0 OUT op
0 RUN mem.resetMax
B0
0 DEF EXPECT_EQ(test_name,input,expected)
0 JMP 1
B1
1 STR -----TEST-----
0 RUN print
B1
1 REF test_name
0 RUN print
B1
1 REF input
1 REF expected
0 OPT !=
0 JEZ 1
B2
1 STR [Error]
0 RUN print
B2
1 REF test_name
0 RUN print
B2
1 STR [info] Expected:
0 RUN print
B2
1 REF expected
0 RUN print
B2
1 STR [info] Input:
0 RUN print
B2
1 REF input
0 RUN print
B2
0 REF True
0 JEZ 2
B3
0 NUM 1
0 OUT is_err or
B2
0 JMP -1
B1
0 NEL 1
B2
1 STR [ OK ]
0 RUN print
B1
0 RET
B0
B0
0 RUN uart.init
0 NUM 0
0 OUT a
B0
2 NUM 0
2 NUM 10
1 RUN range
0 RUN iter
0 OUT _l0
0 REF _r1
0 REF _r2
0 REF _r3
0 OUT _l0.a1
0 OUT _l0.a2
0 OUT _l0.a3
B0
0 RUN _l0.__next__
0 OUT i
0 EST i
0 JEZ 2
B1
1 REF i
1 NUM 5
0 OPT ==
0 JEZ 1
B2
0 CTN
B1
1 REF a
1 REF i
0 OPT +
0 OUT a
B0
0 JMP -1
B0
0 DEL _l0
B0
1 STR for_if_continue
1 REF a
1 NUM 40
0 RUN EXPECT_EQ
B0
B0
0 NUM 0
0 OUT a
B0
2 NUM 0
2 NUM 10
1 RUN range
0 RUN iter
0 OUT _l0
0 REF _r1
0 REF _r2
0 REF _r3
0 OUT _l0.a1
0 OUT _l0.a2
0 OUT _l0.a3
B0
0 RUN _l0.__next__
0 OUT i
0 EST i
0 JEZ 2
B1
1 REF i
1 NUM 5
0 OPT ==
0 JEZ 1
B2
0 BRK
B1
1 REF a
1 REF i
0 OPT +
0 OUT a
B0
0 JMP -1
B0
0 DEL _l0
B0
1 STR for_if_break
1 REF a
1 NUM 10
0 RUN EXPECT_EQ
B0
B0
0 NUM 0
0 OUT a
B0
2 NUM 0
2 NUM 10
1 RUN range
0 RUN iter
0 OUT _l0
0 REF _r1
0 REF _r2
0 REF _r3
0 OUT _l0.a1
0 OUT _l0.a2
0 OUT _l0.a3
B0
0 RUN _l0.__next__
0 OUT i
0 EST i
0 JEZ 2
B1
2 NUM 0
2 NUM 3
1 RUN range
0 RUN iter
0 OUT _l1
0 REF _r1
0 REF _r2
0 REF _r3
0 OUT _l1.a1
0 OUT _l1.a2
0 OUT _l1.a3
B1
0 RUN _l1.__next__
0 OUT k
0 EST k
0 JEZ 2
B2
1 REF a
1 REF k
0 OPT +
0 OUT a
B1
0 JMP -1
B1
0 DEL _l1
B0
0 JMP -1
B0
0 DEL _l0
B0
1 STR for_for_in_range
1 REF a
1 NUM 30
0 RUN EXPECT_EQ
B0
B0
0 NUM 0
0 OUT a
B0
2 NUM 0
2 NUM 10
1 RUN range
0 RUN iter
0 OUT _l0
0 REF _r1
0 REF _r2
0 REF _r3
0 OUT _l0.a1
0 OUT _l0.a2
0 OUT _l0.a3
B0
0 RUN _l0.__next__
0 OUT i
0 EST i
0 JEZ 2
B1
1 REF a
1 REF i
0 OPT +
0 OUT a
B0
0 JMP -1
B0
0 DEL _l0
B0
1 STR for_in_range
1 REF a
1 NUM 45
0 RUN EXPECT_EQ
B0
B0
0 RUN PikaStdData.List
0 OUT list
B0
1 NUM 7
0 RUN list.append
B0
1 STR eee
0 RUN list.append
B0
0 RUN list.len
0 OUT len
B0
1 REF list
0 RUN iter
0 OUT _l0
B0
0 RUN _l0.__next__
0 OUT item
0 EST item
0 JEZ 2
B1
0 REF item
0 OUT a
B0
0 JMP -1
B0
0 DEL _l0
B0
1 STR list_for_loop
1 REF a
1 STR eee
0 RUN EXPECT_EQ
B0
B0
B0
0 RUN PikaStdData.List
0 OUT list
B0
1 NUM 7
0 RUN list.append
B0
1 STR eee
0 RUN list.append
B0
0 RUN list.len
0 OUT len
B0
1 NUM 0
0 RUN list.get
0 OUT a1
B0
1 NUM 1
0 RUN uart.setId
0 RUN list.get
0 OUT a2
B0
1 NUM 115200
0 RUN uart.setBaudRate
1 REF list
0 RUN iter
0 OUT res
B0
0 RUN uart.enable
1 STR iter
1 REF res
1 REF list
0 RUN EXPECT_EQ
B0
B0
0 RUN rgb.init
0 RUN PikaStdData.Dict
0 OUT dict
B0
0 RUN rgb.enable
1 STR a
1 NUM 1
0 RUN dict.set
B0
1 STR b
1 NUM 2
0 RUN dict.set
B0
1 STR b
0 RUN dict.remove
B0
1 STR a
0 RUN dict.get
0 OUT a
B0
1 STR b
0 RUN dict.get
0 OUT b
B0
1 STR PikaStdData
1 REF a
1 NUM 1
0 RUN EXPECT_EQ
B0
1 STR PikaStdData_2
1 REF b
1 NUM 0
0 RUN EXPECT_EQ
B0
B0
1 STR hello 2
0 NUM 0
0 OUT num
B0
0 NUM 2
0 OUT i
B0
2 NUM 2
2 NUM 30
1 RUN range
0 RUN iter
0 OUT _l0
0 REF _r1
0 REF _r2
0 REF _r3
0 OUT _l0.a1
0 OUT _l0.a2
0 OUT _l0.a3
B0
0 RUN _l0.__next__
0 OUT i
0 EST i
0 JEZ 2
B1
0 NUM 2
0 OUT j
B1
0 NUM 1
0 OUT is_prime
B1
2 NUM 2
2 REF i
1 RUN range
0 RUN iter
0 OUT _l1
0 REF _r1
0 REF _r2
0 REF _r3
0 OUT _l1.a1
0 OUT _l1.a2
0 OUT _l1.a3
B1
0 RUN _l1.__next__
0 OUT j
0 EST j
0 JEZ 2
B2
2 REF i
2 REF j
1 OPT %
1 NUM 0
0 OPT ==
0 JEZ 1
B3
0 NUM 0
0 OUT is_prime
B3
0 BRK
B1
0 JMP -1
B1
0 DEL _l1
B1
0 REF is_prime
0 JEZ 1
B2
1 REF num
1 REF i
0 OPT +
0 OUT num
B0
0 JMP -1
B0
0 DEL _l0
B0
1 STR prime_number_30
1 REF num
1 NUM 129
0 RUN EXPECT_EQ
B0
B0
B0
1 STR ====================
0 RUN print
B0
1 STR [Unit Tests Succeed]
0 RUN print
B0
1 STR ====================
0 RUN print
B0
1 STR mem used max:
0 RUN print
B0
0 RUN mem.max
B0
B0
0 REF True
0 JEZ 2
B1
1 NUM 10
0 RUN time.sleep_ms
B1
0 RUN rgb.flow
B1
1 STR flowing
0 RUN print
B0
0 JMP -1
B0
B0

View File

@ -1 +1 @@
pikascript-core==v1.2.6
pikascript-core==v1.5.2