204 lines · 6.3 KB · C
RawDownload
/*----------------------------------------------------------------------------  ChucK Concurrent, On-the-fly Audio Programming Language    Compiler and Virtual Machine   Copyright (c) 2004 Ge Wang and Perry R. Cook.  All rights reserved.    http://chuck.stanford.edu/    http://chuck.cs.princeton.edu/   This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.   This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  U.S.A.-----------------------------------------------------------------------------*/ //-----------------------------------------------------------------------------// file: errmsg.h// desc: functions used in all phases of the compiler to give error messages//       based on Andrew Appel's Tiger code//// author: Ge Wang (ge@ccrma.stanford.edu | gewang@cs.princeton.edu)// based on code by: Andrew Appel (appel@cs.princeton.edu)// date: Summer 2002//-----------------------------------------------------------------------------#ifndef __CHUCK_ERRORMSG_H__#define __CHUCK_ERRORMSG_H__ #include "chuck_def.h"#include <stdio.h>#include <stdarg.h> #if defined(_cplusplus) || defined(__cplusplus)extern "C" {#endif  extern t_CKBOOL EM_anyErrors;extern t_CKINT EM_tokPos;extern t_CKINT EM_lineNum; // EM_extLineNum is synced with EM_lineNum in lexer/parser phase, then synced// with scanner/typechecker (EM_lineNum is not synced with scanner/typechecker)extern t_CKINT EM_extLineNum; void EM_newline( ); // levels#define CK_LOG_ALL              10 // set this to log everything#define CK_LOG_FINEST           9#define CK_LOG_FINER            8#define CK_LOG_FINE             7#define CK_LOG_CONFIG           6#define CK_LOG_INFO             5#define CK_LOG_WARNING          4#define CK_LOG_SEVERE           3#define CK_LOG_SYSTEM           2#define CK_LOG_CORE             1#define CK_LOG_NONE             0  // set this to log nothing  //-----------------------------------------------------------------------------// REFACTOR-2017: (jack) -- callback printing//-----------------------------------------------------------------------------// printingvoid ck_fprintf_stdout( const char * format, ... );void ck_fprintf_stderr( const char * format, ... );void ck_fflush_stdout();void ck_fflush_stderr();void ck_vfprintf_stdout( const char * format, va_list args );void ck_vfprintf_stderr( const char * format, va_list args ); // callbacksvoid ck_set_stdout_callback( void (*callback)(const char *) );void ck_set_stderr_callback( void (*callback)(const char *) ); #define CK_FPRINTF_STDOUT(...) ck_fprintf_stdout(__VA_ARGS__)#define CK_FPRINTF_STDERR(...) ck_fprintf_stderr(__VA_ARGS__)#define CK_FFLUSH_STDOUT() ck_fflush_stdout()#define CK_FFLUSH_STDERR() ck_fflush_stderr()#define CK_VFPRINTF_STDOUT(message, ap) ck_vfprintf_stdout(message, ap)#define CK_VFPRINTF_STDERR(message, ap) ck_vfprintf_stderr(message, ap) #ifdef __cplusplus// c++: custom stream-like thingextern "C++" {#include <sstream> class ChuckOutStream{public:    ChuckOutStream( bool isErr );    ~ChuckOutStream();     // there's probably a way to do this with templates or something    // this is not that way    ChuckOutStream& operator<<( const std::string val );    ChuckOutStream& operator<<( const char * val );    ChuckOutStream& operator<<( const double val );    ChuckOutStream& operator<<( const float val );    ChuckOutStream& operator<<( const unsigned long long val );    ChuckOutStream& operator<<( const long long val );    ChuckOutStream& operator<<( const unsigned long val );    ChuckOutStream& operator<<( const long val );    ChuckOutStream& operator<<( const unsigned int val );    ChuckOutStream& operator<<( const int val );    ChuckOutStream& operator<<( const bool val );     void set_callback( void (*callback)(const char *) ); private:    void flush();    std::stringstream m_stream;    void (*m_callback)(const char *);    bool m_isErr;};  extern ChuckOutStream g_ck_stdoutstream;extern ChuckOutStream g_ck_stderrstream; #define CK_STDCOUT g_ck_stdoutstream#define CK_STDCERR g_ck_stderrstream#define CK_STDENDL std::string("\n") }#else// c: oh well#define CK_STDCOUT std::cout#define CK_STDCERR std::cerr#define CK_STDENDL std::endl #endif//-----------------------------------------------------------------------------// here endeth the callback printing//-----------------------------------------------------------------------------    void EM_log( t_CKINT, c_constr, ... );void EM_setlog( t_CKINT );void EM_pushlog();void EM_poplog(); // actual levelextern t_CKINT g_loglevel;// macro to compare#define DO_LOG(x) ( x <= g_loglevel ) void EM_error( t_CKINT, c_constr, ... );void EM_error2( t_CKINT, c_constr, ... );void EM_error2b( t_CKINT, c_constr, ... );void EM_error3( c_constr, ... );void EM_impossible( c_constr, ... );t_CKBOOL EM_reset( c_constr filename );void EM_change_file( c_constr filename );const char * EM_lasterror();void EM_reset_msg(); const char * mini( const char * str );const char * mini_type( const char * str ); #if defined(_cplusplus) || defined(__cplusplus)}#endif   #if defined(_cplusplus) || defined(__cplusplus) //-----------------------------------------------------------------------------// name: class SmartPushLog (added 1.4.1.0 spencer)// desc: scoped EM_pushlog for convenience and auto-balancing of push/pop logs// usage: create an instance of SmartPushLog when you want to push the// log level; the log level will be automatically popped when the instance goes// out of scope and the SmartPushLog is deconstructed.//-----------------------------------------------------------------------------class SmartPushLog{public:    SmartPushLog()    {        EM_pushlog();    }     ~SmartPushLog()    {        EM_poplog();    }}; #endif  #endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t