X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finput.cc;h=b6aed9e2d1296b74182d9aca7f2921c6f9a04001;hb=750b714488c5af6eae22d07163bba8b554734ac6;hp=292e06a44950fc623eab74d985faacd6f9534a39;hpb=a066a93ee74edebb9d238a1bac93c3bc7e8e6e4a;p=lilypond.git diff --git a/lily/input.cc b/lily/input.cc index 292e06a449..b6aed9e2d1 100644 --- a/lily/input.cc +++ b/lily/input.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2011 Han-Wen Nienhuys + Copyright (C) 1997--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ using namespace std; #include "international.hh" +#include "lily-imports.hh" #include "program-option.hh" #include "source-file.hh" #include "sources.hh" @@ -78,62 +79,55 @@ Input::set_location (Input const &i_start, Input const &i_end) [file:line:column:][warning:]message */ -void -Input::print_message (int level, string s) const +string +Input::message_string (const string &msg) const { - string location; if (source_file_) - ::print_message (level, location_string (), - s + "\n" + source_file_->quote_input (start_) + "\n"); + return msg + "\n" + source_file_->quote_input (start_); else - ::print_message (level, "", s); + return msg; +} + +string +Input::message_location () const +{ + return (source_file_) ? location_string () : ""; } void -Input::error (string s) const +Input::error (const string &s) const { - print_message (LOG_ERROR, _f ("error: %s", s)); - // UGH, fix naming or usage (use non_fatal_error in most places, instead) - // exit (1); + ::error (message_string (s), message_location ()); } void -Input::programming_error (string s) const +Input::programming_error (const string &s) const { - if (get_program_option ("warning-as-error")) - error (s); - else - { - print_message (LOG_ERROR, _f ("programming error: %s", s)); - print_message (LOG_ERROR, _ ("continuing, cross fingers") + "\n"); - } + ::programming_error (message_string (s), message_location ()); } void -Input::non_fatal_error (string s) const +Input::non_fatal_error (const string &s) const { - print_message (LOG_ERROR, _f ("error: %s", s)); + ::non_fatal_error (message_string (s), message_location ()); } void -Input::warning (string s) const +Input::warning (const string &s) const { - if (get_program_option ("warning-as-error")) - error (s); - else - print_message (LOG_WARN, _f ("warning: %s", s)); + ::warning (message_string (s), message_location ()); } void -Input::message (string s) const +Input::message (const string &s) const { - print_message (LOG_INFO, s); + ::message (message_string (s), true, message_location ()); } void -Input::debug_output (string s) const +Input::debug_output (const string &s) const { - print_message (LOG_DEBUG, s); + ::debug_output (message_string (s), true, message_location ()); } string @@ -148,7 +142,7 @@ string Input::line_number_string () const { if (source_file_) - return to_string (source_file_->get_line (start_)); + return ::to_string (source_file_->get_line (start_)); return "?"; } @@ -225,3 +219,104 @@ Input::end () const { return end_; } + +static SCM +with_location_hook_0 (void *it) +{ + SCM *args = static_cast (it); + return scm_call_0 (args[0]); +} + +SCM +with_location (SCM loc, SCM proc) +{ + return scm_c_with_fluid (Lily::f_location, + unsmob (loc) ? loc : SCM_BOOL_F, + with_location_hook_0, + static_cast (&proc)); +} + +static SCM +with_location_hook_1 (void *it) +{ + SCM *args = static_cast (it); + return scm_call_1 (args[0], args[1]); +} + +SCM +with_location (SCM loc, SCM proc, SCM arg1) +{ + SCM args[] = { proc, arg1 }; + return scm_c_with_fluid (Lily::f_location, + unsmob (loc) ? loc : SCM_BOOL_F, + with_location_hook_1, + static_cast (&args)); +} + +static SCM +with_location_hook_2 (void *it) +{ + SCM *args = static_cast (it); + return scm_call_2 (args[0], args[1], args[2]); +} + +SCM +with_location (SCM loc, SCM proc, SCM arg1, SCM arg2) +{ + SCM args[] = { proc, arg1, arg2 }; + return scm_c_with_fluid (Lily::f_location, + unsmob (loc) ? loc : SCM_BOOL_F, + with_location_hook_2, + static_cast (&args)); +} + +static SCM +with_location_hook_3 (void *it) +{ + SCM *args = static_cast (it); + return scm_call_3 (args[0], args[1], args[2], args[3]); +} + +SCM +with_location (SCM loc, SCM proc, SCM arg1, SCM arg2, SCM arg3) +{ + SCM args[] = { proc, arg1, arg2, arg3 }; + return scm_c_with_fluid (Lily::f_location, + unsmob (loc) ? loc : SCM_BOOL_F, + with_location_hook_3, + static_cast (&args)); +} + +static SCM +with_location_hook_4 (void *it) +{ + SCM *args = static_cast (it); + return scm_call_4 (args[0], args[1], args[2], args[3], args[4]); +} + +SCM +with_location (SCM loc, SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM arg4) +{ + SCM args[] = { proc, arg1, arg2, arg3, arg4 }; + return scm_c_with_fluid (Lily::f_location, + unsmob (loc) ? loc : SCM_BOOL_F, + with_location_hook_4, + static_cast (&args)); +} + +static SCM +with_location_hook_n (void *it) +{ + SCM *args = static_cast (it); + return scm_apply_0 (args[0], args[1]); +} + +SCM +with_location (SCM loc, SCM proc, SCM arg1, SCM arg2, SCM arg3, SCM arg4, SCM arg5) +{ + SCM args[] = { proc, scm_list_5 (arg1, arg2, arg3, arg4, arg5) }; + return scm_c_with_fluid (Lily::f_location, + unsmob (loc) ? loc : SCM_BOOL_F, + with_location_hook_n, + static_cast (&args)); +}