diff --git a/src/protocol/ast_printer.rs b/src/protocol/ast_printer.rs index 6bdc0dd1171d61344c781fe57b0ee3e296f35098..8a059052ecad78939c48f82b234610db38ebccbd 100644 --- a/src/protocol/ast_printer.rs +++ b/src/protocol/ast_printer.rs @@ -38,6 +38,8 @@ const PREFIX_SYNC_STMT_ID: &'static str = "SSyn"; const PREFIX_ENDSYNC_STMT_ID: &'static str = "SESy"; const PREFIX_FORK_STMT_ID: &'static str = "SFrk"; const PREFIX_END_FORK_STMT_ID: &'static str = "SEFk"; +const PREFIX_SELECT_STMT_ID: &'static str = "SSel"; +const PREFIX_END_SELECT_STMT_ID: &'static str = "SESl"; const PREFIX_RETURN_STMT_ID: &'static str = "SRet"; const PREFIX_ASSERT_STMT_ID: &'static str = "SAsr"; const PREFIX_GOTO_STMT_ID: &'static str = "SGot"; @@ -530,6 +532,34 @@ impl ASTWriter { .with_s_key("EndFork"); self.kv(indent2).with_s_key("StartFork").with_disp_val(&stmt.start_fork.0.index); self.kv(indent2).with_s_key("Next").with_disp_val(&stmt.next.index); + }, + Statement::Select(stmt) => { + self.kv(indent).with_id(PREFIX_SELECT_STMT_ID, stmt.this.0.index) + .with_s_key("Select"); + self.kv(indent2).with_s_key("EndSelect").with_disp_val(&stmt.end_select.0.index); + self.kv(indent2).with_s_key("Cases"); + let indent3 = indent2 + 1; + let indent4 = indent3 + 1; + for case in &stmt.cases { + if let Some(guard_var_id) = case.guard_var { + self.kv(indent3).with_s_key("GuardStatement"); + self.write_stmt(heap, guard_var_id.upcast().upcast(), indent4); + } else { + self.kv(indent3).with_s_key("GuardStatement").with_s_val("None"); + } + + self.kv(indent3).with_s_key("GuardExpression"); + self.write_stmt(heap, case.guard_expr.upcast(), indent4); + + self.kv(indent3).with_s_key("Block"); + self.write_stmt(heap, case.block.upcast(), indent4); + } + }, + Statement::EndSelect(stmt) => { + self.kv(indent).with_id(PREFIX_END_SELECT_STMT_ID, stmt.this.0.index) + .with_s_key("EndSelect"); + self.kv(indent2).with_s_key("StartSelect").with_disp_val(&stmt.start_select.0.index); + self.kv(indent2).with_s_key("Next").with_disp_val(&stmt.next.index); } Statement::Return(stmt) => { self.kv(indent).with_id(PREFIX_RETURN_STMT_ID, stmt.this.0.index)