Improving operators and suffix
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
void main() {
|
||||
i32 x;
|
||||
i32 mut x = 10;
|
||||
|
||||
println!("hello, world");
|
||||
x++;
|
||||
|
||||
println!("hello, world {x}");
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
// ------------------------------------------------------
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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())),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user