1//
2// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#include "compiler/InfoSink.h"
8
9void TInfoSinkBase::prefix(TPrefixType message) {
10    switch(message) {
11        case EPrefixNone:
12            break;
13        case EPrefixWarning:
14            sink.append("WARNING: ");
15            break;
16        case EPrefixError:
17            sink.append("ERROR: ");
18            break;
19        case EPrefixInternalError:
20            sink.append("INTERNAL ERROR: ");
21            break;
22        case EPrefixUnimplemented:
23            sink.append("UNIMPLEMENTED: ");
24            break;
25        case EPrefixNote:
26            sink.append("NOTE: ");
27            break;
28        default:
29            sink.append("UNKOWN ERROR: ");
30            break;
31    }
32}
33
34void TInfoSinkBase::location(TSourceLoc loc) {
35    int string = 0, line = 0;
36    DecodeSourceLoc(loc, &string, &line);
37
38    TPersistStringStream stream;
39    if (line)
40        stream << string << ":" << line;
41    else
42        stream << string << ":? ";
43    stream << ": ";
44
45    sink.append(stream.str());
46}
47
48void TInfoSinkBase::message(TPrefixType message, const char* s) {
49    prefix(message);
50    sink.append(s);
51    sink.append("\n");
52}
53
54void TInfoSinkBase::message(TPrefixType message, const char* s, TSourceLoc loc) {
55    prefix(message);
56    location(loc);
57    sink.append(s);
58    sink.append("\n");
59}
60