blob: d63f902ef561dff1733dba6e51c2fb53d6badf4e [file] [log] [blame]
Ben Clayton6b4924f2021-02-17 20:13:34 +00001// Copyright 2021 The Tint Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#include "src/debug.h"
16
Ben Claytone1159c72022-02-01 17:16:01 +000017#include <memory>
18
Ben Clayton6b4924f2021-02-17 20:13:34 +000019namespace tint {
20namespace {
21
22InternalCompilerErrorReporter* ice_reporter = nullptr;
23
Ben Clayton6b4924f2021-02-17 20:13:34 +000024} // namespace
25
Ben Clayton6b4924f2021-02-17 20:13:34 +000026void SetInternalCompilerErrorReporter(InternalCompilerErrorReporter* reporter) {
27 ice_reporter = reporter;
28}
29
Ben Clayton3a9a55e2021-02-18 16:33:38 +000030InternalCompilerError::InternalCompilerError(const char* file,
31 size_t line,
Ben Claytonffd28e22021-06-24 11:27:36 +000032 diag::System system,
Ben Clayton3a9a55e2021-02-18 16:33:38 +000033 diag::List& diagnostics)
Ben Claytonffd28e22021-06-24 11:27:36 +000034 : file_(file), line_(line), system_(system), diagnostics_(diagnostics) {}
Ben Clayton3a9a55e2021-02-18 16:33:38 +000035
36InternalCompilerError::~InternalCompilerError() {
Ben Claytone1159c72022-02-01 17:16:01 +000037 auto file = std::make_shared<Source::File>(file_, "");
38 Source source{Source::Range{{line_}}, file.get()};
39 diagnostics_.add_ice(system_, msg_.str(), source, std::move(file));
Ben Clayton6b4924f2021-02-17 20:13:34 +000040
41 if (ice_reporter) {
Ben Clayton3a9a55e2021-02-18 16:33:38 +000042 ice_reporter(diagnostics_);
Ben Clayton6b4924f2021-02-17 20:13:34 +000043 }
44}
45
46} // namespace tint