aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.js')
-rw-r--r--src/parser.js53
1 files changed, 18 insertions, 35 deletions
diff --git a/src/parser.js b/src/parser.js
index 8d7e607c..59d7899a 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -240,22 +240,29 @@ function parser(text, json){
function (){ throwError("is not valid json", {text:text, index:0}); };
}
return {
- assertAllConsumed: assertAllConsumed,
- assignable: assignable,
- primary: primary,
- statements: statements,
- validator: validator,
- formatter: formatter,
- filter: filter,
- //TODO: delete me, since having watch in UI is logic in UI. (leftover form getangular)
- watch: watch
+ assignable: assertConsumed(assignable),
+ primary: assertConsumed(primary),
+ statements: assertConsumed(statements),
+ validator: assertConsumed(validator),
+ formatter: assertConsumed(formatter),
+ filter: assertConsumed(filter)
};
+ function assertConsumed(fn) {
+ return function(){
+ var value = fn();
+ if (tokens.length !== 0) {
+ throwError("is an unexpected token", tokens[0]);
+ }
+ return value;
+ };
+ }
+
///////////////////////////////////
function throwError(msg, token) {
- throw Error("Parse Error: Token '" + token.text +
+ throw Error("Syntax Error: Token '" + token.text +
"' " + msg + " at column " +
- (token.index + 1) + " of expression [" +
+ (token.index + 1) + " of the expression [" +
text + "] starting at [" + text.substring(token.index) + "].");
}
@@ -313,12 +320,6 @@ function parser(text, json){
return tokens.length > 0;
}
- function assertAllConsumed(){
- if (tokens.length !== 0) {
- throwError("is extra token not part of expression", tokens[0]);
- }
- }
-
function statements(){
var statements = [];
while(true) {
@@ -639,24 +640,6 @@ function parser(text, json){
};
}
- //TODO: delete me, since having watch in UI is logic in UI. (leftover form getangular)
- function watch () {
- var decl = [];
- while(hasTokens()) {
- decl.push(watchDecl());
- if (!expect(';')) {
- assertAllConsumed();
- }
- }
- assertAllConsumed();
- return function (self){
- for ( var i = 0; i < decl.length; i++) {
- var d = decl[i](self);
- self.addListener(d.name, d.fn);
- }
- };
- }
-
function watchDecl () {
var anchorName = expect().text;
consume(":");