diff --git a/demo/stm32g070/pikascript/main.py b/demo/stm32g070/pikascript/main.py index 9daf6b2c1..7a1d5cd6b 100644 --- a/demo/stm32g070/pikascript/main.py +++ b/demo/stm32g070/pikascript/main.py @@ -16,3 +16,7 @@ print('mem.max :') mem.max() print('mem.now :') mem.now() + +while True: + io1.low() + io1.off() diff --git a/demo/stm32g070/pikascript/pikascript-api/PikaMain-api.c b/demo/stm32g070/pikascript/pikascript-api/PikaMain-api.c index 150de4cc7..0270c6468 100644 --- a/demo/stm32g070/pikascript/pikascript-api/PikaMain-api.c +++ b/demo/stm32g070/pikascript/pikascript-api/PikaMain-api.c @@ -3,6 +3,8 @@ /* ******************************** */ #include "PikaMain.h" #include "PikaStdLib_SysObj.h" +#include "io1_low.h" +#include "io1_off.h" #include "STM32_GPIO.h" #include "PikaStdLib_MemChecker.h" #include @@ -11,6 +13,8 @@ PikaObj *New_PikaMain(Args *args){ PikaObj *self = New_PikaStdLib_SysObj(args); + obj_import(self, "io1_low", New_io1_low); + obj_import(self, "io1_off", New_io1_off); obj_import(self, "STM32_GPIO", New_STM32_GPIO); obj_newObj(self, "io1", "STM32_GPIO"); obj_import(self, "PikaStdLib_MemChecker", New_PikaStdLib_MemChecker); diff --git a/demo/stm32g070/pikascript/pikascript-api/compiler-info.txt b/demo/stm32g070/pikascript/pikascript-api/compiler-info.txt index 68d6a4c4c..45e1418ca 100644 --- a/demo/stm32g070/pikascript/pikascript-api/compiler-info.txt +++ b/demo/stm32g070/pikascript/pikascript-api/compiler-info.txt @@ -1 +1 @@ -Compiler { dist_path: "pikascript-api/", source_path: "", class_list: {"PikaMain": ClassInfo { this_class_name: "PikaMain", super_class_name: "PikaStdLib_SysObj", method_list: {}, object_list: {"io1": ObjectInfo { class_name: "PikaMain", name: "io1", import_class_name: "STM32_GPIO" }, "mem": ObjectInfo { class_name: "PikaMain", name: "mem", import_class_name: "PikaStdLib_MemChecker" }}, import_list: {}, script_list: Script { content: " obj_run(pikaMain, \"print('hello pikascript')\");\r\n obj_run(pikaMain, \"io1.init()\");\r\n obj_run(pikaMain, \"io1.setPin('PB4')\");\r\n obj_run(pikaMain, \"io1.setMode('out')\");\r\n obj_run(pikaMain, \"io1.enable()\");\r\n obj_run(pikaMain, \"io1.low()\");\r\n obj_run(pikaMain, \"print('mem.max :')\");\r\n obj_run(pikaMain, \"mem.max()\");\r\n obj_run(pikaMain, \"print('mem.now :')\");\r\n obj_run(pikaMain, \"mem.now()\");\r\n" } }, "PikaStdDeivce_GPIO": ClassInfo { this_class_name: "PikaStdDeivce_GPIO", super_class_name: "TinyObj", method_list: {"disable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "disable", arg_list: None, return_type: None }, "enable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "enable", arg_list: None, return_type: None }, "getMode": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "getMode", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "getPin": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "getPin", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "high": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "high", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "init", arg_list: None, return_type: None }, "low": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "low", arg_list: None, return_type: None }, "platformDisable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setMode": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "setMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setPin": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "setPin", arg_list: Some(ArgList { py_arg_list: "pinName:str", list: {"pinName": PyArg { py_type: PyType { type_name: "str" }, name: "pinName" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdLib_MemChecker": ClassInfo { this_class_name: "PikaStdLib_MemChecker", super_class_name: "BaseObj", method_list: {"max": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "max", arg_list: None, return_type: None }, "now": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "now", arg_list: None, return_type: None }, "resetMax": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "resetMax", arg_list: None, return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdLib_SysObj": ClassInfo { this_class_name: "PikaStdLib_SysObj", super_class_name: "BaseObj", method_list: {"ls": MethodInfo { class_name: "PikaStdLib_SysObj", name: "ls", arg_list: Some(ArgList { py_arg_list: "objPath:str", list: {"objPath": PyArg { py_type: PyType { type_name: "str" }, name: "objPath" }} }), return_type: None }, "new": MethodInfo { class_name: "PikaStdLib_SysObj", name: "new", arg_list: Some(ArgList { py_arg_list: "objPath:str,classPath:str", list: {"classPath": PyArg { py_type: PyType { type_name: "str" }, name: "classPath" }, "objPath": PyArg { py_type: PyType { type_name: "str" }, name: "objPath" }} }), return_type: None }, "remove": MethodInfo { class_name: "PikaStdLib_SysObj", name: "remove", arg_list: Some(ArgList { py_arg_list: "argPath:str", list: {"argPath": PyArg { py_type: PyType { type_name: "str" }, name: "argPath" }} }), return_type: None }, "type": MethodInfo { class_name: "PikaStdLib_SysObj", name: "type", arg_list: Some(ArgList { py_arg_list: "argPath:str", list: {"argPath": PyArg { py_type: PyType { type_name: "str" }, name: "argPath" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_GPIO": ClassInfo { this_class_name: "STM32_GPIO", super_class_name: "PikaStdDeivce_GPIO", method_list: {"platformDisable": MethodInfo { class_name: "STM32_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "STM32_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "STM32_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "STM32_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "STM32_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }}, class_now_name: Some("PikaMain") } \ No newline at end of file +Compiler { dist_path: "pikascript-api/", source_path: "", class_list: {"PikaMain": ClassInfo { this_class_name: "PikaMain", super_class_name: "PikaStdLib_SysObj", method_list: {}, object_list: {"io1": ObjectInfo { class_name: "PikaMain", name: "io1", import_class_name: "STM32_GPIO" }, "mem": ObjectInfo { class_name: "PikaMain", name: "mem", import_class_name: "PikaStdLib_MemChecker" }}, import_list: {"io1_low": ImportInfo { class_name: "PikaMain", import_class_name: "io1_low" }, "io1_off": ImportInfo { class_name: "PikaMain", import_class_name: "io1_off" }}, script_list: Script { content: " obj_run(pikaMain, \"print('hello pikascript')\");\r\n obj_run(pikaMain, \"io1.init()\");\r\n obj_run(pikaMain, \"io1.setPin('PB4')\");\r\n obj_run(pikaMain, \"io1.setMode('out')\");\r\n obj_run(pikaMain, \"io1.enable()\");\r\n obj_run(pikaMain, \"io1.low()\");\r\n obj_run(pikaMain, \"print('mem.max :')\");\r\n obj_run(pikaMain, \"mem.max()\");\r\n obj_run(pikaMain, \"print('mem.now :')\");\r\n obj_run(pikaMain, \"mem.now()\");\r\n" } }, "PikaStdDeivce_GPIO": ClassInfo { this_class_name: "PikaStdDeivce_GPIO", super_class_name: "TinyObj", method_list: {"disable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "disable", arg_list: None, return_type: None }, "enable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "enable", arg_list: None, return_type: None }, "getMode": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "getMode", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "getPin": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "getPin", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "high": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "high", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "init", arg_list: None, return_type: None }, "low": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "low", arg_list: None, return_type: None }, "platformDisable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setMode": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "setMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setPin": MethodInfo { class_name: "PikaStdDeivce_GPIO", name: "setPin", arg_list: Some(ArgList { py_arg_list: "pinName:str", list: {"pinName": PyArg { py_type: PyType { type_name: "str" }, name: "pinName" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdLib_MemChecker": ClassInfo { this_class_name: "PikaStdLib_MemChecker", super_class_name: "BaseObj", method_list: {"max": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "max", arg_list: None, return_type: None }, "now": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "now", arg_list: None, return_type: None }, "resetMax": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "resetMax", arg_list: None, return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdLib_SysObj": ClassInfo { this_class_name: "PikaStdLib_SysObj", super_class_name: "BaseObj", method_list: {"ls": MethodInfo { class_name: "PikaStdLib_SysObj", name: "ls", arg_list: Some(ArgList { py_arg_list: "objPath:str", list: {"objPath": PyArg { py_type: PyType { type_name: "str" }, name: "objPath" }} }), return_type: None }, "new": MethodInfo { class_name: "PikaStdLib_SysObj", name: "new", arg_list: Some(ArgList { py_arg_list: "objPath:str,classPath:str", list: {"classPath": PyArg { py_type: PyType { type_name: "str" }, name: "classPath" }, "objPath": PyArg { py_type: PyType { type_name: "str" }, name: "objPath" }} }), return_type: None }, "remove": MethodInfo { class_name: "PikaStdLib_SysObj", name: "remove", arg_list: Some(ArgList { py_arg_list: "argPath:str", list: {"argPath": PyArg { py_type: PyType { type_name: "str" }, name: "argPath" }} }), return_type: None }, "type": MethodInfo { class_name: "PikaStdLib_SysObj", name: "type", arg_list: Some(ArgList { py_arg_list: "argPath:str", list: {"argPath": PyArg { py_type: PyType { type_name: "str" }, name: "argPath" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_GPIO": ClassInfo { this_class_name: "STM32_GPIO", super_class_name: "PikaStdDeivce_GPIO", method_list: {"platformDisable": MethodInfo { class_name: "STM32_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "STM32_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "STM32_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "STM32_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "STM32_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }}, class_now_name: Some("PikaMain") } \ No newline at end of file diff --git a/pikascript-compiler-rust/main.py b/pikascript-compiler-rust/main.py index fbc49d391..8b7b70b00 100644 --- a/pikascript-compiler-rust/main.py +++ b/pikascript-compiler-rust/main.py @@ -5,3 +5,7 @@ line = Arm2D.Line() res = line.on() line.off() line.moveTo(20) + +while True: + line.off() + line.on() diff --git a/pikascript-compiler-rust/src/class_info.rs b/pikascript-compiler-rust/src/class_info.rs index 30607843d..45e888031 100644 --- a/pikascript-compiler-rust/src/class_info.rs +++ b/pikascript-compiler-rust/src/class_info.rs @@ -111,6 +111,7 @@ impl ClassInfo { script_fn.push_str("PikaObj * pikaScriptInit(){\r\n"); script_fn.push_str(" PikaObj * pikaMain = newRootObj(\"pikaMain\", New_PikaMain);\r\n"); script_fn.push_str(&self.script_list.content); + script_fn.push_str(" obj_run(pikaMain, \"\");\r\n"); script_fn.push_str(" return pikaMain;\r\n"); script_fn.push_str("}\r\n\r\n"); return script_fn; diff --git a/pikascript-compiler-rust/src/compiler.rs b/pikascript-compiler-rust/src/compiler.rs index 76e189d7d..72db21878 100644 --- a/pikascript-compiler-rust/src/compiler.rs +++ b/pikascript-compiler-rust/src/compiler.rs @@ -50,6 +50,17 @@ impl Compiler { } if line.contains("(") && line.contains(")") { class_now.script_list.add(&line); + return compiler; + } + + if line.starts_with("if ") { + class_now.script_list.add(&line); + return compiler; + } + + if line.starts_with("while ") { + class_now.script_list.add(&line); + return compiler; } return compiler; } @@ -101,6 +112,11 @@ impl Compiler { class_now.push_method(line); return compiler; } + + if file_name == "main" { + return Compiler::analyze_main_line(compiler, line); + } + if line.starts_with(" ") && line.contains("(") && line.contains(")") @@ -124,10 +140,6 @@ impl Compiler { return compiler; } - if file_name == "main" { - return Compiler::analyze_main_line(compiler, line); - } - return compiler; } } diff --git a/src/package/pikascript/rust-msc-latest-linux.exe b/src/package/pikascript/rust-msc-latest-linux.exe new file mode 100644 index 000000000..c08d9e67d Binary files /dev/null and b/src/package/pikascript/rust-msc-latest-linux.exe differ diff --git a/src/package/pikascript/rust-msc-latest-win10.exe b/src/package/pikascript/rust-msc-latest-win10.exe index e98b43bb1..c08d9e67d 100644 Binary files a/src/package/pikascript/rust-msc-latest-win10.exe and b/src/package/pikascript/rust-msc-latest-win10.exe differ