From bug-octave-request at bevo dot che dot wisc dot edu Wed Feb 20 14:55:18 2002 Subject: Re: strrep fails when define_all_return_values=1 From: Paul Kienzle To: Kwasniak Miroslaw , bug-octave@bevo.che.wisc.edu Date: Wed, 20 Feb 2002 15:54:58 -0500 The following patch works for me in my limited tests. It just moves the check for undefined values until after the function has been evaluated. Paul Kienzle pkienzle at users dot sf dot net Index: ov-usr-fcn.cc =================================================================== RCS file: /cvs/octave/src/ov-usr-fcn.cc,v retrieving revision 1.23 diff -c -p -r1.23 ov-usr-fcn.cc *** ov-usr-fcn.cc 2000/11/30 00:34:40 1.23 --- ov-usr-fcn.cc 2002/02/20 20:44:14 *************** octave_user_function::do_multi_index_op *** 355,368 **** unwind_protect::add (clear_param_list, param_list); - if (ret_list && Vdefine_all_return_values) - { - octave_value tmp = builtin_any_variable ("default_return_value"); - - if (tmp.is_defined ()) - ret_list->initialize_undefined_elements (tmp); - } - // Force return list to be undefined when this function exits. // Doing so decrements the reference counts on the values of local // variables that are also named values returned by this function. - } - // Force return list to be undefined when this function exits. // Doing so decrements the reference counts on the values of local // variables that are also named values returned by this function. --- 355,360 ---- *************** octave_user_function::do_multi_index_op *** 408,413 **** --- 400,413 ---- goto abort; } + if (ret_list && Vdefine_all_return_values) + { + octave_value tmp = builtin_any_variable ("default_return_value"); + + if (tmp.is_defined ()) + ret_list->initialize_undefined_elements (tmp); + } + // Copy return values out. if (ret_list) On Wed, Feb 20, 2002 at 09:15:09AM -0600, Kwasniak Miroslaw wrote: > > To: bug-octave at bevo dot che dot wisc dot edu > Cc: mirek at zind dot ikem dot pwr dot wroc dot pl > Reply-To: mirek at zind dot ikem dot pwr dot wroc dot pl > Subject: strrep fails when define_all_return_values=1 > > Bug report for Octave 2.1.35 configured for i386-pc-linux-gnu > > Description: > ----------- > > See subject. > > Repeat-By: > --------- > > It's more general problem in octave when define_all_return_values is set. > A variable being output parameter has initial value [] and type of matrix, > where assigment with indexed left side expects type of string even if left > side is empty :( > > >> define_all_return_values=1 > define_all_return_values = 1 > >> function xx;a(1)='A',endfunction;xx > a = A > >> function a=xx;a(1)='A',endfunction;xx > error: invalid conversion from string to real matrix > error: type conversion for assignment of `string' to indexed `matrix' failed > error: evaluating assignment expression near line 1, column 19 > error: called from ' > > > Fix: > --- > > This is strrep fix only: > > --- /usr/share/octave/2.1.35/m/strings/strrep.m Fri Feb 15 19:56:00 2002 > +++ ./strrep.m Wed Feb 20 15:08:45 2002 > at @ -47,6 +47,7 @@ > return; > endif > > + t=""; > ind = findstr (s, x, 0); > > if (length(ind) == 0) > > > > Configuration (please do not edit this section): > ----------------------------------------------- > > uname output: Linux mirek 2.4.8-ac4 #1 Tue Aug 14 15:39:09 CEST 2001 i586 unknown > configure opts: --prefix=/usr --datadir=/usr/share --libdir=/usr/lib --libexecdir=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --with-g77 --with-fastblas=blas --without-hdf5 --with-fftw --enable-dl --enable-shared --enable-lite-kernel --disable-static --host i386-linux > Fortran compiler: g77 > FFLAGS: -O2 > F2C: > F2CFLAGS: > FLIBS: -lg2c -lm -L/usr/lib/gcc-lib/i386-linux/2.95.4 -lm > CPPFLAGS: > INCFLAGS: -I. -I. -I./liboctave -I./src -I./libcruft/misc -I./glob -I./glob > C compiler: /usr/bin/gcc, version 2.95.4 (Debian prerelease) > CFLAGS: -O2 > CPICFLAG: -fPIC > C++ compiler: /usr/bin/g++, version 2.95.4 (Debian prerelease) > CXXFLAGS: -O2 > CXXPICFLAG: -fPIC > LDFLAGS: -s > LIBFLAGS: -L. > RLD_FLAG: -Xlinker -rpath -Xlinker /usr/lib/octave-2.1.35 > LIBS: -lreadline -lncurses -ldl -lm > LEXLIB: > LIBPLPLOT: > LIBDLFCN: > LIBGLOB: ./glob/glob.o ./glob/fnmatch.o > DEFS: > > -DOCTAVE_SOURCE=1 -DSEPCHAR=':' -DSEPCHAR_STR=":" -D__NO_MATH_INLINES=1 > -DCXX_NEW_FRIEND_TEMPLATE_DECL=1 -DCXX_ABI=gnu_v2 -DHAVE_LIBM=1 > -DHAVE_FFTW_H=1 -DHAVE_FFTW=1 -DF77_APPEND_UNDERSCORE=1 -DOCTAVE_LITE=1 > -DHAVE_GETHOSTNAME=1 -DHAVE_GETPWNAM=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 > -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8 -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 > -DNPOS=std::string::npos -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1 > -DTIME_WITH_SYS_TIME=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1 > -DHAVE_CURSES_H=1 -DHAVE_DLFCN_H=1 -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 > -DHAVE_FNMATCH_H=1 -DHAVE_GLOB_H=1 -DHAVE_GRP_H=1 -DHAVE_LIMITS_H=1 > -DHAVE_MEMORY_H=1 -DHAVE_NCURSES_H=1 -DHAVE_POLL_H=1 -DHAVE_PWD_H=1 > -DHAVE_SGTTY_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_IOCTL_H=1 > -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_POLL_H=1 -DHAVE_SYS_RESOURCE_H=1 > -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TIME_H=1 > -DHAVE_SYS_TIMES_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTSNAME_H=1 > -DHAVE_TERMCAP_H=1 -DHAVE_TERMIO_H=1 -DHAVE_UNISTD_H=1 > -DHAVE_VARARGS_H=1 -DHAVE_ATEXIT=1 -DHAVE_BCOPY=1 -DHAVE_BZERO=1 > -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1 -DHAVE_ENDPWENT=1 -DHAVE_EXECVP=1 > -DHAVE_FCNTL=1 -DHAVE_FORK=1 -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 > -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETGRENT=1 -DHAVE_GETGRGID=1 > -DHAVE_GETGRNAM=1 -DHAVE_GETPGRP=1 -DHAVE_GETPID=1 -DHAVE_GETPPID=1 > -DHAVE_GETPWENT=1 -DHAVE_GETPWUID=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_GETUID=1 > -DHAVE_GETWD=1 -DHAVE_LINK=1 -DHAVE_LOCALTIME_R=1 -DHAVE_LSTAT=1 > -DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_ON_EXIT=1 > -DHAVE_PIPE=1 -DHAVE_POLL=1 -DHAVE_PUTENV=1 -DHAVE_READLINK=1 > -DHAVE_RENAME=1 -DHAVE_RINDEX=1 -DHAVE_RMDIR=1 -DHAVE_SELECT=1 > -DHAVE_SETGRENT=1 -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1 -DHAVE_SIGACTION=1 > -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1 -DHAVE_SIGSUSPEND=1 -DHAVE_STAT=1 > -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRFTIME=1 > -DHAVE_STRNCASECMP=1 -DHAVE_STRPTIME=1 -DHAVE_SYMLINK=1 -DHAVE_TEMPNAM=1 > -DHAVE_UMASK=1 -DHAVE_UNLINK=1 -DHAVE_USLEEP=1 -DHAVE_VFPRINTF=1 > -DHAVE_VSPRINTF=1 -DHAVE_VSNPRINTF=1 -DHAVE_WAITPID=1 -DHAVE_LIBDL=1 > -DHAVE_DLOPEN=1 -DHAVE_DLSYM=1 -DHAVE_DLERROR=1 -DHAVE_DLCLOSE=1 > -DWITH_DL=1 -DWITH_DYNAMIC_LINKING=1 -DHAVE_TIMEVAL=1 -DHAVE_FINITE=1 > -DHAVE_ISNAN=1 -DHAVE_ISINF=1 -DHAVE_ACOSH=1 -DHAVE_ASINH=1 -DHAVE_ATANH=1 > -DHAVE_ERF=1 -DHAVE_ERFC=1 -DHAVE_ST_BLKSIZE=1 -DHAVE_ST_BLOCKS=1 > -DHAVE_ST_RDEV=1 -DHAVE_TM_ZONE=1 -DHAVE_GR_PASSWD=1 -DUSE_READLINE=1 > -DEXCEPTION_IN_MATH=1 -DRETSIGTYPE=void -DSYS_SIGLIST_DECLARED=1 > -DHAVE_SYS_SIGLIST=1 -DHAVE_POSIX_SIGNALS=1 -DHAVE_GETRUSAGE=1 > -DHAVE_TIMES=1 -DGNUPLOT_HAS_MULTIPLOT=1 -DGNUPLOT_HAS_FRAMES=1 > > > > ------------------------------------------------------------- > Octave is freely available under the terms of the GNU GPL. > > Octave's home on the web: http://www.octave.org > How to fund new projects: http://www.octave.org/funding.html > Subscription information: http://www.octave.org/archive.html > ------------------------------------------------------------- > ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------