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