diff --git a/libinterp/corefcn/oct-stream.cc b/libinterp/corefcn/oct-stream.cc --- a/libinterp/corefcn/oct-stream.cc +++ b/libinterp/corefcn/oct-stream.cc @@ -2435,7 +2435,7 @@ ok_for_signed_int_conv (const octave_val uint64_t limit = std::numeric_limits::max (); if (val.is_string ()) - return false; + return true; else if (val.is_integer_type ()) { if (val.is_uint64_type ()) @@ -2463,7 +2463,7 @@ static bool ok_for_unsigned_int_conv (const octave_value& val) { if (val.is_string ()) - return false; + return true; else if (val.is_integer_type ()) { // Easier than dispatching here... diff --git a/libinterp/octave-value/ov-ch-mat.cc b/libinterp/octave-value/ov-ch-mat.cc --- a/libinterp/octave-value/ov-ch-mat.cc +++ b/libinterp/octave-value/ov-ch-mat.cc @@ -87,6 +87,42 @@ octave_char_matrix::float_value (bool) c return retval; } +octave_int64 +octave_char_matrix::int64_scalar_value () const +{ + octave_int64 retval = 0; + + if (rows () > 0 && columns () > 0) + { + gripe_implicit_conversion ("Octave:array-to-scalar", + "character matrix", "int64 scalar"); + + retval = octave_int64 (matrix (0, 0)); + } + else + gripe_invalid_conversion ("character matrix", "int64 scalar"); + + return retval; +} + +octave_uint64 +octave_char_matrix::uint64_scalar_value () const +{ + octave_uint64 retval = 0; + + if (rows () > 0 && columns () > 0) + { + gripe_implicit_conversion ("Octave:array-to-scalar", + "character matrix", "uint64 scalar"); + + retval = octave_uint64 (matrix (0, 0)); + } + else + gripe_invalid_conversion ("character matrix", "uint64 scalar"); + + return retval; +} + Complex octave_char_matrix::complex_value (bool) const { diff --git a/libinterp/octave-value/ov-ch-mat.h b/libinterp/octave-value/ov-ch-mat.h --- a/libinterp/octave-value/ov-ch-mat.h +++ b/libinterp/octave-value/ov-ch-mat.h @@ -36,6 +36,7 @@ along with Octave; see the file COPYING. #include "ov.h" #include "ov-base.h" #include "ov-base-mat.h" +#include "ov-int64.h" #include "ov-re-mat.h" #include "ov-typeinfo.h" @@ -105,6 +106,9 @@ public: float float_scalar_value (bool frc_str_conv = false) const { return float_value (frc_str_conv); } + octave_int64 int64_scalar_value () const; + octave_uint64 uint64_scalar_value () const; + Matrix matrix_value (bool = false) const { return Matrix (charMatrix (matrix)); }