>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