diff --git a/bsp/stm32g030c8/MDK-ARM/stm32g030c8.uvprojx b/bsp/stm32g030c8/MDK-ARM/stm32g030c8.uvprojx index 0541c3a90..496c8d616 100644 --- a/bsp/stm32g030c8/MDK-ARM/stm32g030c8.uvprojx +++ b/bsp/stm32g030c8/MDK-ARM/stm32g030c8.uvprojx @@ -645,6 +645,41 @@ 1 ..\pikascript\pikascript-api\pikaScript.c + + PikaStdLib_MemChecker-api.c + 1 + ..\pikascript\pikascript-api\PikaStdLib_MemChecker-api.c + + + PikaStdLib_SysObj-api.c + 1 + ..\pikascript\pikascript-api\PikaStdLib_SysObj-api.c + + + PikaMath_Operator-api.c + 1 + ..\pikascript\pikascript-api\PikaMath_Operator-api.c + + + PikaMath-api.c + 1 + ..\pikascript\pikascript-api\PikaMath-api.c + + + PikaStdLib-api.c + 1 + ..\pikascript\pikascript-api\PikaStdLib-api.c + + + PikaPiZero_RGB-api.c + 1 + ..\pikascript\pikascript-api\PikaPiZero_RGB-api.c + + + PikaPiZero-api.c + 1 + ..\pikascript\pikascript-api\PikaPiZero-api.c + PikaStdDevice_ADC-api.c 1 @@ -655,6 +690,11 @@ 1 ..\pikascript\pikascript-api\PikaStdDevice_GPIO-api.c + + PikaStdDevice_PWM-api.c + 1 + ..\pikascript\pikascript-api\PikaStdDevice_PWM-api.c + PikaStdDevice_Time-api.c 1 @@ -665,16 +705,6 @@ 1 ..\pikascript\pikascript-api\PikaStdDevice_UART-api.c - - PikaStdLib_MemChecker-api.c - 1 - ..\pikascript\pikascript-api\PikaStdLib_MemChecker-api.c - - - PikaStdLib_SysObj-api.c - 1 - ..\pikascript\pikascript-api\PikaStdLib_SysObj-api.c - STM32_ADC-api.c 1 @@ -685,6 +715,11 @@ 1 ..\pikascript\pikascript-api\STM32_GPIO-api.c + + STM32_PWM-api.c + 1 + ..\pikascript\pikascript-api\STM32_PWM-api.c + STM32_Time-api.c 1 @@ -696,30 +731,40 @@ ..\pikascript\pikascript-api\STM32_UART-api.c - PikaStdDevice_PWM-api.c + STM32-api.c 1 - ..\pikascript\pikascript-api\PikaStdDevice_PWM-api.c - - - STM32_PWM-api.c - 1 - ..\pikascript\pikascript-api\STM32_PWM-api.c - - - PikaPiZero_RGB-api.c - 1 - ..\pikascript\pikascript-api\PikaPiZero_RGB-api.c - - - PikaMath_Operator-api.c - 1 - ..\pikascript\pikascript-api\PikaMath_Operator-api.c + ..\pikascript\pikascript-api\STM32-api.c pikascript-lib + + PikaStdLib_MemChecker.c + 1 + ..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_MemChecker.c + + + PikaStdLib_SysObj.c + 1 + ..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_SysObj.c + + + RGB_ASM.lib + 4 + ..\pikascript\pikascript-lib\PikaPiZero\RGB_ASM.lib + + + PikaMath_Operator.c + 1 + ..\pikascript\pikascript-lib\PikaMath\PikaMath_Operator.c + + + PikaPiZero_RGB.c + 1 + ..\pikascript\pikascript-lib\PikaPiZero\PikaPiZero_RGB.c + PikaStdDeivce_GPIO.c 1 @@ -730,6 +775,11 @@ 1 ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_ADC.c + + PikaStdDevice_PWM.c + 1 + ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_PWM.c + PikaStdDevice_Time.c 1 @@ -740,21 +790,16 @@ 1 ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_UART.c - - PikaStdLib_MemChecker.c - 1 - ..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_MemChecker.c - - - PikaStdLib_SysObj.c - 1 - ..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_SysObj.c - STM32_ADC.c 1 ..\pikascript\pikascript-lib\STM32\STM32_ADC.c + + STM32_Code.c + 1 + ..\pikascript\pikascript-lib\STM32\STM32_Code.c + STM32_common.c 1 @@ -765,6 +810,11 @@ 1 ..\pikascript\pikascript-lib\STM32\STM32_GPIO.c + + STM32_PWM.c + 1 + ..\pikascript\pikascript-lib\STM32\STM32_PWM.c + STM32_Time.c 1 @@ -775,56 +825,6 @@ 1 ..\pikascript\pikascript-lib\STM32\STM32_UART.c - - STM32_PWM.c - 1 - ..\pikascript\pikascript-lib\STM32\STM32_PWM.c - - - PikaStdDevice_PWM.c - 1 - ..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_PWM.c - - - PikaPiZero_RGB.c - 1 - ..\pikascript\pikascript-lib\PikaPiZero\PikaPiZero_RGB.c - - - RGB_ASM.lib - 4 - ..\pikascript\pikascript-lib\PikaPiZero\RGB_ASM.lib - - - STM32_Code.c - 1 - ..\pikascript\pikascript-lib\STM32\STM32_Code.c - - - PikaMath_Operator.c - 1 - ..\pikascript\pikascript-lib\PikaMath\PikaMath_Operator.c - - - PikaBlock.c - 1 - ..\pikascript\pikascript-lib\PikaRunExternControl\PikaBlock.c - - - PikaIf.c - 1 - ..\pikascript\pikascript-lib\PikaRunExternControl\PikaIf.c - - - PikaRunExternContral.c - 1 - ..\pikascript\pikascript-lib\PikaRunExternControl\PikaRunExternContral.c - - - PikaWhile.c - 1 - ..\pikascript\pikascript-lib\PikaRunExternControl\PikaWhile.c - @@ -910,6 +910,11 @@ 1 ..\pikascript\pikascript-core\PikaVM.c + + dataStack.c + 1 + ..\pikascript\pikascript-core\dataStack.c + diff --git a/bsp/stm32g030c8/pikascript/main.py b/bsp/stm32g030c8/pikascript/main.py index 9e6ad01ad..e007ce1b2 100644 --- a/bsp/stm32g030c8/pikascript/main.py +++ b/bsp/stm32g030c8/pikascript/main.py @@ -1,7 +1,7 @@ -import STM32 -import PikaPiZero import PikaStdLib import PikaMath +import STM32 +import PikaPiZero time = STM32.Time() uart = STM32.UART() diff --git a/bsp/stm32g030c8/pikascript/requestment.txt b/bsp/stm32g030c8/pikascript/requestment.txt index 8365f0d6d..af49778b4 100644 --- a/bsp/stm32g030c8/pikascript/requestment.txt +++ b/bsp/stm32g030c8/pikascript/requestment.txt @@ -1,5 +1,5 @@ pikascript-core==v1.0.0 -PikaStdLib==latest +PikaStdLib==v1.1.0 PikaStdDevice==latest STM32==v1.2.0 PikaPiZero==latest diff --git a/tools/pikaCompiler/rust-msc-latest-win10.exe b/tools/pikaCompiler/rust-msc-latest-win10.exe index 7f59646ed..6d84c2a21 100644 Binary files a/tools/pikaCompiler/rust-msc-latest-win10.exe and b/tools/pikaCompiler/rust-msc-latest-win10.exe differ diff --git a/tools/pikaCompiler/src/compiler.rs b/tools/pikaCompiler/src/compiler.rs index 86347bcc4..4d8348de5 100644 --- a/tools/pikaCompiler/src/compiler.rs +++ b/tools/pikaCompiler/src/compiler.rs @@ -48,17 +48,17 @@ impl Compiler { let package_name = my_string::get_last_token(&line, ' ').unwrap(); let package_obj_define = format!("{} = {}()", package_name, package_name); class_now.push_object(package_obj_define, &file_name); - return compiler; + return Compiler::analyze_file(compiler, package_name.to_string(), true); } class_now.script_list.add(&line); return compiler; } - pub fn analyze_file(mut compiler: Compiler, file_name: String) -> Compiler { + pub fn analyze_file(mut compiler: Compiler, file_name: String, is_top_pkg: bool) -> Compiler { println!("analyzing file: {}{}.py", compiler.source_path, file_name); let mut file = File::open(format!("{}{}.py", compiler.source_path, file_name)).unwrap(); /* solve package as top class */ - if file_name != "main" { + if file_name != "main" && is_top_pkg { let pkg_define = format!("class {}(TinyObj):", &file_name); let pacakge_now = match ClassInfo::new(&String::from(""), &pkg_define, true) { Some(s) => s, @@ -77,12 +77,17 @@ impl Compiler { let lines: Vec<&str> = file_str.split('\n').collect(); /* analyze each line of pikascript-api.py */ for line in lines.iter() { - compiler = Compiler::analyze_line(compiler, line.to_string(), &file_name); + compiler = Compiler::analyze_line(compiler, line.to_string(), &file_name, is_top_pkg); } return compiler; } - pub fn analyze_line(mut compiler: Compiler, line: String, file_name: &String) -> Compiler { + pub fn analyze_line( + mut compiler: Compiler, + line: String, + file_name: &String, + is_top_pkg: bool, + ) -> Compiler { let line = line.replace("\r", ""); if file_name == "main" { compiler = Compiler::analyze_main_line(compiler, &line); @@ -91,7 +96,7 @@ impl Compiler { if line.starts_with("import ") { let tokens: Vec<&str> = line.split(" ").collect(); let file = tokens[1]; - return Compiler::analyze_file(compiler, file.to_string()); + return Compiler::analyze_file(compiler, file.to_string(), false); } if line.starts_with("#") { @@ -110,20 +115,24 @@ impl Compiler { .or_insert(class_now); compiler.class_now_name = Some(class_name.clone()); - /* solve the class as method of package*/ - let package_now_name = match compiler.package_now_name.clone() { - Some(s) => s, - None => return compiler, - }; - let package_now = compiler.class_list.get_mut(&package_now_name).unwrap(); - let class_name_without_file = match my_string::get_last_token(&class_name, '_') { - Some(s) => s, - None => return compiler, - }; - let package_new_object_method = format!("def {}()->any:", class_name_without_file); - package_now.push_method(package_new_object_method); + if is_top_pkg { + /* solve the class as method of top package*/ + let package_now_name = match compiler.package_now_name.clone() { + Some(s) => s, + None => return compiler, + }; + let package_now = compiler.class_list.get_mut(&package_now_name).unwrap(); + let class_name_without_file = match my_string::get_last_token(&class_name, '_') { + Some(s) => s, + None => return compiler, + }; + let package_new_object_method = format!("def {}()->any:", class_name_without_file); + package_now.push_method(package_new_object_method); + } + return compiler; } + if line.starts_with(" def ") { let line = line.strip_prefix(" ").unwrap().to_string(); let class_now = compiler @@ -147,15 +156,6 @@ impl Compiler { class_now.push_object(line, &file_name); return compiler; } - if line.starts_with(" ") && line.contains("(") && line.contains(")") { - let line = line.strip_prefix(" ").unwrap().to_string(); - let class_now = compiler - .class_list - .get_mut(&compiler.class_now_name.clone().unwrap()) - .unwrap(); - class_now.push_import(line, &file_name); - return compiler; - } return compiler; } @@ -171,31 +171,29 @@ mod tests { compiler, String::from("class Test(SuperTest):"), &"Pkg".to_string(), + false, + ); + let compiler = Compiler::analyze_line( + compiler, + String::from(" def test()"), + &"Pkg".to_string(), + false, ); - let compiler = - Compiler::analyze_line(compiler, String::from(" def test()"), &"Pkg".to_string()); let compiler = Compiler::analyze_line( compiler, String::from(" testObj = TestObj()"), &"Pkg".to_string(), - ); - let compiler = Compiler::analyze_line( - compiler, - String::from(" TestImport()"), - &"Pkg".to_string(), + false, ); let class_info = compiler.class_list.get("Pkg_Test").unwrap(); let method_info = class_info.method_list.get("test").unwrap(); let object_info = class_info.object_list.get("testObj").unwrap(); - let import_info = class_info.import_list.get("Pkg_TestImport").unwrap(); assert_eq!(class_info.this_class_name, "Pkg_Test"); assert_eq!(class_info.super_class_name, "Pkg_SuperTest"); assert_eq!(method_info.name, "test"); assert_eq!(method_info.class_name, "Pkg_Test"); assert_eq!(object_info.name, "testObj"); assert_eq!(object_info.class_name, "Pkg_Test"); - assert_eq!(import_info.class_name, "Pkg_Test"); - assert_eq!(import_info.import_class_name, "Pkg_TestImport"); } } diff --git a/tools/pikaCompiler/src/main.rs b/tools/pikaCompiler/src/main.rs index 3d26d9e86..d341def7a 100644 --- a/tools/pikaCompiler/src/main.rs +++ b/tools/pikaCompiler/src/main.rs @@ -14,7 +14,7 @@ use std::io::prelude::*; fn main() { let mut compiler = Compiler::new(String::from(""), String::from("pikascript-api/")); - compiler = Compiler::analyze_file(compiler, String::from("main")); + compiler = Compiler::analyze_file(compiler, String::from("main"), false); /* write to compiler-info about the info */ let mut compiler_info_file = File::create(format!("{}compiler-info.txt", compiler.dist_path)).unwrap();