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();