Edit

kc3-lang/angle/src/compiler/InfoSink.cpp

Branch :

  • Show log

    Commit

  • Author : alokp@chromium.org
    Date : 2010-06-02 15:21:22
    Hash : 4e4facd4
    Message : Refactored InfoSink. I have replaced most instances of sprintf with std::ostringstream to make it safer. I have made sure that everything still compiles and passes conformance tests. Review URL: http://codereview.appspot.com/1391041 git-svn-id: https://angleproject.googlecode.com/svn/trunk@322 736b8ea6-26fd-11df-bfd4-992fa37f6226

  • src/compiler/InfoSink.cpp
  • //
    // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #include "compiler/InfoSink.h"
    
    void TInfoSinkBase::prefix(TPrefixType message) {
        switch(message) {
            case EPrefixNone:
                break;
            case EPrefixWarning:
                sink.append("WARNING: ");
                break;
            case EPrefixError:
                sink.append("ERROR: ");
                break;
            case EPrefixInternalError:
                sink.append("INTERNAL ERROR: ");
                break;
            case EPrefixUnimplemented:
                sink.append("UNIMPLEMENTED: ");
                break;
            case EPrefixNote:
                sink.append("NOTE: ");
                break;
            default:
                sink.append("UNKOWN ERROR: ");
                break;
        }
    }
    
    void TInfoSinkBase::location(TSourceLoc loc) {
        int string = loc >> SourceLocStringShift;
        int line = loc & SourceLocLineMask;
    
        TPersistStringStream stream;
        if (line)
            stream << string << ":" << line;
        else
            stream << string << ":? ";
        stream << ": ";
    
        sink.append(stream.str());
    }
    
    void TInfoSinkBase::message(TPrefixType message, const char* s) {
        prefix(message);
        sink.append(s);
        sink.append("\n");
    }
    
    void TInfoSinkBase::message(TPrefixType message, const char* s, TSourceLoc loc) {
        prefix(message);
        location(loc);
        sink.append(s);
        sink.append("\n");
    }