mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 20:10:13 +01:00
I think there's more we can do here, but this seemed like a good checkpoint to make sure the path I'm going down is roughly what you expected. There's one actual edit in if expression structure to match the increased enforcement.
55 lines
2.1 KiB
C++
55 lines
2.1 KiB
C++
// 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
|
|
|
|
#include "toolchain/semantics/semantics_context.h"
|
|
|
|
namespace Carbon {
|
|
|
|
auto SemanticsHandleDeducedParameterList(SemanticsContext& context,
|
|
ParseTree::Node parse_node) -> bool {
|
|
return context.TODO(parse_node, "HandleDeducedParameterList");
|
|
}
|
|
|
|
auto SemanticsHandleDeducedParameterListStart(SemanticsContext& context,
|
|
ParseTree::Node parse_node)
|
|
-> bool {
|
|
return context.TODO(parse_node, "HandleDeducedParameterListStart");
|
|
}
|
|
|
|
auto SemanticsHandleParameterList(SemanticsContext& context,
|
|
ParseTree::Node parse_node) -> bool {
|
|
auto refs_id = context.ParamOrArgEnd(
|
|
/*for_args=*/false, ParseNodeKind::ParameterListStart);
|
|
// TODO: This contains the IR block for parameters. At present, it's just
|
|
// loose, but it's not strictly required for parameter refs; we should either
|
|
// stop constructing it completely or, if it turns out to be needed, store it.
|
|
// Note, the underlying issue is that the LLVM IR has nowhere clear to emit,
|
|
// so changing storage would require addressing that problem. For comparison
|
|
// with function calls, the IR needs to be emitted prior to the call.
|
|
context.node_block_stack().Pop();
|
|
|
|
context.PopScope();
|
|
context.node_stack()
|
|
.PopAndDiscardSoloParseNode<ParseNodeKind::ParameterListStart>();
|
|
context.node_stack().Push(parse_node, refs_id);
|
|
return true;
|
|
}
|
|
|
|
auto SemanticsHandleParameterListComma(SemanticsContext& context,
|
|
ParseTree::Node /*parse_node*/) -> bool {
|
|
context.ParamOrArgComma(/*for_args=*/false);
|
|
return true;
|
|
}
|
|
|
|
auto SemanticsHandleParameterListStart(SemanticsContext& context,
|
|
ParseTree::Node parse_node) -> bool {
|
|
context.PushScope();
|
|
context.node_stack().Push(parse_node);
|
|
context.node_block_stack().Push();
|
|
context.ParamOrArgStart();
|
|
return true;
|
|
}
|
|
|
|
} // namespace Carbon
|