+1
-2
@@ -26,5 +26,4 @@ target
|
||||
|
||||
/target
|
||||
|
||||
/mist-test/build
|
||||
/mist-test/output.json
|
||||
**/build
|
||||
|
||||
Generated
+2
-2
@@ -109,7 +109,7 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
||||
|
||||
[[package]]
|
||||
name = "mist-lang"
|
||||
version = "0.0.3-alpha3"
|
||||
version = "0.0.3-alpha4"
|
||||
dependencies = [
|
||||
"cargo_metadata",
|
||||
"mist-parser",
|
||||
@@ -119,7 +119,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "mist-parser"
|
||||
version = "0.1.3"
|
||||
version = "0.1.4"
|
||||
dependencies = [
|
||||
"pest",
|
||||
"pest_derive",
|
||||
|
||||
+9
-3
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "mist-lang"
|
||||
version = "0.0.3-alpha3"
|
||||
version = "0.0.3-alpha4"
|
||||
edition = "2024"
|
||||
description = "The Mist programming language compiler"
|
||||
license = "Apache-2.0"
|
||||
@@ -8,13 +8,19 @@ repository = "https://github.com/mist-go/mist"
|
||||
readme = "README.md"
|
||||
keywords = ["compiler", "language", "mist"]
|
||||
categories = ["compilers"]
|
||||
default-run = "mist"
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0.228", features = ["serde_derive"] }
|
||||
serde_json = "1.0.149"
|
||||
mist-parser = { path = "./parser", version = "0.1.3"}
|
||||
mist-parser = { path = "./parser", version = "0.1.4"}
|
||||
cargo_metadata = "0.23.1"
|
||||
|
||||
[[bin]]
|
||||
name = "mist"
|
||||
path = "src/main.rs"
|
||||
path = "build/main.rs"
|
||||
|
||||
|
||||
[[bin]]
|
||||
name = "mist-lang"
|
||||
path = "src/_header.rs"
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "mist-parser"
|
||||
version = "0.1.3"
|
||||
version = "0.1.4"
|
||||
edition = "2024"
|
||||
description = "The Mist programming language parser"
|
||||
license = "Apache-2.0"
|
||||
|
||||
@@ -34,7 +34,7 @@ pub enum Statement {
|
||||
iterator: Expression,
|
||||
body: Box<Statement>,
|
||||
},
|
||||
Match(Expression, Vec<(Pattern, Block)>),
|
||||
Match(Expression, Vec<(Vec<Pattern>, Block)>),
|
||||
|
||||
Return(Option<Expression>),
|
||||
Break,
|
||||
|
||||
@@ -143,7 +143,7 @@ literal = {
|
||||
// ======================================================
|
||||
|
||||
tuple_pattern = {
|
||||
"(" ~ (identifier ~ ("," ~ identifier)*)? ~ ")"
|
||||
"(" ~ (identifier ~ ("," ~ identifier)*) ~ ")"
|
||||
}
|
||||
|
||||
named_tuple_pattern = {
|
||||
@@ -446,8 +446,10 @@ for_stmt = {
|
||||
// MATCH
|
||||
// ------------------------------------------------------
|
||||
|
||||
pattern_list = { pattern ~ ("|" ~ pattern)* }
|
||||
|
||||
match_item = {
|
||||
pattern ~ "=>" ~ block
|
||||
pattern_list ~ "=>" ~ block
|
||||
}
|
||||
|
||||
match_stmt = {
|
||||
@@ -477,7 +479,8 @@ array = {
|
||||
// ------------------------------------------------------
|
||||
|
||||
macro_inner_v = {
|
||||
"(" ~ macro_inner_v* ~ ")"
|
||||
string_lit
|
||||
| ("(" ~ macro_inner_v* ~ ")")
|
||||
| (!("(" | ")") ~ ANY)
|
||||
}
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Statement {
|
||||
.map(|match_itms| {
|
||||
let mut match_inner = match_itms.into_inner();
|
||||
Ok((
|
||||
Pattern::try_from(match_inner.next().unwrap()).get()?,
|
||||
collect_recovered(match_inner.next().unwrap().into_inner()).get()?,
|
||||
Block::try_from(match_inner.next().unwrap()).get()?,
|
||||
))
|
||||
})
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
pub mod builder;
|
||||
pub mod codegen;
|
||||
pub mod transpiler;
|
||||
|
||||
fn main() {}
|
||||
+8
-1
@@ -646,7 +646,14 @@ impl ToRust for Statement {
|
||||
cg.indent += 1;
|
||||
|
||||
for itm in match_items {
|
||||
cg.add_indentedln(&format!("{} =>", itm.0.get_rust()));
|
||||
cg.add_indentedln(&format!(
|
||||
"{} =>",
|
||||
itm.0
|
||||
.into_iter()
|
||||
.map(Pattern::get_rust)
|
||||
.collect::<Vec<_>>()
|
||||
.join(" | ")
|
||||
));
|
||||
cg.add_indentedln("{");
|
||||
cg.indent += 1;
|
||||
itm.1.to_rust(cg);
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
use std::process::{self};
|
||||
use <std::process>;
|
||||
use <std::env>;
|
||||
|
||||
pub mod builder;
|
||||
pub mod codegen;
|
||||
pub mod transpiler;
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = std::env::args().collect();
|
||||
void main() {
|
||||
Vec<String> args = env::args().collect();
|
||||
|
||||
if args.len() < 2 {
|
||||
if (args.len() < 2) {
|
||||
print_usage();
|
||||
process::exit(1);
|
||||
}
|
||||
|
||||
match args[1].as_str() {
|
||||
match (args[1].as_str()) {
|
||||
"run" | "build" | "check" | "r" | "b" | "c" => {
|
||||
let (config, root) = transpiler::build();
|
||||
var (config, root) = transpiler::build();
|
||||
println!("");
|
||||
if builder::build(args, config, root) {
|
||||
if (builder::build(args, config, root)) {
|
||||
println!("\x1b[32m\nBuild successful\x1b[0m");
|
||||
} else {
|
||||
println!("\x1b[31m\nBuild failed\x1b[0m");
|
||||
@@ -39,7 +40,7 @@ fn main() {
|
||||
}
|
||||
}
|
||||
|
||||
fn print_usage() {
|
||||
void print_usage() {
|
||||
println!("Mist - the mist compiler\n");
|
||||
println!(" View our documentation! \x1b[35mhttps://mist.selimaj.dev\x1b[0m");
|
||||
println!(" Follow us on github! \x1b[35mhttps://github.com/mist-go\x1b[0m\n");
|
||||
Reference in New Issue
Block a user