| // Copyright (c) 2011, 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. | |
| #include "vm/token.h" | |
| #include "vm/object.h" | |
| namespace dart { | |
| #define TOKEN_NAME(t, s, p, a) #t, | |
| const char* const Token::name_[] = {DART_TOKEN_LIST(TOKEN_NAME) | |
| DART_KEYWORD_LIST(TOKEN_NAME)}; | |
| #undef TOKEN_NAME | |
| #define TOKEN_STRING(t, s, p, a) s, | |
| const char* const Token::tok_str_[] = {DART_TOKEN_LIST(TOKEN_STRING) | |
| DART_KEYWORD_LIST(TOKEN_STRING)}; | |
| #undef TOKEN_STRING | |
| #define TOKEN_ATTRIBUTE(t, s, p, a) a, | |
| const Token::Attribute Token::attributes_[] = { | |
| DART_TOKEN_LIST(TOKEN_ATTRIBUTE) DART_KEYWORD_LIST(TOKEN_ATTRIBUTE)}; | |
| #undef TOKEN_ATTRIBUTE | |
| bool Token::IsBinaryOperator(Token::Kind token) { | |
| switch (token) { | |
| case Token::kOR: | |
| case Token::kAND: | |
| return true; | |
| default: | |
| return IsBinaryArithmeticOperator(token); | |
| } | |
| } | |
| bool Token::IsUnaryOperator(Token::Kind token) { | |
| return (token == kNOT) || IsUnaryArithmeticOperator(token); | |
| } | |
| bool Token::IsBinaryArithmeticOperator(Token::Kind token) { | |
| switch (token) { | |
| case Token::kADD: | |
| case Token::kSUB: | |
| case Token::kMUL: | |
| case Token::kDIV: | |
| case Token::kTRUNCDIV: | |
| case Token::kMOD: | |
| case Token::kBIT_OR: | |
| case Token::kBIT_XOR: | |
| case Token::kBIT_AND: | |
| case Token::kSHL: | |
| case Token::kSHR: | |
| case Token::kUSHR: | |
| case Token::kMAX: | |
| case Token::kMIN: | |
| return true; | |
| default: | |
| return false; | |
| } | |
| } | |
| bool Token::IsUnaryArithmeticOperator(Token::Kind token) { | |
| switch (token) { | |
| case Token::kBIT_NOT: | |
| case Token::kNEGATE: | |
| case Token::kABS: | |
| case Token::kSQRT: | |
| case Token::kSQUARE: | |
| case Token::kRECIPROCAL: | |
| case Token::kRECIPROCAL_SQRT: | |
| case Token::kTRUNCATE: | |
| case Token::kFLOOR: | |
| case Token::kCEILING: | |
| return true; | |
| default: | |
| return false; | |
| } | |
| } | |
| bool Token::IsBinaryBitwiseOperator(Token::Kind token) { | |
| switch (token) { | |
| case Token::kBIT_OR: | |
| case Token::kBIT_XOR: | |
| case Token::kBIT_AND: | |
| case Token::kSHL: | |
| case Token::kSHR: | |
| case Token::kUSHR: | |
| return true; | |
| default: | |
| return false; | |
| } | |
| } | |
| } // namespace dart |