fixed being unable to use 'yield throw'
This commit is contained in:
parent
b49b41320e
commit
e3f6e19950
|
@ -2530,7 +2530,7 @@
|
||||||
if (o.scope.parent == null) {
|
if (o.scope.parent == null) {
|
||||||
this.error('yield statements must occur within a function generator.');
|
this.error('yield statements must occur within a function generator.');
|
||||||
}
|
}
|
||||||
if (indexOf.call(Object.keys(this.first), 'expression') >= 0) {
|
if (indexOf.call(Object.keys(this.first), 'expression') >= 0 && !(this.first instanceof Throw)) {
|
||||||
if (this.first.expression != null) {
|
if (this.first.expression != null) {
|
||||||
parts.push(this.first.expression.compileToFragments(o, LEVEL_OP));
|
parts.push(this.first.expression.compileToFragments(o, LEVEL_OP));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1801,7 +1801,7 @@ exports.Op = class Op extends Base
|
||||||
op = @operator
|
op = @operator
|
||||||
if not o.scope.parent?
|
if not o.scope.parent?
|
||||||
@error 'yield statements must occur within a function generator.'
|
@error 'yield statements must occur within a function generator.'
|
||||||
if 'expression' in Object.keys @first
|
if 'expression' in Object.keys(@first) and not (@first instanceof Throw)
|
||||||
parts.push @first.expression.compileToFragments o, LEVEL_OP if @first.expression?
|
parts.push @first.expression.compileToFragments o, LEVEL_OP if @first.expression?
|
||||||
else
|
else
|
||||||
parts.push [@makeCode "(#{op} "]
|
parts.push [@makeCode "(#{op} "]
|
||||||
|
|
|
@ -124,3 +124,14 @@ test "switch expressions", ->
|
||||||
ok z.value is 1337 and z.done is false
|
ok z.value is 1337 and z.done is false
|
||||||
z = x.next 3
|
z = x.next 3
|
||||||
ok z.value is 3 and z.done is true
|
ok z.value is 3 and z.done is true
|
||||||
|
|
||||||
|
test "`yield` can be thrown", ->
|
||||||
|
x = do ->
|
||||||
|
throw yield null
|
||||||
|
x.next()
|
||||||
|
throws -> x.next new Error "boom"
|
||||||
|
|
||||||
|
test "`throw` can be yielded", ->
|
||||||
|
x = do ->
|
||||||
|
yield throw new Error "boom"
|
||||||
|
throws -> x.next()
|
||||||
|
|
Loading…
Reference in New Issue