Allow this references in literal statements

Fixes #967
This commit is contained in:
kpdecker
2015-04-14 01:12:39 -05:00
parent a7160a8d27
commit 54e743a09a
4 changed files with 33 additions and 11 deletions
+13 -2
View File
@@ -12,6 +12,14 @@ export function SourceLocation(source, locInfo) {
};
}
export function id(token) {
if (/^\[.*\]$/.test(token)) {
return token.substr(1, token.length - 2);
} else {
return token;
}
}
export function stripFlags(open, close) {
return {
open: open.charAt(2) === '~',
@@ -34,10 +42,13 @@ export function preparePath(data, parts, locInfo) {
depthString = '';
for(var i=0,l=parts.length; i<l; i++) {
var part = parts[i].part;
var part = parts[i].part,
// If we have [] syntax then we do not treat path references as operators,
// i.e. foo.[this] resolves to approximately context.foo['this']
isLiteral = parts[i].original !== part;
original += (parts[i].separator || '') + part;
if (part === '..' || part === '.' || part === 'this') {
if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
if (dig.length > 0) {
throw new Exception('Invalid path: ' + original, {loc: locInfo});
} else if (part === '..') {