mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
This follows the same structure as `if` expressions, except that no result value is needed. Semantics IR building for code blocks is also added. Rather than popping all the node stack entries we push for statements within a code block, change statements and declarations to not push themselves onto the stack. We're not notionally performing work recursively within prior statements, and we don't need their value for anything, so it seems cleaner to not push them. This also allows statements and declarations to determine what syntactic context they're in by peeking at the top of the stack, though that's not used in this patch.
48 lines
1.7 KiB
Modula-2
48 lines
1.7 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_NODE_KIND(Name)
|
|
// Defines a node kind.
|
|
|
|
#ifndef CARBON_SEMANTICS_NODE_KIND
|
|
#error "Must define the x-macro to use this file."
|
|
#endif
|
|
|
|
CARBON_SEMANTICS_NODE_KIND(Invalid)
|
|
|
|
// A cross-reference between IRs.
|
|
CARBON_SEMANTICS_NODE_KIND(CrossReference)
|
|
|
|
CARBON_SEMANTICS_NODE_KIND(Assign)
|
|
CARBON_SEMANTICS_NODE_KIND(BinaryOperatorAdd)
|
|
CARBON_SEMANTICS_NODE_KIND(BindName)
|
|
CARBON_SEMANTICS_NODE_KIND(BlockArg)
|
|
CARBON_SEMANTICS_NODE_KIND(BoolLiteral)
|
|
CARBON_SEMANTICS_NODE_KIND(Branch)
|
|
CARBON_SEMANTICS_NODE_KIND(BranchIf)
|
|
CARBON_SEMANTICS_NODE_KIND(BranchWithArg)
|
|
CARBON_SEMANTICS_NODE_KIND(Builtin)
|
|
CARBON_SEMANTICS_NODE_KIND(Call)
|
|
CARBON_SEMANTICS_NODE_KIND(FunctionDeclaration)
|
|
CARBON_SEMANTICS_NODE_KIND(IntegerLiteral)
|
|
CARBON_SEMANTICS_NODE_KIND(RealLiteral)
|
|
CARBON_SEMANTICS_NODE_KIND(Return)
|
|
CARBON_SEMANTICS_NODE_KIND(ReturnExpression)
|
|
CARBON_SEMANTICS_NODE_KIND(StringLiteral)
|
|
CARBON_SEMANTICS_NODE_KIND(StructMemberAccess)
|
|
CARBON_SEMANTICS_NODE_KIND(StructType)
|
|
CARBON_SEMANTICS_NODE_KIND(StructTypeField)
|
|
CARBON_SEMANTICS_NODE_KIND(StructValue)
|
|
CARBON_SEMANTICS_NODE_KIND(StubReference)
|
|
CARBON_SEMANTICS_NODE_KIND(UnaryOperatorNot)
|
|
CARBON_SEMANTICS_NODE_KIND(VarStorage)
|
|
|
|
#undef CARBON_SEMANTICS_NODE_KIND
|