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

Unified Diff: third_party/pkg/angular/lib/core/parser/dynamic_parser_impl.dart

Issue 1058283006: Update pubspecs and dependencies to get pkgbuild tests working. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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
Index: third_party/pkg/angular/lib/core/parser/dynamic_parser_impl.dart
diff --git a/third_party/pkg/angular/lib/core/parser/dynamic_parser_impl.dart b/third_party/pkg/angular/lib/core/parser/dynamic_parser_impl.dart
deleted file mode 100644
index 0b893ddcf27389d2924011dc28232c30ba8f3d1e..0000000000000000000000000000000000000000
--- a/third_party/pkg/angular/lib/core/parser/dynamic_parser_impl.dart
+++ /dev/null
@@ -1,311 +0,0 @@
-library angular.core.parser.dynamic_parser_impl;
-
-import 'package:angular/core/parser/parser.dart' show ParserBackend;
-import 'package:angular/core/parser/lexer.dart';
-import 'package:angular/core/parser/syntax.dart';
-
-class DynamicParserImpl {
- static Token EOF = new Token(-1, null);
- final ParserBackend backend;
- final String input;
- final List<Token> tokens;
- int index = 0;
-
- DynamicParserImpl(Lexer lexer, this.backend, String input)
- : this.input = input, tokens = lexer.call(input);
-
- Token get peek {
- return (index < tokens.length) ? tokens[index] : EOF;
- }
-
- parseChain() {
- bool isChain = false;
- while (optional(';')) {
- isChain = true;
- }
- List expressions = [];
- while (index < tokens.length) {
- if (peek.text == ')' || peek.text == '}' || peek.text == ']') {
- error('Unconsumed token ${peek.text}');
- }
- var expr = parseFilter();
- expressions.add(expr);
- while (optional(';')) {
- isChain = true;
- }
- if (isChain && expr is Filter) {
- error('cannot have a filter in a chain');
- }
- }
- return (expressions.length == 1)
- ? expressions.first
- : backend.newChain(expressions);
- }
-
- parseFilter() {
- var result = parseExpression();
- while (optional('|')) {
- String name = peek.text; // TODO(kasperl): Restrict to identifier?
- advance();
- List arguments = [];
- while (optional(':')) {
- // TODO(kasperl): Is this really supposed to be expressions?
- arguments.add(parseExpression());
- }
- result = backend.newFilter(result, name, arguments);
- }
- return result;
- }
-
- parseExpression() {
- int start = peek.index;
- var result = parseConditional();
- while (peek.text == '=') {
- if (!backend.isAssignable(result)) {
- int end = (index < tokens.length) ? peek.index : input.length;
- String expression = input.substring(start, end);
- error('Expression $expression is not assignable');
- }
- expect('=');
- result = backend.newAssign(result, parseConditional());
- }
- return result;
- }
-
- parseConditional() {
- int start = peek.index;
- var result = parseLogicalOr();
- if (optional('?')) {
- var yes = parseExpression();
- if (!optional(':')) {
- int end = (index < tokens.length) ? peek.index : input.length;
- String expression = input.substring(start, end);
- error('Conditional expression $expression requires all 3 expressions');
- }
- var no = parseExpression();
- result = backend.newConditional(result, yes, no);
- }
- return result;
- }
-
- parseLogicalOr() {
- // '||'
- var result = parseLogicalAnd();
- while (optional('||')) {
- result = backend.newBinaryLogicalOr(result, parseLogicalAnd());
- }
- return result;
- }
-
- parseLogicalAnd() {
- // '&&'
- var result = parseEquality();
- while (optional('&&')) {
- result = backend.newBinaryLogicalAnd(result, parseEquality());
- }
- return result;
- }
-
- parseEquality() {
- // '==','!='
- var result = parseRelational();
- while (true) {
- if (optional('==')) {
- result = backend.newBinaryEqual(result, parseRelational());
- } else if (optional('!=')) {
- result = backend.newBinaryNotEqual(result, parseRelational());
- } else {
- return result;
- }
- }
- }
-
- parseRelational() {
- // '<', '>', '<=', '>='
- var result = parseAdditive();
- while (true) {
- if (optional('<')) {
- result = backend.newBinaryLessThan(result, parseAdditive());
- } else if (optional('>')) {
- result = backend.newBinaryGreaterThan(result, parseAdditive());
- } else if (optional('<=')) {
- result = backend.newBinaryLessThanEqual(result, parseAdditive());
- } else if (optional('>=')) {
- result = backend.newBinaryGreaterThanEqual(result, parseAdditive());
- } else {
- return result;
- }
- }
- }
-
- parseAdditive() {
- // '+', '-'
- var result = parseMultiplicative();
- while (true) {
- if (optional('+')) {
- result = backend.newBinaryPlus(result, parseMultiplicative());
- } else if (optional('-')) {
- result = backend.newBinaryMinus(result, parseMultiplicative());
- } else {
- return result;
- }
- }
- }
-
- parseMultiplicative() {
- // '*', '%', '/', '~/'
- var result = parsePrefix();
- while (true) {
- if (optional('*')) {
- result = backend.newBinaryMultiply(result, parsePrefix());
- } else if (optional('%')) {
- result = backend.newBinaryModulo(result, parsePrefix());
- } else if (optional('/')) {
- result = backend.newBinaryDivide(result, parsePrefix());
- } else if (optional('~/')) {
- result = backend.newBinaryTruncatingDivide(result, parsePrefix());
- } else {
- return result;
- }
- }
- }
-
- parsePrefix() {
- if (optional('+')) {
- // TODO(kasperl): This is different than the original parser.
- return backend.newPrefixPlus(parsePrefix());
- } else if (optional('-')) {
- return backend.newPrefixMinus(parsePrefix());
- } else if (optional('!')) {
- return backend.newPrefixNot(parsePrefix());
- } else {
- return parseAccessOrCallMember();
- }
- }
-
- parseAccessOrCallMember() {
- var result = parsePrimary();
- while (true) {
- if (optional('.')) {
- // TODO(kasperl): Check that this is an identifier. Are keywords okay?
- String name = peek.text;
- advance();
- if (optional('(')) {
- List arguments = parseExpressionList(')');
- expect(')');
- result = backend.newCallMember(result, name, arguments);
- } else {
- result = backend.newAccessMember(result, name);
- }
- } else if (optional('[')) {
- var key = parseExpression();
- expect(']');
- result = backend.newAccessKeyed(result, key);
- } else if (optional('(')) {
- List arguments = parseExpressionList(')');
- expect(')');
- result = backend.newCallFunction(result, arguments);
- } else {
- return result;
- }
- }
- }
-
- parsePrimary() {
- if (optional('(')) {
- var result = parseExpression();
- expect(')');
- return result;
- } else if (optional('null') || optional('undefined')) {
- return backend.newLiteralNull();
- } else if (optional('true')) {
- return backend.newLiteralBoolean(true);
- } else if (optional('false')) {
- return backend.newLiteralBoolean(false);
- } else if (optional('[')) {
- List elements = parseExpressionList(']');
- expect(']');
- return backend.newLiteralArray(elements);
- } else if (peek.text == '{') {
- return parseObject();
- } else if (peek.key != null) {
- return parseAccessOrCallScope();
- } else if (peek.value != null) {
- var value = peek.value;
- advance();
- return (value is num)
- ? backend.newLiteralNumber(value)
- : backend.newLiteralString(value);
- } else if (index >= tokens.length) {
- throw 'Unexpected end of expression: $input';
- } else {
- error('Unexpected token ${peek.text}');
- }
- }
-
- parseAccessOrCallScope() {
- String name = peek.key;
- advance();
- if (!optional('(')) return backend.newAccessScope(name);
- List arguments = parseExpressionList(')');
- expect(')');
- return backend.newCallScope(name, arguments);
- }
-
- parseObject() {
- List<String> keys = [];
- List values = [];
- expect('{');
- if (peek.text != '}') {
- do {
- // TODO(kasperl): Stricter checking. Only allow identifiers
- // and strings as keys. Maybe also keywords?
- var value = peek.value;
- keys.add(value is String ? value : peek.text);
- advance();
- expect(':');
- values.add(parseExpression());
- } while (optional(','));
- }
- expect('}');
- return backend.newLiteralObject(keys, values);
- }
-
- List parseExpressionList(String terminator) {
- List result = [];
- if (peek.text != terminator) {
- do {
- result.add(parseExpression());
- } while (optional(','));
- }
- return result;
- }
-
- bool optional(text) {
- if (peek.text == text) {
- advance();
- return true;
- } else {
- return false;
- }
- }
-
- void expect(text) {
- if (peek.text == text) {
- advance();
- } else {
- error('Missing expected $text');
- }
- }
-
- void advance() {
- index++;
- }
-
- void error(message) {
- String location = (index < tokens.length)
- ? 'at column ${tokens[index].index + 1} in'
- : 'the end of the expression';
- throw 'Parser Error: $message $location [$input]';
- }
-}
« no previous file with comments | « third_party/pkg/angular/lib/core/parser/dynamic_parser.dart ('k') | third_party/pkg/angular/lib/core/parser/eval.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698