@@ -204,7 +204,7 @@ export class ClassCompiler
204204 {
205205 while ( ! this . parser . atMethodEnd ( ) ) {
206206 this . compileConstructor ( ) ;
207- this . compileLocalVariables ( ) ;
207+ this . compileMethodVariables ( ) ;
208208 this . compileStatements ( ) ;
209209 }
210210
@@ -222,16 +222,16 @@ export class ClassCompiler
222222 this . method . body . add ( node ) ;
223223 }
224224
225- private compileLocalVariables ( )
225+ private compileMethodVariables ( )
226226 {
227227 if ( ! this . parser . tryParseTerm ( "|" ) )
228228 return ;
229229
230230 while ( ! this . parser . tryParseTerm ( "|" ) )
231- this . compileLocalVariable ( ) ;
231+ this . compileVariable ( ) ;
232232 }
233233
234- private compileLocalVariable ( )
234+ private compileVariable ( ) : SourceNode
235235 {
236236 let variableName : string = this . parser . parseVariableName ( ) ;
237237
@@ -248,8 +248,10 @@ export class ClassCompiler
248248 compiledVariable . node = this . sourceNode ( source , "variable" ) ;
249249
250250 this . method . vars . push ( compiledVariable ) ;
251+ return compiledVariable . node ;
251252 }
252253
254+
253255 private compileStatements ( )
254256 {
255257 while ( ! this . parser . atMethodEnd ( ) ) {
@@ -379,18 +381,22 @@ export class ClassCompiler
379381 let node = this . sourceNode ( "stBlock$class.$fromJs$( " + asyncString + "( " , "block" ) ;
380382
381383 let oldArgs = this . method . args . slice ( ) ;
384+ let oldVars = this . method . vars . slice ( ) ;
382385
383386 if ( this . parser . peekTerm ( ) == ":" )
384387 this . compileBlockArguments ( node ) ;
385388
386389 node . add ( " ) => {\n" ) ;
387390
391+ this . compileBlockVariables ( node ) ;
392+
388393 while ( ! this . parser . tryParseTerm ( "]" ) )
389394 node . add ( this . compileBlockStatement ( ) ) ;
390395
391396 node . add ( "\t\t\t} )" ) ;
392397
393398 this . method . args = oldArgs ;
399+ this . method . vars = oldVars ;
394400
395401 this . addClassReferenceToClassAndMethod ( "Block" ) ;
396402
@@ -416,6 +422,19 @@ export class ClassCompiler
416422 this . parser . mustParseTerm ( "|" ) ;
417423 }
418424
425+ // Parse block local variables and add them to method variables (temporarily).
426+
427+ compileBlockVariables ( node : SourceNode )
428+ {
429+ if ( ! this . parser . tryParseTerm ( "|" ) )
430+ return ;
431+
432+ while ( ! this . parser . tryParseTerm ( "|" ) ) {
433+ node . add ( "\t\t" ) ;
434+ node . add ( this . compileVariable ( ) ) ;
435+ }
436+ }
437+
419438 // A block statement consists of an expression,
420439 // possibly preceded by the return operator "^".
421440
0 commit comments