1 //===-- ResourceScriptToken.h -----------------------------------*- C++-*-===//
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
7 //===---------------------------------------------------------------------===//
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"
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
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;
60 // Check if a token describes a binary operator.
61 bool isBinaryOp() const;
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
);