@@ -6,12 +6,12 @@ use crate::*;
66/// makes rules into a SSA-like format (see [`NormFact`]).
77pub ( crate ) fn desugar_program (
88 program : Vec < Command > ,
9- symbol_gen : & mut SymbolGen ,
9+ parser : & mut Parser ,
1010 seminaive_transform : bool ,
1111) -> Result < Vec < NCommand > , Error > {
1212 let mut res = vec ! [ ] ;
1313 for command in program {
14- let desugared = desugar_command ( command, symbol_gen , seminaive_transform) ?;
14+ let desugared = desugar_command ( command, parser , seminaive_transform) ?;
1515 res. extend ( desugared) ;
1616 }
1717 Ok ( res)
@@ -22,7 +22,7 @@ pub(crate) fn desugar_program(
2222/// makes rules into a SSA-like format (see [`NormFact`]).
2323pub ( crate ) fn desugar_command (
2424 command : Command ,
25- symbol_gen : & mut SymbolGen ,
25+ parser : & mut Parser ,
2626 seminaive_transform : bool ,
2727) -> Result < Vec < NCommand > , Error > {
2828 let res = match command {
@@ -102,28 +102,28 @@ pub(crate) fn desugar_command(
102102
103103 res
104104 }
105- Command :: Rewrite ( ruleset, rewrite, subsume) => {
106- desugar_rewrite ( ruleset, rewrite_name ( & rewrite ) . into ( ) , & rewrite, subsume)
105+ Command :: Rewrite ( ruleset, ref rewrite, subsume) => {
106+ desugar_rewrite ( ruleset, rule_name ( & command ) , rewrite, subsume)
107107 }
108- Command :: BiRewrite ( ruleset, rewrite) => {
109- desugar_birewrite ( ruleset, rewrite_name ( & rewrite ) . into ( ) , & rewrite)
108+ Command :: BiRewrite ( ruleset, ref rewrite) => {
109+ desugar_birewrite ( ruleset, rule_name ( & command ) , rewrite)
110110 }
111111 Command :: Include ( span, file) => {
112112 let s = std:: fs:: read_to_string ( & file)
113113 . unwrap_or_else ( |_| panic ! ( "{span} Failed to read file {file}" ) ) ;
114114 return desugar_program (
115- parse_program ( Some ( file) , & s) ?,
116- symbol_gen ,
115+ parse_program ( Some ( file) , & s, parser ) ?,
116+ parser ,
117117 seminaive_transform,
118118 ) ;
119119 }
120120 Command :: Rule {
121121 ruleset,
122122 mut name,
123- rule,
123+ ref rule,
124124 } => {
125125 if name == "" . into ( ) {
126- name = rule . to_string ( ) . replace ( '\"' , "'" ) . into ( ) ;
126+ name = rule_name ( & command ) ;
127127 }
128128
129129 let result = vec ! [ NCommand :: NormRule {
@@ -144,7 +144,7 @@ pub(crate) fn desugar_command(
144144 span,
145145 expr,
146146 schedule,
147- } => desugar_simplify ( & expr, & schedule, span, symbol_gen ) ,
147+ } => desugar_simplify ( & expr, & schedule, span, parser ) ,
148148 Command :: RunSchedule ( sched) => {
149149 vec ! [ NCommand :: RunSchedule ( sched. clone( ) ) ]
150150 }
@@ -171,9 +171,9 @@ pub(crate) fn desugar_command(
171171 // ((extract {fresh} {variants}))
172172 // :ruleset {fresh_ruleset})
173173 // (run {fresh_ruleset} 1)
174- let fresh = symbol_gen. fresh ( & "desugar_qextract_var" . into ( ) ) ;
175- let fresh_ruleset = symbol_gen. fresh ( & "desugar_qextract_ruleset" . into ( ) ) ;
176- let fresh_rulename = symbol_gen. fresh ( & "desugar_qextract_rulename" . into ( ) ) ;
174+ let fresh = parser . symbol_gen . fresh ( & "desugar_qextract_var" . into ( ) ) ;
175+ let fresh_ruleset = parser . symbol_gen . fresh ( & "desugar_qextract_ruleset" . into ( ) ) ;
176+ let fresh_rulename = parser . symbol_gen . fresh ( & "desugar_qextract_rulename" . into ( ) ) ;
177177 let rule = Rule {
178178 span : span. clone ( ) ,
179179 body : vec ! [ Fact :: Eq (
@@ -218,7 +218,7 @@ pub(crate) fn desugar_command(
218218 vec ! [ NCommand :: Pop ( span, num) ]
219219 }
220220 Command :: Fail ( span, cmd) => {
221- let mut desugared = desugar_command ( * cmd, symbol_gen , seminaive_transform) ?;
221+ let mut desugared = desugar_command ( * cmd, parser , seminaive_transform) ?;
222222
223223 let last = desugared. pop ( ) . unwrap ( ) ;
224224 desugared. push ( NCommand :: Fail ( span, Box :: new ( last) ) ) ;
@@ -322,10 +322,10 @@ fn desugar_simplify(
322322 expr : & Expr ,
323323 schedule : & Schedule ,
324324 span : Span ,
325- symbol_gen : & mut SymbolGen ,
325+ parser : & mut Parser ,
326326) -> Vec < NCommand > {
327327 let mut res = vec ! [ NCommand :: Push ( 1 ) ] ;
328- let lhs = symbol_gen. fresh ( & "desugar_simplify" . into ( ) ) ;
328+ let lhs = parser . symbol_gen . fresh ( & "desugar_simplify" . into ( ) ) ;
329329 res. push ( NCommand :: CoreAction ( Action :: Let (
330330 span. clone ( ) ,
331331 lhs,
@@ -339,7 +339,7 @@ fn desugar_simplify(
339339 variants : 0 ,
340340 expr : Expr :: Var ( span. clone ( ) , lhs) ,
341341 } ,
342- symbol_gen ,
342+ parser ,
343343 false ,
344344 )
345345 . unwrap ( ) ,
@@ -349,6 +349,10 @@ fn desugar_simplify(
349349 res
350350}
351351
352- pub ( crate ) fn rewrite_name ( rewrite : & Rewrite ) -> String {
353- rewrite. to_string ( ) . replace ( '\"' , "'" )
352+ pub fn rule_name < Head , Leaf > ( command : & GenericCommand < Head , Leaf > ) -> Symbol
353+ where
354+ Head : Clone + Display ,
355+ Leaf : Clone + PartialEq + Eq + Hash + Display ,
356+ {
357+ command. to_string ( ) . replace ( '\"' , "'" ) . into ( )
354358}
0 commit comments