mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
It turns out that the bitpacked Commons struct is actually fairly expensive because the CPU needs to apply bitmasks to fetch the IsToken and Presence flag. We've got padding space available, so we might as well properly align these boolean flags. Also on a source level, replace a couple of bit-restricted unsigned fields by their representing type (e.g. SyntaxKind). Finally, we can pull out the common bits to RawSyntax and have the Bits union only contain the token- or layout-specific fields. This also allows us to initialise these fields in the constructor's initialiser list (instead of in the initialiser body). Lastly, change copyToArenaIfNecessary to work on a char *& and length, which allows us to initialise leading/trailing trivia/token text in the initialiser list and adjust if necessary later.
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
//===--- TokenKinds.h - Token Kinds Interface -------------------*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the Token kinds.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_TOKENKINDS_H
|
|
#define SWIFT_TOKENKINDS_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
namespace swift {
|
|
enum class tok : uint8_t {
|
|
#define TOKEN(X) X,
|
|
#include "swift/Syntax/TokenKinds.def"
|
|
|
|
NUM_TOKENS
|
|
};
|
|
|
|
/// Check whether a token kind is known to have any specific text content.
|
|
/// e.g., tol::l_paren has determined text however tok::identifier doesn't.
|
|
bool isTokenTextDetermined(tok kind);
|
|
|
|
/// If a token kind has determined text, return the text; otherwise assert.
|
|
StringRef getTokenText(tok kind);
|
|
|
|
void dumpTokenKind(llvm::raw_ostream &os, tok kind);
|
|
} // end namespace swift
|
|
|
|
#endif // SWIFT_TOKENKINDS_H
|
|
|