summaryrefslogtreecommitdiff
path: root/gcc/d/dmd/errors.d
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/d/dmd/errors.d')
-rw-r--r--gcc/d/dmd/errors.d446
1 files changed, 446 insertions, 0 deletions
diff --git a/gcc/d/dmd/errors.d b/gcc/d/dmd/errors.d
new file mode 100644
index 00000000000..91a5c77b53e
--- /dev/null
+++ b/gcc/d/dmd/errors.d
@@ -0,0 +1,446 @@
+/**
+ * Functions for raising errors.
+ *
+ * Copyright: Copyright (C) 1999-2021 by The D Language Foundation, All Rights Reserved
+ * Authors: $(LINK2 http://www.digitalmars.com, Walter Bright)
+ * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
+ * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/errors.d, _errors.d)
+ * Documentation: https://dlang.org/phobos/dmd_errors.html
+ * Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/errors.d
+ */
+
+module dmd.errors;
+
+import core.stdc.stdarg;
+import dmd.globals;
+
+nothrow:
+
+/**
+ * Color highlighting to classify messages
+ */
+enum Classification : Color
+{
+ error = Color.brightRed, /// for errors
+ gagged = Color.brightBlue, /// for gagged errors
+ warning = Color.brightYellow, /// for warnings
+ deprecation = Color.brightCyan, /// for deprecations
+ tip = Color.brightGreen, /// for tip messages
+}
+
+enum Color : int
+{
+ black = 0,
+ red = 1,
+ green = 2,
+ blue = 4,
+ yellow = red | green,
+ magenta = red | blue,
+ cyan = green | blue,
+ lightGray = red | green | blue,
+ bright = 8,
+ darkGray = bright | black,
+ brightRed = bright | red,
+ brightGreen = bright | green,
+ brightBlue = bright | blue,
+ brightYellow = bright | yellow,
+ brightMagenta = bright | magenta,
+ brightCyan = bright | cyan,
+ white = bright | lightGray,
+}
+
+
+static if (__VERSION__ < 2092)
+ private extern (C++) void noop(const ref Loc loc, const(char)* format, ...) {}
+else
+ pragma(printf) private extern (C++) void noop(const ref Loc loc, const(char)* format, ...) {}
+
+
+package auto previewErrorFunc(bool isDeprecated, FeatureState featureState) @safe @nogc pure nothrow
+{
+ if (featureState == FeatureState.enabled)
+ return &error;
+ else if (featureState == FeatureState.disabled || isDeprecated)
+ return &noop;
+ else
+ return &deprecation;
+}
+
+package auto previewSupplementalFunc(bool isDeprecated, FeatureState featureState) @safe @nogc pure nothrow
+{
+ if (featureState == FeatureState.enabled)
+ return &errorSupplemental;
+ else if (featureState == FeatureState.disabled || isDeprecated)
+ return &noop;
+ else
+ return &deprecationSupplemental;
+}
+
+
+/**
+ * Print an error message, increasing the global error count.
+ * Params:
+ * loc = location of error
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void error(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ verror(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void error(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ verror(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Same as above, but takes a filename and line information arguments as separate parameters.
+ * Params:
+ * filename = source file of error
+ * linnum = line in the source file
+ * charnum = column number on the line
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void error(const(char)* filename, uint linnum, uint charnum, const(char)* format, ...)
+ {
+ const loc = Loc(filename, linnum, charnum);
+ va_list ap;
+ va_start(ap, format);
+ verror(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void error(const(char)* filename, uint linnum, uint charnum, const(char)* format, ...)
+ {
+ const loc = Loc(filename, linnum, charnum);
+ va_list ap;
+ va_start(ap, format);
+ verror(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Print additional details about an error message.
+ * Doesn't increase the error count or print an additional error prefix.
+ * Params:
+ * loc = location of error
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void errorSupplemental(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ verrorSupplemental(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void errorSupplemental(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ verrorSupplemental(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Print a warning message, increasing the global warning count.
+ * Params:
+ * loc = location of warning
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void warning(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vwarning(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void warning(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vwarning(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Print additional details about a warning message.
+ * Doesn't increase the warning count or print an additional warning prefix.
+ * Params:
+ * loc = location of warning
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void warningSupplemental(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vwarningSupplemental(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void warningSupplemental(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vwarningSupplemental(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Print a deprecation message, may increase the global warning or error count
+ * depending on whether deprecations are ignored.
+ * Params:
+ * loc = location of deprecation
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void deprecation(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vdeprecation(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void deprecation(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vdeprecation(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Print additional details about a deprecation message.
+ * Doesn't increase the error count, or print an additional deprecation prefix.
+ * Params:
+ * loc = location of deprecation
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void deprecationSupplemental(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vdeprecationSupplemental(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void deprecationSupplemental(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vdeprecationSupplemental(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Print a verbose message.
+ * Doesn't prefix or highlight messages.
+ * Params:
+ * loc = location of message
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void message(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vmessage(loc, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void message(const ref Loc loc, const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vmessage(loc, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * Same as above, but doesn't take a location argument.
+ * Params:
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void message(const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vmessage(Loc.initial, format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void message(const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vmessage(Loc.initial, format, ap);
+ va_end(ap);
+ }
+
+/**
+ * The type of the diagnostic handler
+ * see verrorPrint for arguments
+ * Returns: true if error handling is done, false to continue printing to stderr
+ */
+alias DiagnosticHandler = bool delegate(const ref Loc location, Color headerColor, const(char)* header, const(char)* messageFormat, va_list args, const(char)* prefix1, const(char)* prefix2);
+
+/**
+ * The diagnostic handler.
+ * If non-null it will be called for every diagnostic message issued by the compiler.
+ * If it returns false, the message will be printed to stderr as usual.
+ */
+__gshared DiagnosticHandler diagnosticHandler;
+
+/**
+ * Print a tip message with the prefix and highlighting.
+ * Params:
+ * format = printf-style format specification
+ * ... = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void tip(const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vtip(format, ap);
+ va_end(ap);
+ }
+else
+ pragma(printf) extern (C++) void tip(const(char)* format, ...)
+ {
+ va_list ap;
+ va_start(ap, format);
+ vtip(format, ap);
+ va_end(ap);
+ }
+
+
+/**
+ * Same as $(D error), but takes a va_list parameter, and optionally additional message prefixes.
+ * Params:
+ * loc = location of error
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ * p1 = additional message prefix
+ * p2 = additional message prefix
+ * header = title of error message
+ */
+extern (C++) void verror(const ref Loc loc, const(char)* format, va_list ap, const(char)* p1 = null, const(char)* p2 = null, const(char)* header = "Error: ");
+
+/**
+ * Same as $(D errorSupplemental), but takes a va_list parameter.
+ * Params:
+ * loc = location of error
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void verrorSupplemental(const ref Loc loc, const(char)* format, va_list ap);
+else
+ pragma(printf) extern (C++) void verrorSupplemental(const ref Loc loc, const(char)* format, va_list ap);
+
+/**
+ * Same as $(D warning), but takes a va_list parameter.
+ * Params:
+ * loc = location of warning
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void vwarning(const ref Loc loc, const(char)* format, va_list ap);
+else
+ pragma(printf) extern (C++) void vwarning(const ref Loc loc, const(char)* format, va_list ap);
+
+/**
+ * Same as $(D warningSupplemental), but takes a va_list parameter.
+ * Params:
+ * loc = location of warning
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void vwarningSupplemental(const ref Loc loc, const(char)* format, va_list ap);
+else
+ pragma(printf) extern (C++) void vwarningSupplemental(const ref Loc loc, const(char)* format, va_list ap);
+
+/**
+ * Same as $(D deprecation), but takes a va_list parameter, and optionally additional message prefixes.
+ * Params:
+ * loc = location of deprecation
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ * p1 = additional message prefix
+ * p2 = additional message prefix
+ */
+extern (C++) void vdeprecation(const ref Loc loc, const(char)* format, va_list ap, const(char)* p1 = null, const(char)* p2 = null);
+
+/**
+ * Same as $(D message), but takes a va_list parameter.
+ * Params:
+ * loc = location of message
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void vmessage(const ref Loc loc, const(char)* format, va_list ap);
+else
+ pragma(printf) extern (C++) void vmessage(const ref Loc loc, const(char)* format, va_list ap);
+
+/**
+ * Same as $(D tip), but takes a va_list parameter.
+ * Params:
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void vtip(const(char)* format, va_list ap);
+else
+ pragma(printf) extern (C++) void vtip(const(char)* format, va_list ap);
+
+/**
+ * Same as $(D deprecationSupplemental), but takes a va_list parameter.
+ * Params:
+ * loc = location of deprecation
+ * format = printf-style format specification
+ * ap = printf-style variadic arguments
+ */
+static if (__VERSION__ < 2092)
+ extern (C++) void vdeprecationSupplemental(const ref Loc loc, const(char)* format, va_list ap);
+else
+ pragma(printf) extern (C++) void vdeprecationSupplemental(const ref Loc loc, const(char)* format, va_list ap);
+
+/**
+ * Call this after printing out fatal error messages to clean up and exit
+ * the compiler.
+ */
+extern (C++) void fatal();
+
+/**
+ * Try to stop forgetting to remove the breakpoints from
+ * release builds.
+ */
+extern (C++) void halt();