@@ -115,6 +115,7 @@ function parser() {
115
115
116
116
var stream = through ( write , end )
117
117
, check = arguments . length ? [ ] . slice . call ( arguments ) : [ ]
118
+ , ended = false
118
119
, depth = 0
119
120
, state = [ ]
120
121
, tokens = [ ]
@@ -266,8 +267,8 @@ function parser() {
266
267
emit = true
267
268
}
268
269
269
- if ( emit ) stream . emit ( 'data' , _node )
270
-
270
+ if ( emit && ! errored ) stream . emit ( 'data' , _node )
271
+
271
272
node = _node . parent
272
273
return _node
273
274
}
@@ -307,8 +308,8 @@ function parser() {
307
308
return tokens . shift ( ) , state . shift ( )
308
309
}
309
310
switch ( token . type ) {
310
- case 'eof' : return state . shift ( )
311
- case 'keyword' :
311
+ case 'eof' : return got_eof ( )
312
+ case 'keyword' :
312
313
switch ( token . data ) {
313
314
case 'for' : return state . unshift ( forstmt ( ) ) ;
314
315
case 'if' : return state . unshift ( ifstmt ( ) ) ;
@@ -346,6 +347,12 @@ function parser() {
346
347
}
347
348
}
348
349
350
+ function got_eof ( ) {
351
+ if ( ended ) errored = true
352
+ ended = true
353
+ return state . shift ( )
354
+ }
355
+
349
356
function parse_decl ( ) {
350
357
var stmt = state [ 0 ]
351
358
@@ -584,7 +591,14 @@ function parser() {
584
591
return
585
592
586
593
function parseexpr ( tokens ) {
587
- return full_parse_expr ( state , tokens ) , state . shift ( )
594
+ try {
595
+ full_parse_expr ( state , tokens )
596
+ } catch ( err ) {
597
+ stream . emit ( 'error' , err )
598
+ errored = true
599
+ }
600
+
601
+ return state . shift ( )
588
602
}
589
603
}
590
604
0 commit comments