diff options
author | kpdecker <kpdecker@gmail.com> | 2014-12-21 22:32:50 -0600 |
---|---|---|
committer | kpdecker <kpdecker@gmail.com> | 2014-12-21 22:32:50 -0600 |
commit | 9e907e67854ea1ae208fe061452a9c9e2ce9468b (patch) | |
tree | 48840a49d3dc79b549615f2a7344f8b5ecc50de4 /lib/handlebars/compiler/compiler.js | |
parent | 6d2239d8ac471d05086026e2bd622f879ccde52b (diff) | |
download | handlebars.js-9e907e67854ea1ae208fe061452a9c9e2ce9468b.zip handlebars.js-9e907e67854ea1ae208fe061452a9c9e2ce9468b.tar.gz handlebars.js-9e907e67854ea1ae208fe061452a9c9e2ce9468b.tar.bz2 |
Expose AST helpers in public API
Diffstat (limited to 'lib/handlebars/compiler/compiler.js')
-rw-r--r-- | lib/handlebars/compiler/compiler.js | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/lib/handlebars/compiler/compiler.js b/lib/handlebars/compiler/compiler.js index 5e58915..7be96cb 100644 --- a/lib/handlebars/compiler/compiler.js +++ b/lib/handlebars/compiler/compiler.js @@ -1,26 +1,10 @@ import Exception from "../exception"; import {isArray} from "../utils"; +import AST from "./ast"; var slice = [].slice; -// a mustache is definitely a helper if: -// * it is an eligible helper, and -// * it has at least one parameter or hash segment -function helperExpr(sexpr) { - return !!(sexpr.isHelper || sexpr.params.length || sexpr.hash); -} - -function scopedId(path) { - return (/^\.|this\b/).test(path.original); -} - -// an ID is simple if it only has one part, and that part is not -// `..` or `this`. -function simpleId(path) { - return path.parts.length === 1 && !scopedId(path) && !path.depth; -} - export function Compiler() {} // the foundHelper register will disambiguate helper lookup from finding a @@ -239,7 +223,7 @@ Compiler.prototype = { path.falsy = true; this.accept(path); - this.opcode('invokeHelper', params.length, path.original, simpleId(path)); + this.opcode('invokeHelper', params.length, path.original, AST.helpers.simpleId(path)); } }, @@ -255,7 +239,7 @@ Compiler.prototype = { this.options.data = true; this.opcode('lookupData', path.depth, path.parts); } else { - this.opcode('lookupOnContext', path.parts, path.falsy, scopedId(path)); + this.opcode('lookupOnContext', path.parts, path.falsy, AST.helpers.scopedId(path)); } }, @@ -301,12 +285,12 @@ Compiler.prototype = { classifySexpr: function(sexpr) { // a mustache is an eligible helper if: // * its id is simple (a single part, not `this` or `..`) - var isHelper = helperExpr(sexpr); + var isHelper = AST.helpers.helperExpression(sexpr); // if a mustache is an eligible helper but not a definite // helper, it is ambiguous, and will be resolved in a later // pass or at runtime. - var isEligible = isHelper || simpleId(sexpr.path); + var isEligible = isHelper || AST.helpers.simpleId(sexpr.path); var options = this.options; |