| // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /// Constants and predicates used for encoding and decoding type recipes. |
| /// |
| /// This library is shared between the compiler and the runtime system. |
| library dart2js._recipe_syntax; |
| |
| abstract class Recipe { |
| Recipe._(); |
| |
| // Operators. |
| |
| static const int separator = _comma; |
| static const String separatorString = _commaString; |
| |
| static const int toType = _semicolon; |
| static const String toTypeString = _semicolonString; |
| |
| static const int pushErased = _hash; |
| static const String pushErasedString = _hashString; |
| static const int pushDynamic = _at; |
| static const String pushDynamicString = _atString; |
| static const int pushVoid = _tilde; |
| static const String pushVoidString = _tildeString; |
| |
| static const int wrapStar = _asterisk; |
| static const String wrapStarString = _asteriskString; |
| static const int wrapQuestion = _question; |
| static const String wrapQuestionString = _questionString; |
| static const int wrapFutureOr = _slash; |
| static const String wrapFutureOrString = _slashString; |
| |
| static const int startTypeArguments = _lessThan; |
| static const String startTypeArgumentsString = _lessThanString; |
| static const int endTypeArguments = _greaterThan; |
| static const String endTypeArgumentsString = _greaterThanString; |
| |
| static const int startFunctionArguments = _leftParen; |
| static const String startFunctionArgumentsString = _leftParenString; |
| static const int endFunctionArguments = _rightParen; |
| static const String endFunctionArgumentsString = _rightParenString; |
| static const int startOptionalGroup = _leftBracket; |
| static const String startOptionalGroupString = _leftBracketString; |
| static const int endOptionalGroup = _rightBracket; |
| static const String endOptionalGroupString = _rightBracketString; |
| static const int startNamedGroup = _leftBrace; |
| static const String startNamedGroupString = _leftBraceString; |
| static const int endNamedGroup = _rightBrace; |
| static const String endNamedGroupString = _rightBraceString; |
| static const int nameSeparator = _colon; |
| static const String nameSeparatorString = _colonString; |
| static const int requiredNameSeparator = _exclamation; |
| static const String requiredNameSeparatorString = _exclamationString; |
| |
| static const int genericFunctionTypeParameterIndex = _circumflex; |
| static const String genericFunctionTypeParameterIndexString = |
| _circumflexString; |
| |
| static const int extensionOp = _ampersand; |
| static const String extensionOpString = _ampersandString; |
| static const int pushNeverExtension = 0; |
| static const String pushNeverExtensionString = '$pushNeverExtension'; |
| static const int pushAnyExtension = 1; |
| static const String pushAnyExtensionString = '$pushAnyExtension'; |
| |
| // Number and name components. |
| |
| static bool isDigit(int code) => code >= _digit0 && code <= _digit9; |
| static int digitValue(int code) => code - _digit0; |
| |
| static bool isIdentifierStart(int ch) => |
| (((ch | 32) - _lowercaseA) & 0xffff) < 26 || |
| (ch == _underscore) || |
| (ch == _dollar); |
| |
| static const int period = _period; |
| |
| // Private names. |
| |
| static const int _formfeed = 0x0C; |
| static const String _formfeedString = '\f'; |
| |
| static const int _space = 0x20; |
| static const String _spaceString = ' '; |
| static const int _exclamation = 0x21; |
| static const String _exclamationString = '!'; |
| static const int _hash = 0x23; |
| static const String _hashString = '#'; |
| static const int _dollar = 0x24; |
| static const String _dollarString = r'$'; |
| static const int _percent = 0x25; |
| static const String _percentString = '%'; |
| static const int _ampersand = 0x26; |
| static const String _ampersandString = '&'; |
| static const int _apostrophe = 0x27; |
| static const String _apostropheString = "'"; |
| static const int _leftParen = 0x28; |
| static const String _leftParenString = '('; |
| static const int _rightParen = 0x29; |
| static const String _rightParenString = ')'; |
| static const int _asterisk = 0x2A; |
| static const String _asteriskString = '*'; |
| static const int _plus = 0x2B; |
| static const String _plusString = '+'; |
| static const int _comma = 0x2C; |
| static const String _commaString = ','; |
| static const int _minus = 0x2D; |
| static const String _minusString = '-'; |
| static const int _period = 0x2E; |
| static const String _periodString = '.'; |
| static const int _slash = 0x2F; |
| static const String _slashString = '/'; |
| |
| static const int _digit0 = 0x30; |
| static const int _digit9 = 0x39; |
| |
| static const int _colon = 0x3A; |
| static const String _colonString = ':'; |
| static const int _semicolon = 0x3B; |
| static const String _semicolonString = ';'; |
| static const int _lessThan = 0x3C; |
| static const String _lessThanString = '<'; |
| static const int _equals = 0x3D; |
| static const String _equalsString = '='; |
| static const int _greaterThan = 0x3E; |
| static const String _greaterThanString = '>'; |
| static const int _question = 0x3F; |
| static const String _questionString = '?'; |
| static const int _at = 0x40; |
| static const String _atString = '@'; |
| |
| static const int _uppercaseA = 0x41; |
| static const int _uppercaseZ = 0x5A; |
| |
| static const int _leftBracket = 0x5B; |
| static const String _leftBracketString = '['; |
| static const int _backslash = 0x5C; |
| static const String _backslashString = r'\'; |
| static const int _rightBracket = 0x5D; |
| static const String _rightBracketString = ']'; |
| static const int _circumflex = 0x5E; |
| static const String _circumflexString = '^'; |
| static const int _underscore = 0x5F; |
| static const String _underscoreString = '_'; |
| static const int _backtick = 0x60; |
| static const String _backtickString = '`'; |
| |
| static const int _lowercaseA = 0x61; |
| static const int _lowercaseZ = 0x7A; |
| |
| static const int _leftBrace = 0x7B; |
| static const String _leftBraceString = '{'; |
| static const int _vertical = 0x7C; |
| static const String _verticalString = '|'; |
| static const int _rightBrace = 0x7D; |
| static const String _rightBraceString = '}'; |
| static const int _tilde = 0x7E; |
| static const String _tildeString = '~'; |
| |
| static void testEquivalence() { |
| void test(String label, int charCode, String str) { |
| if (String.fromCharCode(charCode) != str) { |
| throw StateError("$label: String.fromCharCode($charCode) != $str"); |
| } |
| } |
| |
| void testExtension(String label, int op, String str) { |
| if ('$op' != str) { |
| throw StateError("$label: $op.toString() != $str"); |
| } |
| } |
| |
| test("separator", separator, separatorString); |
| test("toType", toType, toTypeString); |
| test("pushErased", pushErased, pushErasedString); |
| test("pushDynamic", pushDynamic, pushDynamicString); |
| test("pushVoid", pushVoid, pushVoidString); |
| test("wrapStar", wrapStar, wrapStarString); |
| test("wrapQuestion", wrapQuestion, wrapQuestionString); |
| test("wrapFutureOr", wrapFutureOr, wrapFutureOrString); |
| test("startTypeArguments", startTypeArguments, startTypeArgumentsString); |
| test("endTypeArguments", endTypeArguments, endTypeArgumentsString); |
| test("startFunctionArguments", startFunctionArguments, |
| startFunctionArgumentsString); |
| test("endFunctionArguments", endFunctionArguments, |
| endFunctionArgumentsString); |
| test("startOptionalGroup", startOptionalGroup, startOptionalGroupString); |
| test("endOptionalGroup", endOptionalGroup, endOptionalGroupString); |
| test("startNamedGroup", startNamedGroup, startNamedGroupString); |
| test("endNamedGroup", endNamedGroup, endNamedGroupString); |
| test("nameSeparator", nameSeparator, nameSeparatorString); |
| test("requiredNameSeparator", requiredNameSeparator, |
| requiredNameSeparatorString); |
| test("genericFunctionTypeParameterIndex", genericFunctionTypeParameterIndex, |
| genericFunctionTypeParameterIndexString); |
| test("extensionOp", extensionOp, extensionOpString); |
| testExtension( |
| "pushNeverExtension", pushNeverExtension, pushNeverExtensionString); |
| testExtension("pushAnyExtension", pushAnyExtension, pushAnyExtensionString); |
| |
| test("_formfeed", _formfeed, _formfeedString); |
| test("_space", _space, _spaceString); |
| test("_exclamation", _exclamation, _exclamationString); |
| test("_hash", _hash, _hashString); |
| test("_dollar", _dollar, _dollarString); |
| test("_percent", _percent, _percentString); |
| test("_ampersand", _ampersand, _ampersandString); |
| test("_apostrophe", _apostrophe, _apostropheString); |
| test("_leftParen", _leftParen, _leftParenString); |
| test("_rightParen", _rightParen, _rightParenString); |
| test("_asterisk", _asterisk, _asteriskString); |
| test("_plus", _plus, _plusString); |
| test("_comma", _comma, _commaString); |
| test("_minus", _minus, _minusString); |
| test("_period", _period, _periodString); |
| test("_slash", _slash, _slashString); |
| test("_colon", _colon, _colonString); |
| test("_semicolon", _semicolon, _semicolonString); |
| test("_lessThan", _lessThan, _lessThanString); |
| test("_equals", _equals, _equalsString); |
| test("_greaterThan", _greaterThan, _greaterThanString); |
| test("_question", _question, _questionString); |
| test("_at", _at, _atString); |
| test("_leftBracket", _leftBracket, _leftBracketString); |
| test("_backslash", _backslash, _backslashString); |
| test("_rightBracket", _rightBracket, _rightBracketString); |
| test("_circumflex", _circumflex, _circumflexString); |
| test("_underscore", _underscore, _underscoreString); |
| test("_backtick", _backtick, _backtickString); |
| test("_leftBrace", _leftBrace, _leftBraceString); |
| test("_vertical", _vertical, _verticalString); |
| test("_rightBrace", _rightBrace, _rightBraceString); |
| test("_tilde", _tilde, _tildeString); |
| } |
| } |