Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: tools/testing/dart/status_expression.dart

Issue 15778003: Implement binary "!=" operator in status file parser. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/standalone/status_expression_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/dart/status_expression.dart
diff --git a/tools/testing/dart/status_expression.dart b/tools/testing/dart/status_expression.dart
index 95f175cfe852896fa47a265096485ebcb1168b8b..8fae9e10969f6537ed68b7b1ce11bf7a6ac724aa 100644
--- a/tools/testing/dart/status_expression.dart
+++ b/tools/testing/dart/status_expression.dart
@@ -8,8 +8,8 @@ library status_expression;
* Parse and evaluate expressions in a .status file for Dart and V8.
* There are set expressions and Boolean expressions in a .status file.
* The grammar is:
- * BooleanExpression := $variableName == value | $variableName |
- * (BooleanExpression) |
+ * BooleanExpression := $variableName == value | $variableName != value |
+ * $variableName | (BooleanExpression) |
* BooleanExpression && BooleanExpression |
* BooleanExpression || BooleanExpression
*
@@ -37,6 +37,7 @@ class Token {
static const String DOLLAR_SYMBOL = r"$";
static const String UNION = ",";
static const String EQUALS = "==";
+ static const String NOT_EQUALS = "!=";
static const String AND = "&&";
static const String OR = "||";
}
@@ -49,10 +50,10 @@ class Tokenizer {
Tokenizer(String this.expression)
: tokens = new List<String>();
- // Tokens are : "(", ")", "$", ",", "&&", "||", "==", and (maximal) \w+.
+ // Tokens are : "(", ")", "$", ",", "&&", "||", "==", "!=", and (maximal) \w+.
static final testRegexp =
- new RegExp(r"^([()$\w\s,]|(\&\&)|(\|\|)|(\=\=))+$");
- static final regexp = new RegExp(r"[()$,]|(\&\&)|(\|\|)|(\=\=)|\w+");
+ new RegExp(r"^([()$\w\s,]|(\&\&)|(\|\|)|(\=\=)|(\!\=))+$");
+ static final regexp = new RegExp(r"[()$,]|(\&\&)|(\|\|)|(\=\=)|(\!\=)|\w+");
List<String> tokenize() {
if (!testRegexp.hasMatch(expression)) {
@@ -77,12 +78,17 @@ abstract class SetExpression {
class Comparison implements BooleanExpression {
TermVariable left;
TermConstant right;
+ bool negate;
- Comparison(this.left, this.right);
+ Comparison(this.left, this.right, this.negate);
- bool evaluate(environment) =>
- left.termValue(environment) == right.termValue(environment);
- String toString() => "(\$${left.name} == ${right.value})";
+ bool evaluate(environment) {
+ return
+ negate != (left.termValue(environment) == right.termValue(environment));
+ }
+
+ String toString() =>
+ "(\$${left.name} ${negate ? '!=' : '=='} ${right.value})";
}
@@ -290,7 +296,9 @@ class ExpressionParser {
}
TermVariable left = new TermVariable(scanner.current);
scanner.advance();
- if (scanner.current == Token.EQUALS) {
+ if (scanner.current == Token.EQUALS ||
+ scanner.current == Token.NOT_EQUALS) {
+ bool negate = scanner.current == Token.NOT_EQUALS;
scanner.advance();
if (!new RegExp(r"^\w+$").hasMatch(scanner.current)) {
throw new RuntimeError(
@@ -298,7 +306,7 @@ class ExpressionParser {
}
TermConstant right = new TermConstant(scanner.current);
scanner.advance();
- return new Comparison(left, right);
+ return new Comparison(left, right, negate);
} else {
return new BooleanVariable(left);
}
« no previous file with comments | « tests/standalone/status_expression_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698