mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 21:20:11 +01:00
This is the first step of implementing the guidance in #6342. --------- Co-authored-by: josh11b <15258583+josh11b@users.noreply.github.com>
37 lines
1.3 KiB
C++
37 lines
1.3 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/check/call.h"
|
|
#include "toolchain/check/context.h"
|
|
#include "toolchain/check/handle.h"
|
|
#include "toolchain/check/inst.h"
|
|
#include "toolchain/sem_ir/expr_info.h"
|
|
#include "toolchain/sem_ir/inst.h"
|
|
|
|
namespace Carbon::Check {
|
|
|
|
auto HandleParseNode(Context& context, Parse::CallExprStartId node_id) -> bool {
|
|
auto name_id = context.node_stack().PopExpr();
|
|
context.node_stack().Push(node_id, name_id);
|
|
context.param_and_arg_refs_stack().Push();
|
|
return true;
|
|
}
|
|
|
|
auto HandleParseNode(Context& context, Parse::CallExprId node_id) -> bool {
|
|
// Process the final explicit call argument now, but leave the arguments
|
|
// block on the stack until the end of this function.
|
|
context.param_and_arg_refs_stack().EndNoPop(Parse::NodeKind::CallExprStart);
|
|
auto callee_id = context.node_stack().Pop<Parse::NodeKind::CallExprStart>();
|
|
|
|
auto call_id = PerformCall(
|
|
context, node_id, callee_id,
|
|
context.param_and_arg_refs_stack().PeekCurrentBlockContents());
|
|
|
|
context.param_and_arg_refs_stack().PopAndDiscard();
|
|
context.node_stack().Push(node_id, call_id);
|
|
return true;
|
|
}
|
|
|
|
} // namespace Carbon::Check
|