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/translator/InfoSink.h"
8
9void TInfoSinkBase::prefix(TPrefixType p) {
10    switch(p) {
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(int file, int line) {
35    TPersistStringStream stream;
36    if (line)
37        stream << file << ":" << line;
38    else
39        stream << file << ":? ";
40    stream << ": ";
41
42    sink.append(stream.str());
43}
44
45void TInfoSinkBase::location(const TSourceLoc& loc) {
46    location(loc.first_file, loc.first_line);
47}
48
49void TInfoSinkBase::message(TPrefixType p, const TSourceLoc& loc, const char* m) {
50    prefix(p);
51    location(loc);
52    sink.append(m);
53    sink.append("\n");
54}
55