@@ -380,11 +380,32 @@ void mlir::rlc::IsAlternativeTypeOp::serialize(
380380 OS << " is Alternative" ;
381381}
382382
383+ void mlir::rlc::EnumFieldExpressionOp::serialize (
384+ llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
385+ {
386+ ctx.indent (OS);
387+ OS << prettyType (getType ());
388+ OS << " " << getName () << " = " ;
389+
390+ auto yield = mlir::cast<mlir::rlc::Yield>(getBody ().front ().getTerminator ());
391+ serializeExpression (yield.getArguments ()[0 ], OS, ctx);
392+ OS << " \n " ;
393+ }
394+
383395void mlir::rlc::EnumFieldDeclarationOp::serialize (
384396 llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
385397{
386398 ctx.indent (OS);
387- OS << getName () << " \n " ;
399+ OS << getName ();
400+ if (getBody ().empty ())
401+ {
402+ OS << " \n " ;
403+ return ;
404+ }
405+
406+ OS << " :\n " ;
407+ auto _ = ctx.increaseIndent ();
408+ serializeBlock (getBody ().front (), OS, ctx, true );
388409}
389410
390411void mlir::rlc::EnumDeclarationOp::serialize (
@@ -443,6 +464,14 @@ void mlir::rlc::TraitDefinition::serialize(
443464void mlir::rlc::CallOp::serialize (
444465 llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
445466{
467+ if (getOperation ()->hasAttr (" array_access_syntax" ))
468+ {
469+ serializeExpression (getArgs ()[0 ], OS, ctx);
470+ OS << " [" ;
471+ serializeExpression (getArgs ()[1 ], OS, ctx);
472+ OS << " ]" ;
473+ return ;
474+ }
446475 if (getOperation ()->hasAttr (" post_fix_call" ))
447476 {
448477 serializeExpression (getArgs ()[0 ], OS, ctx);
@@ -868,8 +897,16 @@ void mlir::rlc::ForFieldStatement::serialize(
868897 << " of " ;
869898
870899 auto terminator = mlir::cast<mlir::rlc::Yield>(getCondition ().front ().back ());
871- serializeExpression (terminator.getArguments ()[0 ], OS, ctx);
900+
901+ for (auto exp : llvm::drop_end (terminator.getArguments ()))
902+ {
903+ serializeExpression (exp, OS, ctx);
904+ OS << " , " ;
905+ }
906+ serializeExpression (terminator.getArguments ().back (), OS, ctx);
907+
872908 OS << " :\n " ;
909+
873910 {
874911 auto _ = ctx.increaseIndent ();
875912 serializeBlock (getBody ().front (), OS, ctx, true );
@@ -908,6 +945,16 @@ void mlir::rlc::WhileStatement::serialize(
908945 }
909946}
910947
948+ mlir::Location mlir::rlc::EnumFieldDeclarationOp::getEndLocation ()
949+ {
950+ if (getBody ().empty ())
951+ {
952+ return getLoc ();
953+ }
954+ // get end location of the final expression of this field
955+ return ::getEndLocation (&getBody ().front ().back ());
956+ }
957+
911958mlir::Location mlir::rlc::ActionStatement::getEndLocation ()
912959{
913960 return getPrecondition ().front ().getTerminator ()->getLoc ();
@@ -1114,6 +1161,7 @@ void mlir::rlc::FunctionOp::serialize(
11141161 mlir::cast<mlir::rlc::Yield>(getPrecondition ().front ().back ());
11151162 if (not terminator.getArguments ().empty ())
11161163 {
1164+ auto _ = ctx.startEmittingPrecondition ();
11171165 assert (terminator.getArguments ().size () == 1 );
11181166 OS << " { " ;
11191167
@@ -1186,6 +1234,7 @@ void mlir::rlc::ActionStatement::serialize(
11861234 mlir::cast<mlir::rlc::Yield>(getPrecondition ().front ().back ());
11871235 if (not terminator.getArguments ().empty ())
11881236 {
1237+ auto _ = ctx.startEmittingPrecondition ();
11891238 OS << " { " ;
11901239
11911240 serializeExpression (terminator.getArguments ()[0 ], OS, ctx);
@@ -1218,12 +1267,20 @@ void mlir::rlc::ActionsStatement::serialize(
12181267void mlir::rlc::ShortCircuitingAnd::serialize (
12191268 llvm::raw_ostream& OS, mlir::rlc::SerializationContext& ctx)
12201269{
1221- serializeExpression (
1222- mlir::cast<mlir::rlc::Yield>(getLhs ().front ().getTerminator ())
1223- .getArguments ()[0 ],
1224- OS,
1225- ctx);
1226- OS << " and " ;
1270+ bool topLevelAnd = ctx.isInPrecondition ();
1271+
1272+ {
1273+ auto _ = ctx.startEmittingPrecondition ();
1274+ serializeExpression (
1275+ mlir::cast<mlir::rlc::Yield>(getLhs ().front ().getTerminator ())
1276+ .getArguments ()[0 ],
1277+ OS,
1278+ ctx);
1279+ }
1280+ if (topLevelAnd)
1281+ OS << " , " ;
1282+ else
1283+ OS << " and " ;
12271284 serializeExpression (
12281285 mlir::cast<mlir::rlc::Yield>(getRhs ().front ().getTerminator ())
12291286 .getArguments ()[0 ],
@@ -1341,6 +1398,7 @@ void mlir::rlc::ActionFunction::serialize(
13411398 mlir::cast<mlir::rlc::Yield>(getPrecondition ().front ().back ());
13421399 if (not terminator.getArguments ().empty ())
13431400 {
1401+ auto _ = ctx.startEmittingPrecondition ();
13441402 OS << " { " ;
13451403
13461404 serializeExpression (terminator.getArguments ()[0 ], OS, ctx);
0 commit comments