Home | History | Annotate | Download | only in compiler
      1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
      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 "InfoSink.h"
     16 
     17 void TInfoSinkBase::prefix(TPrefixType message) {
     18 	switch(message) {
     19 		case EPrefixNone:
     20 			break;
     21 		case EPrefixWarning:
     22 			sink.append("WARNING: ");
     23 			break;
     24 		case EPrefixError:
     25 			sink.append("ERROR: ");
     26 			break;
     27 		case EPrefixInternalError:
     28 			sink.append("INTERNAL ERROR: ");
     29 			break;
     30 		case EPrefixUnimplemented:
     31 			sink.append("UNIMPLEMENTED: ");
     32 			break;
     33 		case EPrefixNote:
     34 			sink.append("NOTE: ");
     35 			break;
     36 		default:
     37 			sink.append("UNKOWN ERROR: ");
     38 			break;
     39 	}
     40 }
     41 
     42 void TInfoSinkBase::location(const TSourceLoc& loc) {
     43 	int string = loc.first_file, line = loc.first_line;
     44 
     45 	TPersistStringStream stream;
     46 	if (line)
     47 		stream << string << ":" << line;
     48 	else
     49 		stream << string << ":? ";
     50 	stream << ": ";
     51 
     52 	sink.append(stream.str());
     53 }
     54 
     55 void TInfoSinkBase::message(TPrefixType message, const char* s) {
     56 	prefix(message);
     57 	sink.append(s);
     58 	sink.append("\n");
     59 }
     60 
     61 void TInfoSinkBase::message(TPrefixType message, const char* s, TSourceLoc loc) {
     62 	prefix(message);
     63 	location(loc);
     64 	sink.append(s);
     65 	sink.append("\n");
     66 }
     67