angular.core.parser library
Properties
Map<String, Operator> OPERATORS #
Map<String, Operator> OPERATORS = {
'undefined': NULL_OP,
'null': NULL_OP,
'true': (self, locals, a, b) => true,
'false': (self, locals, a, b) => false,
'+': (self, locals, aFn, bFn) {
var a = aFn.eval(self, locals);
var b = bFn.eval(self, locals);
return autoConvertAdd(a, b);
},
'-': (self, locals, a, b) {
assert(a != null || b != null);
var aResult = a != null ? a.eval(self, locals) : null;
var bResult = b != null ? b.eval(self, locals) : null;
return (aResult == null ? 0 : aResult) - (bResult == null ? 0 : bResult);
},
'*': (s, l, a, b) => a.eval(s, l) * b.eval(s, l),
'/': (s, l, a, b) => a.eval(s, l) / b.eval(s, l),
'%': (s, l, a, b) => a.eval(s, l) % b.eval(s, l),
'^': (s, l, a, b) => a.eval(s, l) ^ b.eval(s, l),
'=': NULL_OP,
'==': (s, l, a, b) => a.eval(s, l) == b.eval(s, l),
'!=': (s, l, a, b) => a.eval(s, l) != b.eval(s, l),
'<': (s, l, a, b) => a.eval(s, l) < b.eval(s, l),
'>': (s, l, a, b) => a.eval(s, l) > b.eval(s, l),
'<=': (s, l, a, b) => a.eval(s, l) <= b.eval(s, l),
'>=': (s, l, a, b) => a.eval(s, l) >= b.eval(s, l),
'&&': (s, l, a, b) => toBool(a.eval(s, l)) && toBool(b.eval(s, l)),
'||': (s, l, a, b) => toBool(a.eval(s, l)) || toBool(b.eval(s, l)),
'&': (s, l, a, b) => a.eval(s, l) & b.eval(s, l),
'|': NOT_IMPL_OP, //b(locals)(locals, a(locals))
'!': (self, locals, a, b) => !toBool(a.eval(self, locals))
}
var undefined_ #
var undefined_ = const Symbol("UNDEFINED")
Functions
dynamic safeFunctionCall(userFn, fnName, evalError) #
safeFunctionCall(userFn, fnName, evalError) {
if (userFn == null) {
throw evalError("Undefined function $fnName");
}
if (userFn is! Function) {
throw evalError("$fnName is not a function");
}
return userFn;
}
dynamic objectIndexSetField(o, i, v, evalError) #
objectIndexSetField(o, i, v, evalError) {
if (o is List) {
int arrayIndex = i.toInt();
if (o.length <= arrayIndex) { o.length = arrayIndex + 1; }
o[arrayIndex] = v;
} else if (o is Map) {
o[i.toString()] = v; // toString dangerous?
} else {
throw evalError("Attempting to set a field on a non-list, non-map");
}
return v;
}
dynamic objectIndexGetField(o, i, evalError) #
objectIndexGetField(o, i, evalError) {
if (o == null) throw evalError('Accessing null object');
if (o is List) {
return o[i.toInt()];
} else if (o is Map) {
return o[i.toString()]; // toString dangerous?
}
throw evalError("Attempted field access on a non-list, non-map");
}
dynamic autoConvertAdd(a, b) #
autoConvertAdd(a, b) {
if (a != null && b != null) {
// TODO(deboer): Support others.
if (a is String && b is! String) {
return a + b.toString();
}
if (a is! String && b is String) {
return a.toString() + b;
}
return a + b;
}
if (a != null) return a;
if (b != null) return b;
return null;
}
dynamic parserEvalError(String s, String text, stack) #
parserEvalError(String s, String text, stack) =>
['Eval Error: $s while evaling [$text]' +
(stack != null ? '\n\nFROM:\n$stack' : '')];