Explicitly sizing Kind enum suggests that too-large values are allowed,
and that putting it in a bitfield is dangerous.
GCC doesn't like condition ? integer : enum.
// doesn't have parent pointers.
class alignas(class ForestNode *) ForestNode {
public:
- enum Kind : uint8_t {
+ enum Kind {
// A Terminal node is a single terminal symbol bound to a token.
Terminal,
// A Sequence node is a nonterminal symbol parsed from a grammar rule,
}
llvm::ArrayRef<LRTable::Action> LRTable::find(StateID Src, SymbolID ID) const {
- size_t Idx = isToken(ID) ? symbolToToken(ID) : ID;
+ size_t Idx = isToken(ID) ? static_cast<size_t>(symbolToToken(ID)) : ID;
assert(isToken(ID) ? Idx + 1 < TerminalOffset.size()
: Idx + 1 < NontermOffset.size());
std::pair<size_t, size_t> TargetStateRange =