From 3a41e0e8ec7dc14cefd11c92fdd5860f61ea7f11 Mon Sep 17 00:00:00 2001 From: lyon Date: Tue, 26 Apr 2022 22:00:20 +0800 Subject: [PATCH] pre-compiler only solve '#api' file --- tools/pikaCompiler/Arm2D.py | 1 + tools/pikaCompiler/PikaDebug.py | 1 + tools/pikaCompiler/PikaObj.py | 1 + tools/pikaCompiler/PikaStdData.py | 1 + tools/pikaCompiler/PikaStdDevice.py | 1 + tools/pikaCompiler/PikaStdLib.py | 1 + tools/pikaCompiler/PikaStdTask.py | 1 + tools/pikaCompiler/PyInfo.py | 1 + tools/pikaCompiler/application.py | 1 + tools/pikaCompiler/src/compiler.rs | 34 ++++++++++++++++++++--------- 10 files changed, 33 insertions(+), 10 deletions(-) diff --git a/tools/pikaCompiler/Arm2D.py b/tools/pikaCompiler/Arm2D.py index 76e7f6eb6..25f92d589 100644 --- a/tools/pikaCompiler/Arm2D.py +++ b/tools/pikaCompiler/Arm2D.py @@ -1,3 +1,4 @@ +#api from PikaObj import * class Line(TinyObj): diff --git a/tools/pikaCompiler/PikaDebug.py b/tools/pikaCompiler/PikaDebug.py index dc2bd9840..a3196b0a8 100644 --- a/tools/pikaCompiler/PikaDebug.py +++ b/tools/pikaCompiler/PikaDebug.py @@ -1,3 +1,4 @@ +#api from PikaObj import * class Debuger(TinyObj): diff --git a/tools/pikaCompiler/PikaObj.py b/tools/pikaCompiler/PikaObj.py index ab97533ba..727e07626 100644 --- a/tools/pikaCompiler/PikaObj.py +++ b/tools/pikaCompiler/PikaObj.py @@ -1,3 +1,4 @@ +#api class TinyObj: pass diff --git a/tools/pikaCompiler/PikaStdData.py b/tools/pikaCompiler/PikaStdData.py index 2139f0219..362e377b7 100644 --- a/tools/pikaCompiler/PikaStdData.py +++ b/tools/pikaCompiler/PikaStdData.py @@ -1,3 +1,4 @@ +#api from PikaObj import * diff --git a/tools/pikaCompiler/PikaStdDevice.py b/tools/pikaCompiler/PikaStdDevice.py index ffd0c9224..24271c9b5 100644 --- a/tools/pikaCompiler/PikaStdDevice.py +++ b/tools/pikaCompiler/PikaStdDevice.py @@ -1,3 +1,4 @@ +#api from PikaObj import * diff --git a/tools/pikaCompiler/PikaStdLib.py b/tools/pikaCompiler/PikaStdLib.py index 358f5334a..225825edd 100644 --- a/tools/pikaCompiler/PikaStdLib.py +++ b/tools/pikaCompiler/PikaStdLib.py @@ -1,3 +1,4 @@ +#api from PikaObj import * diff --git a/tools/pikaCompiler/PikaStdTask.py b/tools/pikaCompiler/PikaStdTask.py index ea19b9272..a277dcf4b 100644 --- a/tools/pikaCompiler/PikaStdTask.py +++ b/tools/pikaCompiler/PikaStdTask.py @@ -1,3 +1,4 @@ +#api from PikaObj import * import PikaStdData diff --git a/tools/pikaCompiler/PyInfo.py b/tools/pikaCompiler/PyInfo.py index 331338ffe..38aff5bf0 100644 --- a/tools/pikaCompiler/PyInfo.py +++ b/tools/pikaCompiler/PyInfo.py @@ -1,3 +1,4 @@ +#api class PyObj(BaseObj): def importClass(self, className: str, fp: str): diff --git a/tools/pikaCompiler/application.py b/tools/pikaCompiler/application.py index 1e7b32c62..fc79622ff 100644 --- a/tools/pikaCompiler/application.py +++ b/tools/pikaCompiler/application.py @@ -1,3 +1,4 @@ +#api import PyInfo import Arm2D import PikaStdLib diff --git a/tools/pikaCompiler/src/compiler.rs b/tools/pikaCompiler/src/compiler.rs index 23882a763..7cdab2c5b 100644 --- a/tools/pikaCompiler/src/compiler.rs +++ b/tools/pikaCompiler/src/compiler.rs @@ -75,13 +75,7 @@ impl Compiler { } pub fn __do_analize_file(mut self: Compiler, file_name: String, is_top_pkg: bool) -> Compiler { - /* check if compiled */ - if self.compiled_list.contains(&file_name) { - } else { - println!(" compiling {}{}.py...", self.source_path, file_name); - } - self.compiled_list.push_back(String::clone(&file_name)); - /* print info */ + /* open file */ let file = Compiler::open_file(format!("{}{}.py", self.source_path, file_name)); let mut file = match file { Ok(file) => file, @@ -93,6 +87,29 @@ impl Compiler { return self; } }; + let mut file_str = String::new(); + file.read_to_string(&mut file_str).unwrap(); + /* check if 'api' file */ + let lines: Vec<&str> = file_str.split('\n').collect(); + let mut is_api = false; + if file_name == "main" { + is_api = true; + } + for line in lines.iter() { + if line.to_string().starts_with("#api") { + is_api = true; + } + } + if !is_api { + return self; + } + + /* check if compiled */ + if self.compiled_list.contains(&file_name) { + } else { + println!(" compiling {}{}.py...", self.source_path, file_name); + } + self.compiled_list.push_back(String::clone(&file_name)); /* solve top package. About what is top package: Top package is the package imported by main.py, @@ -115,9 +132,6 @@ impl Compiler { .or_insert(package_now); self.package_now_name = Some(package_name.clone()); } - /* solve lines in file */ - let mut file_str = String::new(); - file.read_to_string(&mut file_str).unwrap(); let lines: Vec<&str> = file_str.split('\n').collect(); /* analyze each line of pikascript-api.py */ for line in lines.iter() {