@@ -5,6 +5,7 @@ import { IInfixParselet } from './infix'
55import { StatementExpression } from '../expressions/statement'
66import { StaticExpression } from '../expressions/static'
77import { ReturnExpression } from '../expressions'
8+ import { isGenericOperatorExpression } from '../expressions/genericOperator'
89
910export class StatementParselet implements IInfixParselet {
1011 constructor ( public precedence = 0 ) { }
@@ -78,14 +79,26 @@ export class StatementParselet implements IInfixParselet {
7879
7980 // Infer when statement should be returned
8081 if (
81- ! expressions . some ( ( expr ) => expr . isReturn ) &&
82- ! expressions [ expressions . length - 1 ] . isReturn &&
83- expressions [ expressions . length - 1 ] . type !==
84- 'GenericOperatorExpression'
82+ ( ! expressions . some ( ( expr ) => expr . isReturn ) ||
83+ ! expressions [ expressions . length - 1 ] . isReturn ) &&
84+ ! parser . match ( 'CURLY_RIGHT' , false )
8585 ) {
86- expressions [ expressions . length - 1 ] = new ReturnExpression (
87- expressions [ expressions . length - 1 ]
88- )
86+ const lastExpression = expressions [ expressions . length - 1 ]
87+
88+ // If the last expression is an assignment then append a return expression
89+ if (
90+ isGenericOperatorExpression ( lastExpression ) &&
91+ lastExpression . operator === '='
92+ ) {
93+ expressions . push (
94+ new ReturnExpression ( lastExpression . allExpressions [ 0 ] )
95+ )
96+ } else {
97+ // Anything else we just return the last expression
98+ expressions [ expressions . length - 1 ] = new ReturnExpression (
99+ lastExpression
100+ )
101+ }
89102 }
90103 }
91104
0 commit comments