# HG changeset patch # User jwe # Date 790441622 0 # Node ID 7dbf5bb19bded57dbeef0f22d73c602da55d01e4 # Parent ba91ca569177fd903d1b7bc58c78b7c8066ce110 [project @ 1995-01-18 15:06:19 by jwe] diff -r ba91ca569177 -r 7dbf5bb19bde src/Array-tc.cc --- a/src/Array-tc.cc Wed Jan 18 14:59:49 1995 +0000 +++ b/src/Array-tc.cc Wed Jan 18 15:07:02 1995 +0000 @@ -28,6 +28,21 @@ #include "tree-const.h" +extern template class ArrayRep; +extern template class Array; +extern template class Array2; +extern template class DiagArray; + +extern template class ArrayRep; +extern template class Array; +extern template class Array2; +extern template class DiagArray; + +extern template class ArrayRep; +extern template class Array; +extern template class Array2; +extern template class DiagArray; + template class ArrayRep; template class Array; diff -r ba91ca569177 -r 7dbf5bb19bde src/SLStack-sym.cc --- a/src/SLStack-sym.cc Wed Jan 18 14:59:49 1995 +0000 +++ b/src/SLStack-sym.cc Wed Jan 18 15:07:02 1995 +0000 @@ -28,6 +28,11 @@ #include "symtab.h" +extern template class SLNode; +extern template class SLList; +extern template class Stack; +extern template class SLStack; + template class SLNode; template class SLList; template class Stack; diff -r ba91ca569177 -r 7dbf5bb19bde src/pt-const.h --- a/src/pt-const.h Wed Jan 18 14:59:49 1995 +0000 +++ b/src/pt-const.h Wed Jan 18 15:07:02 1995 +0000 @@ -241,6 +241,11 @@ int valid_as_scalar_index (void) const { return rep->valid_as_scalar_index (); } +// Is this constant valid as a zero scalar index? + + int valid_as_zero_index (void) const + { return rep->valid_as_zero_index (); } + // Does this constant correspond to a truth value? int is_true (void) const { return rep->is_true (); } diff -r ba91ca569177 -r 7dbf5bb19bde src/tc-inlines.h --- a/src/tc-inlines.h Wed Jan 18 14:59:49 1995 +0000 +++ b/src/tc-inlines.h Wed Jan 18 15:07:02 1995 +0000 @@ -293,6 +293,18 @@ && args(0).valid_as_scalar_index ())); } +static inline int +valid_zero_index (const Octave_object& args) +{ + int nargin = args.length (); + + return ((nargin == 2 + && args(1).valid_as_zero_index () + && args(0).valid_as_zero_index ()) + || (nargin == 1 + && args(0).valid_as_zero_index ())); +} + /* ;;; Local Variables: *** ;;; mode: C++ *** diff -r ba91ca569177 -r 7dbf5bb19bde src/tc-rep-ass.cc --- a/src/tc-rep-ass.cc Wed Jan 18 14:59:49 1995 +0000 +++ b/src/tc-rep-ass.cc Wed Jan 18 15:07:02 1995 +0000 @@ -104,10 +104,9 @@ int nargin = args.length (); - if ((rhs.is_scalar_type () || rhs.is_zero_by_zero ()) - && valid_scalar_indices (args)) + if (rhs.is_zero_by_zero ()) { - if (rhs.is_zero_by_zero ()) + if (valid_scalar_indices (args)) { if (type_tag == complex_scalar_constant) delete complex_scalar; @@ -115,7 +114,15 @@ matrix = new Matrix (0, 0); type_tag = matrix_constant; } - else if (type_tag == unknown_constant || type_tag == scalar_constant) + else if (! valid_zero_index (args)) + { + ::error ("invalid assigment of empty matrix to scalar"); + return; + } + } + else if (rhs.is_scalar_type () && valid_scalar_indices (args)) + { + if (type_tag == unknown_constant || type_tag == scalar_constant) { if (rhs.const_type () == scalar_constant) { diff -r ba91ca569177 -r 7dbf5bb19bde src/tc-rep-idx.cc --- a/src/tc-rep-idx.cc Wed Jan 18 14:59:49 1995 +0000 +++ b/src/tc-rep-idx.cc Wed Jan 18 15:07:02 1995 +0000 @@ -135,8 +135,8 @@ } else { - int rows = 0; - int cols = 0; + int rows = -1; + int cols = -1; int nargin = args.length (); @@ -212,16 +212,23 @@ else break; -// If only one index, cols will not be set. +// If only one index, cols will not be set, so we set it. +// If single index is [], rows will be zero, and we should set cols to +// zero too. - if (cols == 0) + if (cols < 0) { - if (user_pref.prefer_column_vectors) - cols = 1; + if (rows == 0) + cols = 0; else { - cols = rows; - rows = 1; + if (user_pref.prefer_column_vectors) + cols = 1; + else + { + cols = rows; + rows = 1; + } } } diff -r ba91ca569177 -r 7dbf5bb19bde src/tc-rep.cc --- a/src/tc-rep.cc Wed Jan 18 14:59:49 1995 +0000 +++ b/src/tc-rep.cc Wed Jan 18 15:07:02 1995 +0000 @@ -652,6 +652,16 @@ } int +TC_REP::valid_as_zero_index (void) const +{ + return ((type_tag == scalar_constant && NINT (scalar) == 0) + || (type_tag == matrix_constant + && matrix->rows () == 0 && matrix->columns () == 0) + || (type_tag == range_constant + && range->nelem () == 1 && NINT (range->base ()) == 0)); +} + +int TC_REP::is_true (void) const { int retval = 0; diff -r ba91ca569177 -r 7dbf5bb19bde src/tc-rep.h --- a/src/tc-rep.h Wed Jan 18 14:59:49 1995 +0000 +++ b/src/tc-rep.h Wed Jan 18 15:07:02 1995 +0000 @@ -174,6 +174,7 @@ } int valid_as_scalar_index (void) const; + int valid_as_zero_index (void) const; int is_true (void) const;