@@ -204,7 +204,6 @@ export default class Renderer {
204
204
? x `$$self.$$.dirty`
205
205
: x `#dirty` ) as Identifier | MemberExpression ;
206
206
207
- let bitmask ;
208
207
const get_bitmask = ( ) => {
209
208
const bitmask : BitMasks = [ ] ;
210
209
names . forEach ( ( name ) => {
@@ -228,48 +227,30 @@ export default class Renderer {
228
227
return bitmask ;
229
228
} ;
230
229
231
- let operator ;
232
- let left ;
233
- let right ;
234
-
235
230
return {
236
- get type ( ) {
237
- // we make the type a getter, even though it's always
238
- // a BinaryExpression, because it gives us an opportunity
239
- // to lazily create the node. TODO would be better if
240
- // context was determined before rendering, so that
241
- // this indirection was unnecessary
242
- if ( ! bitmask ) {
243
- bitmask = get_bitmask ( ) ;
244
-
245
- if ( ! bitmask . length ) {
246
- ( { operator, left, right } = x `${ dirty } & /*${ names . join ( ', ' ) } */ 0` as BinaryExpression ) ;
247
- } else if ( renderer . context_overflow ) {
248
- const expression = bitmask
249
- . map ( ( b , i ) => ( { b, i } ) )
250
- . filter ( ( { b } ) => b )
251
- . map ( ( { b, i } ) => x `${ dirty } [${ i } ] & /*${ b . names . join ( ', ' ) } */ ${ b . n } ` )
252
- . reduce ( ( lhs , rhs ) => x `${ lhs } | ${ rhs } ` ) ;
253
-
254
- ( { operator, left, right } = expression as BinaryExpression ) ;
255
- } else {
256
- ( { operator, left, right } = x `${ dirty } & /*${ names . join ( ', ' ) } */ ${ bitmask [ 0 ] . n } ` as BinaryExpression ) ;
257
- }
231
+ // Using a ParenthesizedExpression allows us to create
232
+ // the expression lazily. TODO would be better if
233
+ // context was determined before rendering, so that
234
+ // this indirection was unnecessary
235
+ type : 'ParenthesizedExpression' ,
236
+ get expression ( ) {
237
+ const bitmask = get_bitmask ( ) ;
238
+
239
+ if ( ! bitmask . length ) {
240
+ return x `${ dirty } & /*${ names . join ( ', ' ) } */ 0` as BinaryExpression ;
258
241
}
259
242
243
+ if ( renderer . context_overflow ) {
244
+ return bitmask
245
+ . map ( ( b , i ) => ( { b, i } ) )
246
+ . filter ( ( { b } ) => b )
247
+ . map ( ( { b, i } ) => x `${ dirty } [${ i } ] & /*${ b . names . join ( ', ' ) } */ ${ b . n } ` )
248
+ . reduce ( ( lhs , rhs ) => x `${ lhs } | ${ rhs } ` ) ;
249
+ }
260
250
261
- return 'BinaryExpression' ;
262
- } ,
263
- get operator ( ) {
264
- return operator ;
265
- } ,
266
- get left ( ) {
267
- return left ;
268
- } ,
269
- get right ( ) {
270
- return right ;
251
+ return x `${ dirty } & /*${ names . join ( ', ' ) } */ ${ bitmask [ 0 ] . n } ` as BinaryExpression ;
271
252
}
272
- } as Expression ;
253
+ } as any ;
273
254
}
274
255
275
256
reference ( node : string | Identifier | MemberExpression ) {
0 commit comments