Merge pull request #38 from mist-go/snake

A snake is eating itself
This commit is contained in:
2026-05-19 12:31:25 +02:00
committed by GitHub
11 changed files with 47 additions and 22 deletions
+1 -2
View File
@@ -26,5 +26,4 @@ target
/target
/mist-test/build
/mist-test/output.json
**/build
Generated
+2 -2
View File
@@ -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
View File
@@ -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"
+4
View File
@@ -0,0 +1,4 @@
{
"src": "src",
"output": "build"
}
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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,
+6 -3
View File
@@ -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)
}
+1 -1
View File
@@ -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()?,
))
})
+5
View File
@@ -0,0 +1,5 @@
pub mod builder;
pub mod codegen;
pub mod transpiler;
fn main() {}
+8 -1
View File
@@ -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);
+9 -8
View File
@@ -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");