local incl

This commit is contained in:
2024-05-24 16:50:14 +02:00
parent 5ca3722150
commit 33fc1d85dc
2 changed files with 13 additions and 4 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ mod transpiler;
mod parser; mod parser;
mod lexer; mod lexer;
mod compile; mod compile;
use std::{env::set_current_dir, fs}; use std::fs;
use clap::Parser; use clap::Parser;
use lexer::LexerState; use lexer::LexerState;
use transpiler::Options; use transpiler::Options;
+12 -3
View File
@@ -23,10 +23,10 @@ fn clean_incl(input: &str) -> String {
.collect() .collect()
} }
pub fn transpile_mod(ast: Ast, options: &mut Options) -> String { pub fn transpile_mod(ast: Ast, options: &mut Options, s: &str) -> String {
let modfile = ast.tokens[0].value.as_str(); let modfile = ast.tokens[0].value.as_str();
let modname = format!("{}_{}", clean_incl(modfile.split(".").collect::<Vec<_>>()[0]), options.clone().modnum); let modname = format!("{}_{}", clean_incl(modfile.split(".").collect::<Vec<_>>()[0]), options.clone().modnum);
let file_content = fs::read_to_string("lib/".to_string()+modfile) let file_content = fs::read_to_string(s.to_string()+modfile)
.expect("Error reading file"); .expect("Error reading file");
let transpiled_code = transpile(file_content, 0, LexerState { line: 1, column: 0 }, &mut Options::default()); let transpiled_code = transpile(file_content, 0, LexerState { line: 1, column: 0 }, &mut Options::default());
fs::write(("wyst_tmp/".to_string()+modname.as_str())+".rs", fs::write(("wyst_tmp/".to_string()+modname.as_str())+".rs",
@@ -172,7 +172,16 @@ pub fn transpile(input: String, indent: u32, state: LexerState, options: &mut Op
} else if ast.ast_type == AstType::StructVar { } else if ast.ast_type == AstType::StructVar {
result += format!("let mut {}: {} = {} {}{}{}", ast.tokens[1].value.as_str(), ast.tokens[0].value.as_str(), ast.tokens[0].value.as_str(), "{", ast.tokens[2].value.as_str(), "}").as_str(); result += format!("let mut {}: {} = {} {}{}{}", ast.tokens[1].value.as_str(), ast.tokens[0].value.as_str(), ast.tokens[0].value.as_str(), "{", ast.tokens[2].value.as_str(), "}").as_str();
} else if ast.ast_type == AstType::Include { } else if ast.ast_type == AstType::Include {
let modname = transpile_mod(ast, options); let modname = transpile_mod(ast, options, "/lib");
result += "mod ";
result += modname.as_str();
result += ";\n";
result += "use ";
result += modname.as_str();
result += "::*;\n";
options.modnum += 1;
} else if ast.ast_type == AstType::IncludeLocal {
let modname = transpile_mod(ast, options, "");
result += "mod "; result += "mod ";
result += modname.as_str(); result += modname.as_str();
result += ";\n"; result += ";\n";