Add no_build_rs feature

This commit is contained in:
Shunsuke Shibayama 2022-10-15 12:13:09 +09:00
parent a1688b972b
commit afd8d33d49
4 changed files with 35 additions and 21 deletions

View file

@ -47,6 +47,7 @@ traditional_chinese = [
"erg_parser/traditional_chinese", "erg_parser/traditional_chinese",
"erg_compiler/traditional_chinese", "erg_compiler/traditional_chinese",
] ]
no_build_rs = ["erg_compiler/no_build_rs"]
pre-commit = [] pre-commit = []
[dependencies] [dependencies]

View file

@ -22,6 +22,7 @@ traditional_chinese = [
"erg_common/traditional_chinese", "erg_common/traditional_chinese",
"erg_parser/traditional_chinese", "erg_parser/traditional_chinese",
] ]
no_build_rs = []
[dependencies] [dependencies]
erg_common = { version = "0.5.9", path = "../erg_common" } erg_common = { version = "0.5.9", path = "../erg_common" }

View file

@ -5,6 +5,9 @@ use std::fs;
use std::path; use std::path;
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
if cfg!(feature = "no_build_rs") {
return Ok(());
}
// Create a ".erg" directory // Create a ".erg" directory
let erg_path = env::home_dir() let erg_path = env::home_dir()
.expect("failed to get the location of the home dir") .expect("failed to get the location of the home dir")

View file

@ -2051,27 +2051,36 @@ impl CodeGenerator {
} }
fn load_prelude_py(&mut self) { fn load_prelude_py(&mut self) {
self.emit_global_import_items( if let Some(std_path) = option_env!("ERG_STD_PATH") {
Identifier::public("sys"), self.emit_global_import_items(
vec![( Identifier::public("sys"),
Identifier::public("path"), vec![(
Some(Identifier::private("#path")), Identifier::public("path"),
)], Some(Identifier::private("#path")),
); )],
self.emit_load_name_instr(Identifier::private("#path")); );
self.emit_load_method_instr("Array!", None, Identifier::public("push!")); self.emit_load_name_instr(Identifier::private("#path"));
self.emit_load_const(env!("ERG_STD_PATH")); self.emit_load_method_instr("Array!", None, Identifier::public("push!"));
self.write_instr(CALL_METHOD); self.emit_load_const(std_path);
self.write_arg(1u8); self.write_instr(CALL_METHOD);
self.stack_dec(); self.write_arg(1u8);
self.emit_pop_top(); self.stack_dec();
self.emit_global_import_items( self.emit_pop_top();
Identifier::public("_erg_std_prelude"), self.emit_global_import_items(
vec![( Identifier::public("_erg_std_prelude"),
Identifier::public("in_operator"), vec![(
Some(Identifier::private("#in_operator")), Identifier::public("in_operator"),
)], Some(Identifier::private("#in_operator")),
); )],
);
} else {
self.emit_load_name_instr(Identifier::private("exec"));
self.emit_load_const(include_str!("std/_erg_std_prelude.py"));
self.write_instr(CALL_FUNCTION);
self.write_arg(1u8);
self.stack_dec();
self.emit_pop_top();
}
} }
fn load_record_type(&mut self) { fn load_record_type(&mut self) {