@@ -3,25 +3,27 @@ mod quasiquote;
33pub mod syn_env;
44
55use std:: cell:: RefCell ;
6- use std:: collections:: { hash_map :: Entry , HashMap , HashSet } ;
6+ use std:: collections:: { HashMap , HashSet , hash_map :: Entry } ;
77use std:: error:: Error ;
88use std:: fmt;
99use std:: rc:: Rc ;
10+ use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
1011
1112use crate :: datum:: * ;
1213use crate :: expr:: * ;
1314use crate :: interner:: Symbol ;
1415
1516use itertools:: Itertools ;
16- use uuid:: Uuid ;
1717
1818use self :: syn_env:: { EnvBinding , SynEnv } ;
1919
20+ static NEXT_TEMP : AtomicUsize = AtomicUsize :: new ( 0 ) ;
21+
2022fn gen_temp_name ( ) -> Symbol {
2123 if cfg ! ( test) {
2224 "#temp_var" . into ( )
2325 } else {
24- format ! ( "#{}" , Uuid :: new_v4 ( ) . simple ( ) ) . into ( )
26+ format ! ( "#{}" , NEXT_TEMP . fetch_add ( 1 , Ordering :: Relaxed ) ) . into ( )
2527 }
2628}
2729
@@ -33,7 +35,7 @@ fn freshen_name(name: Symbol) -> Symbol {
3335 let fresh = if cfg ! ( test) {
3436 format ! ( "{name}#fresh" ) . into ( )
3537 } else {
36- format ! ( "{name}#{}" , Uuid :: new_v4 ( ) . simple ( ) ) . into ( )
38+ format ! ( "{name}#{}" , NEXT_TEMP . fetch_add ( 1 , Ordering :: Relaxed ) ) . into ( )
3739 } ;
3840 INV_FRESH . with_borrow_mut ( |inv| inv. insert ( fresh, name) ) ;
3941 fresh
7274 Entry :: Occupied ( _) => {
7375 return Err ( ParserError {
7476 kind : ParserErrorKind :: DuplicateArgument ( * arg) ,
75- } )
77+ } ) ;
7678 }
7779 Entry :: Vacant ( e) => {
7880 * arg = freshen_name ( * arg) ;
@@ -337,7 +339,7 @@ fn process_body<I: Iterator<Item = Datum>>(
337339 ExprOrDef :: MixedBegin ( _) => {
338340 return Err ( ParserError {
339341 kind : ParserErrorKind :: IllegalDefine ,
340- } )
342+ } ) ;
341343 }
342344 }
343345 eods. push ( eod) ;
0 commit comments