Improving operators and suffix
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
void main() {
|
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>),
|
Call(Vec<Expression>),
|
||||||
MacroCall(String),
|
MacroCall(String),
|
||||||
StructCall(Vec<(Identifier, Expression)>),
|
StructCall(Vec<(Identifier, Expression)>),
|
||||||
|
Assign(String, Box<Expression>),
|
||||||
Index(Expression),
|
Index(Expression),
|
||||||
As(TypeExpr),
|
As(TypeExpr),
|
||||||
|
Increment,
|
||||||
|
Decrement,
|
||||||
Try,
|
Try,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,6 @@ pub struct Block(pub Vec<Spanned<Expression>>);
|
|||||||
pub enum Statement {
|
pub enum Statement {
|
||||||
Block(Block),
|
Block(Block),
|
||||||
VarDecl(VarDeclStmt),
|
VarDecl(VarDeclStmt),
|
||||||
Assign {
|
|
||||||
target: Expression,
|
|
||||||
compound: String,
|
|
||||||
value: Expression,
|
|
||||||
},
|
|
||||||
If {
|
If {
|
||||||
initial: StatementBranch,
|
initial: StatementBranch,
|
||||||
else_if: Vec<StatementBranch>,
|
else_if: Vec<StatementBranch>,
|
||||||
@@ -37,9 +32,6 @@ pub enum Statement {
|
|||||||
Return(Option<Expression>),
|
Return(Option<Expression>),
|
||||||
Break,
|
Break,
|
||||||
Continue,
|
Continue,
|
||||||
|
|
||||||
Increment(Expression),
|
|
||||||
Decrement(Expression),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize)]
|
#[derive(Debug, Clone, Serialize)]
|
||||||
|
|||||||
+29
-32
@@ -343,7 +343,7 @@ block = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
statement = _{
|
statement = _{
|
||||||
((expr | basic_stmt_left_recurse) ~ semicolon)
|
(expr ~ semicolon)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
@@ -357,12 +357,6 @@ basic_stmt = {
|
|||||||
| var_decl_statement
|
| var_decl_statement
|
||||||
}
|
}
|
||||||
|
|
||||||
basic_stmt_left_recurse = {
|
|
||||||
increment_statement
|
|
||||||
| decrement_statement
|
|
||||||
| assign_statement
|
|
||||||
}
|
|
||||||
|
|
||||||
return_stmt = {
|
return_stmt = {
|
||||||
"return" ~ expr?
|
"return" ~ expr?
|
||||||
}
|
}
|
||||||
@@ -379,31 +373,6 @@ var_decl_statement = {
|
|||||||
var_decl ~ ("=" ~ expr)?
|
var_decl ~ ("=" ~ expr)?
|
||||||
}
|
}
|
||||||
|
|
||||||
increment_statement = {
|
|
||||||
expr ~ "++"
|
|
||||||
}
|
|
||||||
|
|
||||||
decrement_statement = {
|
|
||||||
expr ~ "--"
|
|
||||||
}
|
|
||||||
|
|
||||||
compound_assign = {
|
|
||||||
"="
|
|
||||||
| "+="
|
|
||||||
| "-="
|
|
||||||
| "/="
|
|
||||||
| "%="
|
|
||||||
| "&="
|
|
||||||
| "|="
|
|
||||||
| "^="
|
|
||||||
| "<<="
|
|
||||||
| ">>="
|
|
||||||
}
|
|
||||||
|
|
||||||
assign_statement = {
|
|
||||||
expr ~ compound_assign ~ expr ~ semicolon
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
// CONDITIONALS
|
// CONDITIONALS
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
@@ -536,6 +505,31 @@ try_px = {
|
|||||||
"?"
|
"?"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
increment = {
|
||||||
|
"++"
|
||||||
|
}
|
||||||
|
|
||||||
|
decrement = {
|
||||||
|
"--"
|
||||||
|
}
|
||||||
|
|
||||||
|
compound_assign = {
|
||||||
|
"="
|
||||||
|
| "+="
|
||||||
|
| "-="
|
||||||
|
| "/="
|
||||||
|
| "%="
|
||||||
|
| "&="
|
||||||
|
| "|="
|
||||||
|
| "^="
|
||||||
|
| "<<="
|
||||||
|
| ">>="
|
||||||
|
}
|
||||||
|
|
||||||
|
assign = {
|
||||||
|
compound_assign ~ expr
|
||||||
|
}
|
||||||
|
|
||||||
postfix = {
|
postfix = {
|
||||||
field_px
|
field_px
|
||||||
| call_px
|
| call_px
|
||||||
@@ -544,6 +538,9 @@ postfix = {
|
|||||||
| index_px
|
| index_px
|
||||||
| as_px
|
| as_px
|
||||||
| try_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::try_px => Ok(Postfix::Try),
|
||||||
|
|
||||||
|
Rule::increment => Ok(Postfix::Increment),
|
||||||
|
Rule::decrement => Ok(Postfix::Decrement),
|
||||||
|
|
||||||
_ => AstError::bug_unimplemented(pair),
|
_ => 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),
|
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(
|
Rule::match_stmt => ast_expr!(Statement::Match(
|
||||||
inner.next().unwrap().try_into(),
|
inner.next().unwrap().try_into(),
|
||||||
inner
|
inner
|
||||||
@@ -103,14 +97,6 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Statement {
|
|||||||
.collect::<AstResult<'a, Vec<_>>>(),
|
.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 => {
|
Rule::unexpected_statement => {
|
||||||
return Err(AstError {
|
return Err(AstError {
|
||||||
span: pair.as_span(),
|
span: pair.as_span(),
|
||||||
|
|||||||
+4
-16
@@ -319,6 +319,10 @@ impl GetRust for Postfix {
|
|||||||
Postfix::As(ty) => format!(" as {}", ty.get_rust()),
|
Postfix::As(ty) => format!(" as {}", ty.get_rust()),
|
||||||
|
|
||||||
Postfix::Try => String::from("?"),
|
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));
|
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) => {
|
Statement::Match(expr, match_items) => {
|
||||||
cg.add_indentedln(&format!("match {} {{", expr.get_rust()));
|
cg.add_indentedln(&format!("match {} {{", expr.get_rust()));
|
||||||
cg.indent += 1;
|
cg.indent += 1;
|
||||||
@@ -740,9 +731,6 @@ impl ToRust for Statement {
|
|||||||
|
|
||||||
Statement::Break => cg.add_indentedln("break;"),
|
Statement::Break => cg.add_indentedln("break;"),
|
||||||
Statement::Continue => cg.add_indentedln("continue;"),
|
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