mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Convert first Print argument to String before evaluating (#1548)
Fixes #1439.
This commit is contained in:
@@ -1156,15 +1156,18 @@ auto Interpreter::StepExp() -> ErrorOr<Success> {
|
||||
switch (cast<IntrinsicExpression>(exp).intrinsic()) {
|
||||
case IntrinsicExpression::Intrinsic::Print: {
|
||||
const auto& args = cast<TupleValue>(*act.results()[0]).elements();
|
||||
CARBON_ASSIGN_OR_RETURN(
|
||||
Nonnull<const Value*> format_string_value,
|
||||
Convert(args[0], arena_->New<StringType>(), exp.source_loc()));
|
||||
const char* format_string =
|
||||
cast<StringValue>(*format_string_value).value().c_str();
|
||||
switch (args.size()) {
|
||||
case 1:
|
||||
llvm::outs() << llvm::formatv(
|
||||
cast<StringValue>(*args[0]).value().c_str());
|
||||
llvm::outs() << llvm::formatv(format_string);
|
||||
break;
|
||||
case 2:
|
||||
llvm::outs() << llvm::formatv(
|
||||
cast<StringValue>(*args[0]).value().c_str(),
|
||||
cast<IntValue>(*args[1]).value());
|
||||
llvm::outs() << llvm::formatv(format_string,
|
||||
cast<IntValue>(*args[1]).value());
|
||||
break;
|
||||
default:
|
||||
CARBON_FATAL() << "Unexpected arg count: " << args.size();
|
||||
|
||||
Reference in New Issue
Block a user