[yaml2obj/obj2yaml] - Add support for .stack_sizes sections.
[llvm-complete.git] / tools / llvm-rc / ResourceScriptToken.h
blobcc8ca48b4907ea84e9883038d585932a4420afc5
1 //===-- ResourceScriptToken.h -----------------------------------*- C++-*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===---------------------------------------------------------------------===//
8 //
9 // This declares the .rc script tokens and defines an interface for tokenizing
10 // the input data. The list of available tokens is located at
11 // ResourceScriptTokenList.def.
13 // Note that the tokenizer does not support preprocessor directives. The
14 // preprocessor should do its work on the .rc file before running llvm-rc.
16 // As for now, it is possible to parse ASCII files only (the behavior on
17 // UTF files might be undefined). However, it already consumes UTF-8 BOM, if
18 // there is any. Thus, ASCII-compatible UTF-8 files are tokenized correctly.
20 // Ref: msdn.microsoft.com/en-us/library/windows/desktop/aa380599(v=vs.85).aspx
22 //===---------------------------------------------------------------------===//
24 #ifndef LLVM_TOOLS_LLVMRC_RESOURCESCRIPTTOKEN_H
25 #define LLVM_TOOLS_LLVMRC_RESOURCESCRIPTTOKEN_H
27 #include "llvm/ADT/StringRef.h"
28 #include "llvm/Support/Error.h"
30 #include <cstdint>
31 #include <map>
32 #include <string>
33 #include <vector>
35 namespace llvm {
37 // A definition of a single resource script token. Each token has its kind
38 // (declared in ResourceScriptTokenList) and holds a value - a reference
39 // representation of the token.
40 // RCToken does not claim ownership on its value. A memory buffer containing
41 // the token value should be stored in a safe place and cannot be freed
42 // nor reallocated.
43 class RCToken {
44 public:
45 enum class Kind {
46 #define TOKEN(Name) Name,
47 #define SHORT_TOKEN(Name, Ch) Name,
48 #include "ResourceScriptTokenList.def"
51 RCToken(RCToken::Kind RCTokenKind, StringRef Value);
53 // Get an integer value of the integer token.
54 uint32_t intValue() const;
55 bool isLongInt() const;
57 StringRef value() const;
58 Kind kind() const;
60 // Check if a token describes a binary operator.
61 bool isBinaryOp() const;
63 private:
64 Kind TokenKind;
65 StringRef TokenValue;
68 // Tokenize Input.
69 // In case no error occurred, the return value contains
70 // tokens in order they were in the input file.
71 // In case of any error, the return value contains
72 // a textual representation of error.
74 // Tokens returned by this function hold only references to the parts
75 // of the Input. Memory buffer containing Input cannot be freed,
76 // modified or reallocated.
77 Expected<std::vector<RCToken>> tokenizeRC(StringRef Input);
79 } // namespace llvm
81 #endif