// 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_PRECEDENCE(t, s, p, a) p, const uint8_t Token::precedence_[] = {DART_TOKEN_LIST(TOKEN_PRECEDENCE) DART_KEYWORD_LIST(TOKEN_PRECEDENCE)}; #undef TOKEN_PRECEDENCE #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