@@ -39,7 +39,11 @@ impl Parser {
39
39
self
40
40
}
41
41
42
- fn resolve_name ( src : & str , sym_table : & HashMap < & ' static str , String > , file : & str , line : u32 ) -> String {
42
+ fn resolve_name ( & self , src : String ) -> String {
43
+ if self . sym_table . is_none ( ) {
44
+ return src;
45
+ }
46
+
43
47
let mut output = String :: new ( ) ;
44
48
let input: Vec < char > = src. chars ( ) . collect ( ) ;
45
49
let len = input. len ( ) ;
@@ -62,13 +66,13 @@ impl Parser {
62
66
}
63
67
if with_bracket {
64
68
if input[ i] != '}' {
65
- panic ! ( "invalid name {}, {}:{}\n {}" , var, file, line, src) ;
69
+ panic ! ( "invalid name {}, {}:{}\n {}" , var, self . file, self . line, src) ;
66
70
}
67
71
} else {
68
72
i -= 1 ; // back off 1 char
69
73
}
70
- match sym_table. get ( var. as_str ( ) ) {
71
- None => panic ! ( "resolve {} failed, {}:{}\n {}" , var, file, line, src) ,
74
+ match self . sym_table . as_ref ( ) . unwrap ( ) . get ( var. as_str ( ) ) {
75
+ None => panic ! ( "resolve {} failed, {}:{}\n {}" , var, self . file, self . line, src) ,
72
76
Some ( v) => output += v,
73
77
} ;
74
78
} else {
@@ -186,11 +190,8 @@ impl Parser {
186
190
ret. set_redirect ( 0 , self . parse_redirect ( s, i) ) ;
187
191
}
188
192
189
- let mut arg1 = self . parse_normal_arg ( s, i) ;
190
- if let Some ( sym_table) = self . sym_table . as_ref ( ) {
191
- arg1 = Parser :: resolve_name ( & arg1, sym_table, & self . file , self . line ) ;
192
- }
193
- arg += & arg1;
193
+ let arg1 = self . parse_normal_arg ( s, i) ;
194
+ arg += & self . resolve_name ( arg1) ;
194
195
}
195
196
if !arg. is_empty ( ) {
196
197
ret. add_arg ( arg) ;
@@ -270,11 +271,8 @@ impl Parser {
270
271
}
271
272
}
272
273
273
- let mut file = self . parse_normal_arg ( s, i) ;
274
- if let Some ( sym_table) = self . sym_table . as_ref ( ) {
275
- file = Parser :: resolve_name ( & file, sym_table, & self . file , self . line ) ;
276
- }
277
- FdOrFile :: File ( file, append)
274
+ let file = self . parse_normal_arg ( s, i) ;
275
+ FdOrFile :: File ( self . resolve_name ( file) , append)
278
276
}
279
277
280
278
fn parse_str_lit ( & mut self , s : & Vec < char > , i : & mut usize ) -> String {
@@ -331,7 +329,7 @@ impl Parser {
331
329
if is_raw {
332
330
return str_lit; // don't resolve names for raw string literals
333
331
} else {
334
- return Parser :: resolve_name ( & str_lit , self . sym_table . as_ref ( ) . unwrap ( ) , & self . file , self . line ) ;
332
+ return self . resolve_name ( str_lit ) ;
335
333
}
336
334
}
337
335
}
0 commit comments