blob: 4abf4631b8b170f8d441598757232cfcdbe59ae0 [file] [log] [blame]
/*
* Copyright 2021 Google LLC.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SKSL_ERROR_REPORTER
#define SKSL_ERROR_REPORTER
#include "include/core/SkTypes.h"
#include <string_view>
namespace SkSL {
class Position;
/**
* Class which is notified in the event of an error.
*/
class ErrorReporter {
public:
ErrorReporter() {}
virtual ~ErrorReporter() {}
void error(Position position, std::string_view msg);
std::string_view source() const { return fSource; }
void setSource(std::string_view source) { fSource = source; }
int errorCount() const {
return fErrorCount;
}
void resetErrorCount() {
fErrorCount = 0;
}
protected:
/**
* Called when an error is reported.
*/
virtual void handleError(std::string_view msg, Position position) = 0;
private:
Position position(int offset) const;
std::string_view fSource;
int fErrorCount = 0;
};
/**
* Error reporter for tests that need an SkSL context; aborts immediately if an error is reported.
*/
class TestingOnly_AbortErrorReporter : public ErrorReporter {
public:
void handleError(std::string_view msg, Position pos) override;
};
} // namespace SkSL
#endif