@@ -28,6 +28,7 @@ var FUNCTION_NAME = /function\s+anonymous\s*\(it[^)]*\)\s*{/;
2828var OUT_EMPTY_STRING = / o u t \s * \+ = \s * ' \s * ' ; / g;
2929var ISTANBUL = / ' ( i s t a n b u l [ ^ ' ] + ) ' ; / g;
3030var ERROR_KEYWORD = / \$ e r r o r K e y w o r d / g;
31+ var ERROR_KEYWORD_STR = ERROR_KEYWORD . source . replace ( / ^ \\ \\ / , '' ) ;
3132var ERROR_KEYWORD_OR = / \$ e r r o r K e y w o r d \s + \| \| / g;
3233var VARS = [
3334 '$errs' , '$valid' , '$lvl' , '$data' , '$dataLvl' ,
@@ -52,22 +53,22 @@ files.forEach(function (f) {
5253 console . log ( 'compiled' , keyword ) ;
5354
5455 function removeUnusedVar ( v ) {
55- v = v . replace ( / \$ / g, '\\$$' ) ;
56- var regexp = new RegExp ( v + '[^A-Za-z0-9_$]' , 'g' ) ;
57- var count = occurrences ( regexp ) ;
56+ var count = 0 , idx = 0 ;
57+ while ( ( idx = code . indexOf ( v , idx ) ) !== - 1 ) {
58+ if ( idx + v . length >= code . length || ! / [ A - Z a - z 0 - 9 _ $ ] / . test ( code [ idx + v . length ] ) ) count ++ ;
59+ idx += 1 ;
60+ }
5861 if ( count == 1 ) {
59- regexp = new RegExp ( 'var\\s+' + v + '\\s*=[^;]+;|var\\s+' + v + ';' ) ;
62+ var vEsc = v . replace ( / \$ / g, '\\$$' ) ;
63+ var regexp = new RegExp ( 'var\\s+' + vEsc + '\\s*=[^;]*?;|var\\s+' + vEsc + ';' ) ;
6064 code = code . replace ( regexp , '' ) ;
6165 }
6266 }
6367
6468 function removeAlwaysFalsyInOr ( ) {
65- var countUsed = occurrences ( ERROR_KEYWORD ) ;
66- var countOr = occurrences ( ERROR_KEYWORD_OR ) ;
69+ var countUsed = code . split ( ERROR_KEYWORD_STR ) . length - 1 ;
70+ var countOr = 0 , idx = 0 ;
71+ while ( ( idx = code . indexOf ( ERROR_KEYWORD_STR + ' ||' , idx ) ) !== - 1 ) { countOr ++ ; idx += 1 ; }
6772 if ( countUsed == countOr + 1 ) code = code . replace ( ERROR_KEYWORD_OR , '' ) ;
6873 }
69-
70- function occurrences ( regexp ) {
71- return ( code . match ( regexp ) || [ ] ) . length ;
72- }
7374} ) ;
0 commit comments