@@ -556,26 +556,6 @@ impl ShaderProcessor {
556556                let  current_valid = scopes. last ( ) . unwrap ( ) . is_accepting_lines ( ) ; 
557557
558558                scopes. push ( Scope :: new ( current_valid && new_scope) ) ; 
559-             }  else  if  let  Some ( cap)  = self . define_regex . captures ( line)  { 
560-                 let  def = cap. get ( 1 ) . unwrap ( ) ; 
561-                 let  name = def. as_str ( ) . to_string ( ) ; 
562- 
563-                 if  let  Some ( val)  = cap. get ( 2 )  { 
564-                     if  let  Ok ( val)  = val. as_str ( ) . parse :: < u32 > ( )  { 
565-                         shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: UInt ( name,  val) ) ; 
566-                     }  else  if  let  Ok ( val)  = val. as_str ( ) . parse :: < i32 > ( )  { 
567-                         shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: Int ( name,  val) ) ; 
568-                     }  else  if  let  Ok ( val)  = val. as_str ( ) . parse :: < bool > ( )  { 
569-                         shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: Bool ( name,  val) ) ; 
570-                     }  else  { 
571-                         return  Err ( ProcessShaderError :: InvalidShaderDefDefinitionValue  { 
572-                             shader_def_name :  name, 
573-                             value :  val. as_str ( ) . to_string ( ) , 
574-                         } ) ; 
575-                     } 
576-                 }  else  { 
577-                     shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: Bool ( name,  true ) ) ; 
578-                 } 
579559            }  else  if  let  Some ( cap)  = self . else_ifdef_regex . captures ( line)  { 
580560                // When should we accept the code in an 
581561                // 
@@ -680,6 +660,26 @@ impl ShaderProcessor {
680660                    . is_match ( line) 
681661                { 
682662                    // ignore import path lines 
663+                 }  else  if  let  Some ( cap)  = self . define_regex . captures ( line)  { 
664+                     let  def = cap. get ( 1 ) . unwrap ( ) ; 
665+                     let  name = def. as_str ( ) . to_string ( ) ; 
666+ 
667+                     if  let  Some ( val)  = cap. get ( 2 )  { 
668+                         if  let  Ok ( val)  = val. as_str ( ) . parse :: < u32 > ( )  { 
669+                             shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: UInt ( name,  val) ) ; 
670+                         }  else  if  let  Ok ( val)  = val. as_str ( ) . parse :: < i32 > ( )  { 
671+                             shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: Int ( name,  val) ) ; 
672+                         }  else  if  let  Ok ( val)  = val. as_str ( ) . parse :: < bool > ( )  { 
673+                             shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: Bool ( name,  val) ) ; 
674+                         }  else  { 
675+                             return  Err ( ProcessShaderError :: InvalidShaderDefDefinitionValue  { 
676+                                 shader_def_name :  name, 
677+                                 value :  val. as_str ( ) . to_string ( ) , 
678+                             } ) ; 
679+                         } 
680+                     }  else  { 
681+                         shader_defs_unique. insert ( name. clone ( ) ,  ShaderDefVal :: Bool ( name,  true ) ) ; 
682+                     } 
683683                }  else  { 
684684                    let  mut  line_with_defs = line. to_string ( ) ; 
685685                    for  capture in  self . def_regex . captures_iter ( line)  { 
@@ -2503,6 +2503,34 @@ defined at end
25032503        assert_eq ! ( result. get_wgsl_source( ) . unwrap( ) ,  EXPECTED ) ; 
25042504    } 
25052505
2506+     #[ test]  
2507+     fn  process_shader_define_only_in_accepting_scopes ( )  { 
2508+         #[ rustfmt:: skip]  
2509+         const  WGSL :  & str  = r" 
2510+ #define GUARD 
2511+ #ifndef GUARD 
2512+ #define GUARDED 
2513+ #endif 
2514+ #ifdef GUARDED 
2515+ This should not be part of the result 
2516+ #endif 
2517+ " ; 
2518+ 
2519+         #[ rustfmt:: skip]  
2520+         const  EXPECTED :  & str  = r" 
2521+ " ; 
2522+         let  processor = ShaderProcessor :: default ( ) ; 
2523+         let  result = processor
2524+             . process ( 
2525+                 & Shader :: from_wgsl ( WGSL ) , 
2526+                 & [ ] , 
2527+                 & HashMap :: default ( ) , 
2528+                 & HashMap :: default ( ) , 
2529+             ) 
2530+             . unwrap ( ) ; 
2531+         assert_eq ! ( result. get_wgsl_source( ) . unwrap( ) ,  EXPECTED ) ; 
2532+     } 
2533+ 
25062534    #[ test]  
25072535    fn  process_shader_define_in_shader_with_value ( )  { 
25082536        #[ rustfmt:: skip]  
0 commit comments