10b57cec5SDimitry Andric //===-- ResourceScriptToken.h -----------------------------------*- C++-*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===---------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This declares the .rc script tokens. 100b57cec5SDimitry Andric // The list of available tokens is located at ResourceScriptTokenList.h. 110b57cec5SDimitry Andric // 120b57cec5SDimitry Andric // Ref: msdn.microsoft.com/en-us/library/windows/desktop/aa380599(v=vs.85).aspx 130b57cec5SDimitry Andric // 140b57cec5SDimitry Andric //===---------------------------------------------------------------------===// 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric #ifndef LLVM_INCLUDE_LLVM_SUPPORT_WINDOWS_RESOURCE_SCRIPTTOKEN_H 170b57cec5SDimitry Andric #define LLVM_INCLUDE_LLVM_SUPPORT_WINDOWS_RESOURCE_SCRIPTTOKEN_H 180b57cec5SDimitry Andric 190b57cec5SDimitry Andric #include "llvm/ADT/StringRef.h" 200b57cec5SDimitry Andric 210b57cec5SDimitry Andric namespace llvm { 220b57cec5SDimitry Andric 230b57cec5SDimitry Andric // A definition of a single resource script token. Each token has its kind 240b57cec5SDimitry Andric // (declared in ResourceScriptTokenList) and holds a value - a reference 250b57cec5SDimitry Andric // representation of the token. 260b57cec5SDimitry Andric // RCToken does not claim ownership on its value. A memory buffer containing 270b57cec5SDimitry Andric // the token value should be stored in a safe place and cannot be freed 280b57cec5SDimitry Andric // nor reallocated. 290b57cec5SDimitry Andric class RCToken { 300b57cec5SDimitry Andric public: 310b57cec5SDimitry Andric enum class Kind { 320b57cec5SDimitry Andric #define TOKEN(Name) Name, 330b57cec5SDimitry Andric #define SHORT_TOKEN(Name, Ch) Name, 340b57cec5SDimitry Andric #include "ResourceScriptTokenList.h" 350b57cec5SDimitry Andric #undef TOKEN 360b57cec5SDimitry Andric #undef SHORT_TOKEN 370b57cec5SDimitry Andric }; 380b57cec5SDimitry Andric 390b57cec5SDimitry Andric RCToken(RCToken::Kind RCTokenKind, StringRef Value); 400b57cec5SDimitry Andric 410b57cec5SDimitry Andric // Get an integer value of the integer token. 420b57cec5SDimitry Andric uint32_t intValue() const; 430b57cec5SDimitry Andric bool isLongInt() const; 440b57cec5SDimitry Andric 450b57cec5SDimitry Andric StringRef value() const; 460b57cec5SDimitry Andric Kind kind() const; 470b57cec5SDimitry Andric 480b57cec5SDimitry Andric // Check if a token describes a binary operator. 490b57cec5SDimitry Andric bool isBinaryOp() const; 500b57cec5SDimitry Andric 510b57cec5SDimitry Andric private: 520b57cec5SDimitry Andric Kind TokenKind; 530b57cec5SDimitry Andric StringRef TokenValue; 540b57cec5SDimitry Andric }; 550b57cec5SDimitry Andric 560b57cec5SDimitry Andric } // namespace llvm 570b57cec5SDimitry Andric 580b57cec5SDimitry Andric #endif 59