all files / src/ TokenKind.js

75% Statements 18/24
30% Branches 3/10
33.33% Functions 2/6
75% Lines 18/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161                                                                                                                                                                                                                                          141× 141× 141× 141× 24×         141× 141×                                       102×        
/*
 * Copyright 2002-2015 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
/**
 * @author Andy Clement
 * @author Ben March
 * @since 0.2.0
 */
 
var types = {
  LITERAL_INT: 1, //tested
 
  LITERAL_LONG: 2, //tested
 
  LITERAL_HEXINT: 3, //tested
 
  LITERAL_HEXLONG: 4, //tested
 
  LITERAL_STRING: 5, //tested
 
  LITERAL_REAL: 6, //tested
 
  LITERAL_REAL_FLOAT: 7, //tested
 
  LPAREN: '(', //tested
 
  RPAREN: ')', //tested
 
  COMMA: ',', //tested
 
  IDENTIFIER: 0, //tested
 
  COLON: ':', //tested
 
  HASH: '#', //tested
 
  RSQUARE: ']', //tested
 
  LSQUARE: '[', //tested
 
  LCURLY: '{', //tested
 
  RCURLY: '}', //tested
 
  DOT: '.', //tested
 
  PLUS: '+', //tested
 
  STAR: '*', //tested
 
  MINUS: '-', //tested
 
  SELECT_FIRST: '^[', //tested
 
  SELECT_LAST: '$[', //tested
 
  QMARK: '?', //tested
 
  PROJECT: '![', //tested
 
  DIV: '/', //tested
 
  GE: '>=', //tested
 
  GT: '>', //tested
 
  LE: '<=', //tested
 
  LT: '<', //tested
 
  EQ: '==', //tested
 
  NE: '!=', //tested
 
  MOD: '%', //tested
 
  NOT: '!', //tested
 
  ASSIGN: '=', //tested
 
  INSTANCEOF: 'instanceof', //test fails
 
  MATCHES: 'matches', //test fails
 
  BETWEEN: 'between', //test fails
 
  SELECT: '?[', //tested
 
  POWER: '^', //tested
 
  ELVIS: '?:', //tested
 
  SAFE_NAVI: '?.', //tested
 
  BEAN_REF: '@', //tested
 
  SYMBOLIC_OR: '||', //tested
 
  SYMBOLIC_AND: '&&', //tested
 
  INC: '++', //tested
 
  DEC: '--', //tested
};
 
function TokenKind(type) {
  this.type = type;
  this.tokenChars = types[type];
  this._hasPayload = typeof types[type] !== 'string';
  if (typeof types[type] === 'number') {
    this._ordinal = types[type];
  }
}
 
//create enum
for (var t in types) {
  if (Etypes.hasOwnProperty(t)) {
    TokenKind[t] = new TokenKind(t);
  }
}
 
TokenKind.prototype.toString = function () {
  return this.type + (this.tokenChars.length !== 0 ? '(' + this.tokenChars + ')' : '');
};
 
TokenKind.prototype.getLength = function () {
  return this.tokenChars.length;
};
 
TokenKind.prototype.hasPayload = function () {
  return this._hasPayload;
};
 
TokenKind.prototype.valueOf = function (id) {
  for (var t in types) {
    if (types.hasOwnProperty(t) && types[t] === id) {
      return TokenKind[t];
    }
  }
};
 
TokenKind.prototype.ordinal = function () {
  return this._ordinal;
};
 
export { TokenKind };