mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-03 06:45:48 +01:00
Continuing along with #3070. Note this is just a file rename, with BUILD edits; every file previously in semantics/ should show as moved (except maybe BUILDs, which split).
73 lines
3.0 KiB
Modula-2
73 lines
3.0 KiB
Modula-2
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
// This is an X-macro header. It does not use `#include` guards, and instead is
|
|
// designed to be `#include`ed after the x-macro is defined in order for its
|
|
// inclusion to expand to the desired output. Macro definitions are cleaned up
|
|
// at the end of this file.
|
|
//
|
|
// Supported x-macros are:
|
|
// - CARBON_SEMANTICS_BUILTIN_KIND_NAME(Name)
|
|
// Used as a fallback if other macros are missing. Used directly by Invalid
|
|
// only, which is defined last.
|
|
// - CARBON_SEMANTICS_BUILTIN_KIND(Name, Label)
|
|
// Defines a non-Invalid builtin type. The label is used for stringifying
|
|
// types.
|
|
//
|
|
// This tree represents the subset relationship between these macros, where if a
|
|
// specific x-macro isn't defined, it'll fall back to the parent macro.
|
|
|
|
#if !(defined(CARBON_SEMANTICS_BUILTIN_KIND_NAME) || \
|
|
defined(CARBON_SEMANTICS_BUILTIN_KIND))
|
|
#error \
|
|
"Must define CARBON_SEMANTICS_BUILTIN_KIND family x-macros to use this file."
|
|
#endif
|
|
|
|
// If CARBON_SEMANTICS_BUILTIN_KIND_NAME is undefined, ignore calls.
|
|
#ifndef CARBON_SEMANTICS_BUILTIN_KIND_NAME
|
|
#define CARBON_SEMANTICS_BUILTIN_KIND_NAME(Name)
|
|
#endif
|
|
|
|
// If CARBON_SEMANTICS_BUILTIN_KIND is undefined, delegate calls to
|
|
// CARBON_SEMANTICS_BUILTIN_KIND_NAME.
|
|
#ifndef CARBON_SEMANTICS_BUILTIN_KIND
|
|
#define CARBON_SEMANTICS_BUILTIN_KIND(Name, ...) \
|
|
CARBON_SEMANTICS_BUILTIN_KIND_NAME(Name)
|
|
#endif
|
|
|
|
// Tracks expressions which are valid as types.
|
|
// This has a deliberately self-referential type.
|
|
CARBON_SEMANTICS_BUILTIN_KIND(TypeType, "type")
|
|
|
|
// Used when a semantic error has been detected, and a SemanticNodeId is still
|
|
// required. For example, when there is a type checking issue, this will be used
|
|
// in the type_id. It's typically used as a cue that semantic checking doesn't
|
|
// need to issue further diagnostics.
|
|
CARBON_SEMANTICS_BUILTIN_KIND(Error, "<error>")
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// TODO: Below types are all placeholders. While the above may last, the below
|
|
// are expected to need to change in order to better reflect Carbon's design.
|
|
// Keeping distinct placeholders can help find usages for later fixes.
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// The type of bool literals and branch conditions, bool.
|
|
CARBON_SEMANTICS_BUILTIN_KIND(BoolType, "bool")
|
|
|
|
// The type of integer values and integer literals, currently always i32.
|
|
CARBON_SEMANTICS_BUILTIN_KIND(IntegerType, "i32")
|
|
|
|
// The type of floating point values and real literals, currently always f64.
|
|
CARBON_SEMANTICS_BUILTIN_KIND(FloatingPointType, "f64")
|
|
|
|
// The type of string values and String literals.
|
|
CARBON_SEMANTICS_BUILTIN_KIND(StringType, "String")
|
|
|
|
// Keep invalid last, so that we can use values as array indices without needing
|
|
// an invalid entry.
|
|
CARBON_SEMANTICS_BUILTIN_KIND_NAME(Invalid)
|
|
|
|
#undef CARBON_SEMANTICS_BUILTIN_KIND_NAME
|
|
#undef CARBON_SEMANTICS_BUILTIN_KIND
|