>From 8d1f6cd5e5b49b9754a77e93585867b4e9e1fb32 Mon Sep 17 00:00:00 2001 From: Jaap de Wolff Date: Sun, 10 May 2020 13:58:59 +0200 Subject: [PATCH 2/2] use explicit convert to int (with check) --- lily/break-substitution.cc | 3 ++- lily/constrained-breaking.cc | 3 ++- lily/include/misc.hh | 19 +++++++++++++++++++ lily/performance.cc | 5 +++-- lily/quote-iterator.cc | 3 ++- lily/source-file.cc | 2 +- lily/system.cc | 3 ++- 7 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lily/break-substitution.cc b/lily/break-substitution.cc index 3eb3741b1f..a44ac55318 100644 --- a/lily/break-substitution.cc +++ b/lily/break-substitution.cc @@ -18,6 +18,7 @@ */ #include "item.hh" +#include "misc.hh" #include "system.hh" #include "grob-array.hh" @@ -306,7 +307,7 @@ bool Spanner::fast_substitute_grob_array (SCM sym, Grob_array *grob_array) { - int len = grob_array->size (); + int len = unsigned_to_int(grob_array->size ()); if (grob_array->ordered ()) return false; diff --git a/lily/constrained-breaking.cc b/lily/constrained-breaking.cc index 7d5b37dd1a..8a87a508b2 100644 --- a/lily/constrained-breaking.cc +++ b/lily/constrained-breaking.cc @@ -21,6 +21,7 @@ #include "international.hh" #include "main.hh" +#include "misc.hh" #include "output-def.hh" #include "page-layout-problem.hh" #include "paper-column.hh" @@ -132,7 +133,7 @@ Constrained_breaking::space_line (vsize i, vsize j) // get_line_configuration(). What is the real cost? vector const line (all_.begin () + breaks_[i], all_.begin () + breaks_[j] + 1); - Interval line_dims = line_dimensions_int (pscore_->layout (), i); + Interval line_dims = line_dimensions_int (pscore_->layout (), unsigned_to_int (i)); bool last = j == breaks_.size () - 1; bool ragged = ragged_right || (last && ragged_last); diff --git a/lily/include/misc.hh b/lily/include/misc.hh index 5c9d24b9ed..e186cead7b 100644 --- a/lily/include/misc.hh +++ b/lily/include/misc.hh @@ -24,6 +24,7 @@ #include "std-vector.hh" #include "interval.hh" +#include "warn.hh" double log_2 (double x); @@ -66,6 +67,24 @@ shift_left (int value, int shiftamount) else return (value << shiftamount); } +template +int +signed_to_int (T value) +{ + if ((value > INT_MAX) || (value < INT_MIN)) + error ("signed_to_int with out of bound value: " + std::to_string (value)); + return ((int) value); +} + +template +int +unsigned_to_int (T value) +{ + if (value > INT_MAX) + error ("unsigned_to_int with out of bound value: " + std::to_string (value)); + return ((int) value); +} + inline Real linear_interpolate (Real x, Real x1, Real x2, Real y1, Real y2) { diff --git a/lily/performance.cc b/lily/performance.cc index 2c37dea2b5..462537fcbe 100644 --- a/lily/performance.cc +++ b/lily/performance.cc @@ -28,6 +28,7 @@ #include "main.hh" #include "midi-chunk.hh" #include "midi-stream.hh" +#include "misc.hh" #include "output-def.hh" #include "score.hh" #include "string-convert.hh" @@ -66,7 +67,7 @@ void Performance::output (Midi_stream &midi_stream, const string &performance_name) const { - int tracks_ = audio_staffs_.size (); + int tracks_ = unsigned_to_int(audio_staffs_.size ()); midi_stream.write (Midi_header (1, tracks_, 384)); debug_output (_ ("Track...") + " ", false); @@ -97,7 +98,7 @@ Performance::output (Midi_stream &midi_stream, text->text_string_ = performance_name; } debug_output ("[" + std::to_string (i), true); - s->output (midi_stream, i, ports_, start_mom); + s->output (midi_stream, unsigned_to_int(i), ports_, start_mom); debug_output ("]", false); } } diff --git a/lily/quote-iterator.cc b/lily/quote-iterator.cc index c1636ba05d..e8483ae233 100644 --- a/lily/quote-iterator.cc +++ b/lily/quote-iterator.cc @@ -24,6 +24,7 @@ #include "input.hh" #include "international.hh" #include "lily-guile.hh" +#include "misc.hh" #include "music-sequence.hh" #include "music.hh" #include "warn.hh" @@ -101,7 +102,7 @@ int binsearch_scm_vector (SCM vec, SCM key, bool (*is_less) (SCM a, SCM b)) { int lo = 0; - int hi = scm_c_vector_length (vec); + int hi = unsigned_to_int(scm_c_vector_length (vec)); /* binary search */ do diff --git a/lily/source-file.cc b/lily/source-file.cc index abee8cf10c..5a8cbbe005 100644 --- a/lily/source-file.cc +++ b/lily/source-file.cc @@ -221,7 +221,7 @@ Source_file::line_slice (char const *pos_str0) const break; } - return Slice (begin_str0 - data_str0, end_str0 - data_str0); + return Slice (signed_to_int(begin_str0 - data_str0), signed_to_int(end_str0 - data_str0)); } string diff --git a/lily/system.cc b/lily/system.cc index 0fcf103ef7..58afd05f62 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -39,6 +39,7 @@ #include "system-start-delimiter.hh" #include "text-interface.hh" #include "warn.hh" +#include "misc.hh" #include "unpure-pure-container.hh" #include "lily-imports.hh" @@ -510,7 +511,7 @@ System::add_column (Paper_column *p) ga = unsmob (scm_ga); } - p->set_rank (ga->size ()); + p->set_rank (unsigned_to_int(ga->size ())); ga->add (p); Axis_group_interface::add_element (this, p); -- 2.20.1