@@ -50,12 +50,14 @@ function buildMustache(
50
50
} ;
51
51
}
52
52
53
+ type PossiblyDeprecatedBlock = ASTv1 . Block | ASTv1 . Template ;
54
+
53
55
function buildBlock (
54
56
path : BuilderHead ,
55
57
params : Nullable < ASTv1 . Expression [ ] > ,
56
58
hash : Nullable < ASTv1 . Hash > ,
57
- _defaultBlock : ASTv1 . PossiblyDeprecatedBlock ,
58
- _elseBlock ?: Nullable < ASTv1 . PossiblyDeprecatedBlock > ,
59
+ _defaultBlock : PossiblyDeprecatedBlock ,
60
+ _elseBlock ?: Nullable < PossiblyDeprecatedBlock > ,
59
61
loc ?: SourceLocation ,
60
62
openStrip ?: ASTv1 . StripFlags ,
61
63
inverseStrip ?: ASTv1 . StripFlags ,
@@ -454,13 +456,14 @@ function buildProgram(
454
456
body ?: ASTv1 . Statement [ ] ,
455
457
blockParams ?: string [ ] ,
456
458
loc ?: SourceLocation
457
- ) : ASTv1 . Template {
458
- return {
459
- type : 'Template' ,
460
- body : body || [ ] ,
461
- blockParams : blockParams || [ ] ,
462
- loc : buildLoc ( loc || null ) ,
463
- } ;
459
+ ) : ASTv1 . Template | ASTv1 . Block {
460
+ deprecate ( `b.program is deprecated. Use b.template or b.blockItself instead.` ) ;
461
+
462
+ if ( blockParams && blockParams . length ) {
463
+ return buildBlockItself ( body , blockParams , false , loc ) ;
464
+ } else {
465
+ return buildTemplate ( body , [ ] , loc ) ;
466
+ }
464
467
}
465
468
466
469
function buildBlockItself (
@@ -482,15 +485,31 @@ function buildBlockItself(
482
485
483
486
function buildTemplate (
484
487
body ?: ASTv1 . Statement [ ] ,
485
- blockParams ? : string [ ] ,
488
+ locals : string [ ] = [ ] ,
486
489
loc ?: SourceLocation
487
490
) : ASTv1 . Template {
488
- return {
491
+ const _locals = Object . freeze ( [ ...locals ] ) ;
492
+
493
+ const node = {
489
494
type : 'Template' ,
495
+ get locals ( ) {
496
+ return _locals ;
497
+ } ,
490
498
body : body || [ ] ,
491
- blockParams : blockParams || [ ] ,
492
499
loc : buildLoc ( loc || null ) ,
493
500
} ;
501
+
502
+ Object . defineProperty ( node , 'blockParams' , {
503
+ enumerable : false ,
504
+ get ( ) {
505
+ deprecate (
506
+ `Template nodes can never have block params, for in-scope variables, use locals instead`
507
+ ) ;
508
+ return _locals ;
509
+ } ,
510
+ } ) ;
511
+
512
+ return node as ASTv1 . Template ;
494
513
}
495
514
496
515
function buildPosition ( line : number , column : number ) : SourcePosition {
0 commit comments