Improving operators and suffix

This commit is contained in:
2026-05-21 07:05:58 +02:00
parent b28591f9e6
commit 0878b9f0b9
7 changed files with 43 additions and 72 deletions
+4 -2
View File
@@ -1,5 +1,7 @@
void main() {
i32 x;
i32 mut x = 10;
println!("hello, world");
x++;
println!("hello, world {x}");
}
+3
View File
@@ -70,8 +70,11 @@ pub enum Postfix {
Call(Vec<Expression>),
MacroCall(String),
StructCall(Vec<(Identifier, Expression)>),
Assign(String, Box<Expression>),
Index(Expression),
As(TypeExpr),
Increment,
Decrement,
Try,
}
-8
View File
@@ -9,11 +9,6 @@ pub struct Block(pub Vec<Spanned<Expression>>);
pub enum Statement {
Block(Block),
VarDecl(VarDeclStmt),
Assign {
target: Expression,
compound: String,
value: Expression,
},
If {
initial: StatementBranch,
else_if: Vec<StatementBranch>,
@@ -37,9 +32,6 @@ pub enum Statement {
Return(Option<Expression>),
Break,
Continue,
Increment(Expression),
Decrement(Expression),
}
#[derive(Debug, Clone, Serialize)]
+29 -32
View File
@@ -343,7 +343,7 @@ block = {
}
statement = _{
((expr | basic_stmt_left_recurse) ~ semicolon)
(expr ~ semicolon)
}
// ------------------------------------------------------
@@ -357,12 +357,6 @@ basic_stmt = {
| var_decl_statement
}
basic_stmt_left_recurse = {
increment_statement
| decrement_statement
| assign_statement
}
return_stmt = {
"return" ~ expr?
}
@@ -379,31 +373,6 @@ var_decl_statement = {
var_decl ~ ("=" ~ expr)?
}
increment_statement = {
expr ~ "++"
}
decrement_statement = {
expr ~ "--"
}
compound_assign = {
"="
| "+="
| "-="
| "/="
| "%="
| "&="
| "|="
| "^="
| "<<="
| ">>="
}
assign_statement = {
expr ~ compound_assign ~ expr ~ semicolon
}
// ------------------------------------------------------
// CONDITIONALS
// ------------------------------------------------------
@@ -536,6 +505,31 @@ try_px = {
"?"
}
increment = {
"++"
}
decrement = {
"--"
}
compound_assign = {
"="
| "+="
| "-="
| "/="
| "%="
| "&="
| "|="
| "^="
| "<<="
| ">>="
}
assign = {
compound_assign ~ expr
}
postfix = {
field_px
| call_px
@@ -544,6 +538,9 @@ postfix = {
| index_px
| as_px
| try_px
| increment
| decrement
| assign
}
// ------------------------------------------------------
+3
View File
@@ -191,6 +191,9 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Postfix {
Rule::try_px => Ok(Postfix::Try),
Rule::increment => Ok(Postfix::Increment),
Rule::decrement => Ok(Postfix::Decrement),
_ => AstError::bug_unimplemented(pair),
}
}
-14
View File
@@ -84,12 +84,6 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Statement {
body: inner.next().unwrap().try_into().map(Box::new),
}),
Rule::assign_statement => ast_expr!(Statement::Assign {
target: inner.next().unwrap().try_into(),
compound: Ok(inner.next().unwrap().as_str().trim().to_string())
as AstResult<'_, String>,
value: inner.next().unwrap().try_into(),
}),
Rule::match_stmt => ast_expr!(Statement::Match(
inner.next().unwrap().try_into(),
inner
@@ -103,14 +97,6 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Statement {
.collect::<AstResult<'a, Vec<_>>>(),
)),
Rule::increment_statement => {
ast_expr!(Statement::Increment(inner.next().unwrap().try_into()))
}
Rule::decrement_statement => {
ast_expr!(Statement::Decrement(inner.next().unwrap().try_into()))
}
Rule::unexpected_statement => {
return Err(AstError {
span: pair.as_span(),
+4 -16
View File
@@ -319,6 +319,10 @@ impl GetRust for Postfix {
Postfix::As(ty) => format!(" as {}", ty.get_rust()),
Postfix::Try => String::from("?"),
Postfix::Assign(cmp, expr) => format!("{cmp} {}", expr.get_rust()),
Postfix::Increment => "+=1".to_string(),
Postfix::Decrement => "-=1".to_string(),
}
}
}
@@ -630,19 +634,6 @@ impl ToRust for Statement {
cg.add_indentedln(&format!("let {}{};", decl.get_rust(), init));
}
Statement::Assign {
target,
compound,
value,
} => {
cg.add_indentedln(&format!(
"{} {} {};",
target.get_rust(),
compound,
value.get_rust(),
));
}
Statement::Match(expr, match_items) => {
cg.add_indentedln(&format!("match {} {{", expr.get_rust()));
cg.indent += 1;
@@ -740,9 +731,6 @@ impl ToRust for Statement {
Statement::Break => cg.add_indentedln("break;"),
Statement::Continue => cg.add_indentedln("continue;"),
Statement::Increment(e) => cg.add_indentedln(&format!("{}+=1;", e.get_rust())),
Statement::Decrement(e) => cg.add_indentedln(&format!("{}-=1;", e.get_rust())),
}
}
}