# HG changeset patch # User jwe # Date 862433868 0 # Node ID 4e7bea116f244bee6e3dd3595db5eadbccd2d264 # Parent 649549662cf6248afe17e654bb65714fa84b0b3d [project @ 1997-04-30 20:56:31 by jwe] diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,119 @@ -Mon Apr 28 00:38:19 1997 John W. Eaton +Wed Apr 30 00:24:05 1997 John W. Eaton + + * ov-base.h, ov-bool-mat.cc, ov-bool-mat.h, ov-bool.cc, ov-bool.h, + ov-ch-mat.cc, ov-ch-mat.h, ov-complex.cc, ov-complex.h, + ov-cx-mat.cc, ov-cx-mat.h, ov-file.cc, ov-file.h, ov-list.cc, + ov-range.cc, ov-range.h, ov-re-mat.cc, ov-re-mat.h, ov-scalar.cc, + ov-scalar.h, ov-str-mat.cc, ov-struct.cc, ov.h (scalar_value): + New function. Same as double_value, but name is consistent with + octave_scalar class. + + * op-fil-b.cc, op-fil-cm.cc, op-fil-lis.cc, op-fil-rec.cc, + op-fil-str.cc, op-fil-bm.cc, op-fil-cs.cc, op-fil-m.cc, + op-fil-s.cc: New files. + + * ops.h (ASSIGNOPDECL, DEFASSIGNOP, DEFASSIGNOP_FN, CONVDECL, + DEFCONV, BINOPDECL, DEFBINOPX, DEFBINOP, DEFBINOP_OP, DEFBINOP_FN, + BINOP_NONCONFORMANT): New macros. + * op-b-b.cc, op-bm-bm.cc, op-cm-cm.cc, op-cm-cs.cc, op-cm-m.cc, + op-cm-s.cc, op-cs-cm.cc, op-cs-cs.cc, op-cs-m.cc, op-cs-s.cc, + op-m-cm.cc, op-m-cs.cc, op-m-m.cc, op-m-s.cc, op-s-cm.cc, + op-s-cs.cc, op-s-m.cc, op-s-s.cc, op-str-str.cc: Use them. + + * Makefile.in (octave): Also depend on ops.o. + + * builtins.h: Delete. + * octave.cc: Add extern declaration here. + + * mappers.h: Delete. + * Makefile.in (INCLUDES): Delete from list. + * mkbuiltins: Add extern declaration in builtins.cc. + + * mkops: New file. + * ops.cc: Delete. + * Makefile.in (SOURCES): Delete from the list. + (ops.cc): New target. + (OP_SOURCES): New list. Move all op-*.cc files here from SOURCES. + Add $(OP_SOURCES) to SOURCES list. + + * variables.cc (symbols_of_variables): No longer static. + * ov.cc (symbols_of_ov): Rename from symbols_of_value. + + * ov-base.h: Delete declaration for install_base_type_conversions. + * op-b-b.h, op-bm-bm.h, op-cm-cm.h, op-cm-cs.h, op-cm-m.h, + op-cm-s.h, op-cs-cm.h, op-cs-cs.h, op-cs-m.h, op-cs-s.h, + op-m-cm.h, op-m-cs.h, op-m-m.h, op-m-s.h, op-s-cm.h, op-s-cs.h, + op-s-m.h, op-s-s.h, op-str-str.h: Delete. + * Makefile.in (INCLUDES): Delete them from the list. + +Tue Apr 29 22:27:49 1997 John W. Eaton + + * variables.h, variables.cc (install_builtin_variables): Delete. + * mkbuiltins: Also generate install_builtin_variables function. + * Makefile.in: Fix rule to call mkbuiltins with correct args. + (clean): Also delete def-files and var-files. + * defaults.h.in, dirfns.h, error.h, file-io.h, help.h, input.h, + lex.h, load-save.h, oct-usr-fcn.h, pager.h, parse.h, pr-output.cc, + pr-output.h, pt-mat.h, pt-misc.h, pt-plot.h, toplev.h: + Delete declarations of symbols_of_* functions. + * data.h, syscalls.h: Delete. + + * pr-output.cc (octave_print_internal): Leave printing of final + new line up to the caller. + + * ov.h, ov.cc (reset_indent_level, increment_indent_level, + decrement_indent_level, newline, indent, reset, + curr_print_indent_level, beginning_of_line): + New functions and static data to manage indent level for printing. + (print_as_scalar): Delete. + (print, print_with_name): Always require stream arg. + Change all callers. + + * oct-stream.h (octave_stream::input_stream): Make publicly available. + (octave_stream::output_stream): Likewise. + + * ov-base.h, ov-base.cc, ov.h, ov.cc, ov-file.h ov-base.h + (is_file, stream_value, stream_number): New functions. + * ov-file.h, ov-file.cc: New files for value class to manage files. + * file-io.cc (symbols_of_file_io): Define stdin, stdout, and + stderr as octve_file objects, not just integers. + (Ffopen, Fpopen): Return octave_file objects, not integer file ids. + * syscalls.cc (Fpipe): Likewise. + * oct-stream.h, oct-stream.cc (octave_stream_list::insert): + Return octave_file object, not integer file id. + + * ov-base.cc, ov-bool-mat.cc, ov-bool.cc, ov-ch-mat.cc, + ov-complex.cc, ov-cx-mat.cc, ov-file.cc, ov-list.cc, ov-range.cc, + ov-re-mat.cc, ov-scalar.cc, ov-str-mat.cc, ov-struct.cc, ov.cc + (print_name_tag, print_raw): New functions. + + * help.cc (Ftype): Don't cast symbol definition to tree_constant *. + + * variables.cc (link_to_global_variable): Don't try to define + symbol with tree_constant objects. + (bind_ans): Call symbol_record::define directly and then + octave_value::print_with_name instead of creating a temporary + assignment expression. + + * pt-pr-code.cc (tree_print_code::indent): Don't use ostream::form. + + * pt-exp-base.h, pt-exp.h, pt-exp.cc (oper): Return string, not + char *. Change all where necessary. + +Mon Apr 28 16:33:49 1997 John W. Eaton + + * ov.h (octave_value binary_op enum): Add lshift and rshift. + (octave_value assign_op enum): Add lshift_eq and rshift_eq. + * ov.cc (assign_op_as_string, binary_op_as_string): Include them. + * parse.y (LSHIFT_EQ RSHIFT_EQ LSHIFT RSHIFT): New tokens. + Add them to the precedence list. + (simple_expr): Add new operators. + (make_assign_op, make_binary_op): Handle new operators. + * lex.l: Recognize new operators. + + * lex.l: Recognize them. + +Sun Apr 27 20:17:49 1997 John W. Eaton * pt-misc.cc (Vsilent_functions, silent_functions): Move here from oct-usr-fcn.cc. @@ -15,8 +130,6 @@ * dynamic-ld.h, dynamic-ld.cc: Rewrite to use singleton class. * variables.cc (load_fcn_from_file): Use new dynamic linking class. -Sun Apr 27 20:17:49 1997 John W. Eaton - * dynamic-ld.h (Octave_builtin_fcn): Delete typedef. * dynamic-ld.cc: Simplify via the magic of function pointers. diff --git a/src/Makefile.in b/src/Makefile.in --- a/src/Makefile.in +++ b/src/Makefile.in @@ -39,14 +39,12 @@ endif endif -DLD_SRC := - -#balance.cc chol.cc colloc.cc dassl.cc det.cc eig.cc \ -# expm.cc fft.cc fft2.cc filter.cc find.cc fsolve.cc \ -# fsqp.cc getgrent.cc getpwent.cc getrusage.cc givens.cc \ -# hess.cc ifft.cc ifft2.cc inv.cc log.cc lpsolve.cc lsode.cc \ -# lu.cc minmax.cc npsol.cc pinv.cc qpsol.cc qr.cc quad.cc \ -# qzval.cc rand.cc schur.cc sort.cc svd.cc syl.cc time.cc +DLD_SRC := balance.cc chol.cc colloc.cc dassl.cc det.cc eig.cc \ + expm.cc fft.cc fft2.cc filter.cc find.cc fsolve.cc \ + fsqp.cc getgrent.cc getpwent.cc getrusage.cc givens.cc \ + hess.cc ifft.cc ifft2.cc inv.cc log.cc lpsolve.cc lsode.cc \ + lu.cc minmax.cc npsol.cc pinv.cc qpsol.cc qr.cc quad.cc \ + qzval.cc rand.cc schur.cc sort.cc svd.cc syl.cc time.cc DLD_OBJ := $(patsubst %.cc, %.o, $(DLD_SRC)) @@ -99,7 +97,11 @@ OP_SOURCES := op-b-b.cc op-bm-bm.cc op-cm-cm.cc op-cm-cs.cc \ op-cm-m.cc op-cm-s.cc op-cs-cm.cc op-cs-cs.cc op-cs-m.cc \ op-cs-s.cc op-m-cm.cc op-m-cs.cc op-m-m.cc op-m-s.cc \ - op-s-cm.cc op-s-cs.cc op-s-m.cc op-s-s.cc op-str-str.cc + op-s-cm.cc op-s-cs.cc op-s-m.cc op-s-s.cc op-str-str.cc \ + op-fil-b.cc op-fil-bm.cc op-fil-cm.cc op-fil-cs.cc \ + op-fil-m.cc op-fil-s.cc op-fil-lis.cc op-fil-rec.cc \ + op-fil-str.cc + SOURCES := BaseSLList.cc Map.cc SLList.cc SLStack.cc Stack.cc \ data.cc defaults.cc dirfns.cc dynamic-ld.cc error.cc \ @@ -192,9 +194,9 @@ stamp-prereq: stamp-picdir defaults.h oct-conf.h touch stamp-prereq -octave: octave.o builtins.o $(DLD_STATIC_OBJ) libraries +octave: octave.o builtins.o ops.o $(DLD_STATIC_OBJ) libraries $(CXX) $(CPPFLAGS) $(ALL_CXXFLAGS) $(ALL_LDFLAGS) -o octave \ - octave.o builtins.o $(DLD_STATIC_OBJ) \ + octave.o builtins.o ops.o $(DLD_STATIC_OBJ) \ $(OCTAVE_LFLAGS) \ $(OCTAVE_LIBS) \ $(FLIBS) $(LEXLIB) $(TERMLIBS) $(LIBS) diff --git a/src/ov-base.h b/src/ov-base.h --- a/src/ov-base.h +++ b/src/ov-base.h @@ -138,6 +138,8 @@ double double_value (bool) const; + double scalar_value (bool) const { return double_value (); } + Matrix matrix_value (bool frc_str_conv = false) const; Complex complex_value (bool frc_str_conv = false) const; diff --git a/src/ov-bool-mat.cc b/src/ov-bool-mat.cc --- a/src/ov-bool-mat.cc +++ b/src/ov-bool-mat.cc @@ -213,7 +213,6 @@ void octave_bool_matrix::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } diff --git a/src/ov-bool-mat.h b/src/ov-bool-mat.h --- a/src/ov-bool-mat.h +++ b/src/ov-bool-mat.h @@ -105,6 +105,8 @@ double double_value (bool = false) const; + double scalar_value (bool = false) const { return double_value (); } + Matrix matrix_value (bool = false) const { return matrix; } Complex complex_value (bool = false) const; diff --git a/src/ov-bool.cc b/src/ov-bool.cc --- a/src/ov-bool.cc +++ b/src/ov-bool.cc @@ -115,7 +115,6 @@ void octave_bool::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } @@ -123,6 +122,7 @@ void octave_bool::print_raw (ostream& os, bool pr_as_read_syntax) const { + indent (os); octave_print_internal (os, scalar, pr_as_read_syntax); } diff --git a/src/ov-bool.h b/src/ov-bool.h --- a/src/ov-bool.h +++ b/src/ov-bool.h @@ -99,6 +99,8 @@ double double_value (bool = false) const { return scalar; } + double scalar_value (bool = false) const { return scalar; } + Matrix matrix_value (bool = false) const { return Matrix (1, 1, scalar); } Complex complex_value (bool = false) const { return scalar; } diff --git a/src/ov-ch-mat.cc b/src/ov-ch-mat.cc --- a/src/ov-ch-mat.cc +++ b/src/ov-ch-mat.cc @@ -98,7 +98,6 @@ void octave_char_matrix::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } diff --git a/src/ov-ch-mat.h b/src/ov-ch-mat.h --- a/src/ov-ch-mat.h +++ b/src/ov-ch-mat.h @@ -105,6 +105,8 @@ double double_value (bool = false) const; + double scalar_value (bool = false) const { return double_value (); } + Matrix matrix_value (bool = false) const { return matrix; } Complex complex_value (bool = false) const; diff --git a/src/ov-complex.cc b/src/ov-complex.cc --- a/src/ov-complex.cc +++ b/src/ov-complex.cc @@ -157,7 +157,6 @@ void octave_complex::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } @@ -165,6 +164,7 @@ void octave_complex::print_raw (ostream& os, bool pr_as_read_syntax) const { + indent (os); octave_print_internal (os, scalar, pr_as_read_syntax); } diff --git a/src/ov-complex.h b/src/ov-complex.h --- a/src/ov-complex.h +++ b/src/ov-complex.h @@ -102,6 +102,8 @@ double double_value (bool = false) const; + double scalar_value (bool = false) const { return double_value (); } + Matrix matrix_value (bool = false) const; Complex complex_value (bool = false) const; diff --git a/src/ov-cx-mat.cc b/src/ov-cx-mat.cc --- a/src/ov-cx-mat.cc +++ b/src/ov-cx-mat.cc @@ -309,7 +309,6 @@ void octave_complex_matrix::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } diff --git a/src/ov-cx-mat.h b/src/ov-cx-mat.h --- a/src/ov-cx-mat.h +++ b/src/ov-cx-mat.h @@ -112,6 +112,8 @@ double double_value (bool) const; + double scalar_value (bool) const { return double_value (); } + Matrix matrix_value (bool = false) const; Complex complex_value (bool = false) const; diff --git a/src/ov-file.cc b/src/ov-file.cc --- a/src/ov-file.cc +++ b/src/ov-file.cc @@ -62,7 +62,6 @@ void octave_file::print (ostream& os, bool) const { - indent (os); print_raw (os); newline (os); } @@ -70,7 +69,7 @@ void octave_file::print_raw (ostream& os, bool) const { - os << "{"; newline (os); + indent (os); os << "{"; newline (os); if (stream) { diff --git a/src/ov-file.h b/src/ov-file.h --- a/src/ov-file.h +++ b/src/ov-file.h @@ -70,7 +70,9 @@ type_conv_fcn numeric_conversion_function (void) const; - double double_value (void) const { return static_cast (number); } + double double_value (bool) const { return static_cast (number); } + + double scalar_value (bool) const { return static_cast (number); } octave_stream *stream_value (void) const { return stream; } diff --git a/src/ov-list.cc b/src/ov-list.cc --- a/src/ov-list.cc +++ b/src/ov-list.cc @@ -29,6 +29,7 @@ #endif #include +#include #include "lo-utils.h" @@ -90,7 +91,6 @@ { begin_unwind_frame ("octave_list_print"); - newline (os); indent (os); os << "("; newline (os); @@ -101,9 +101,15 @@ for (int i = 0; i < n; i++) { + ostrstream buf; + buf << "[" << i+1 << "]" << ends; + const char *nm = buf.str (); + octave_value val = lst(i); - val.print (os); + val.print_with_name (os, nm); + + delete [] nm; } decrement_indent_level (); @@ -120,6 +126,7 @@ { indent (os); os << name << " ="; + newline (os); return false; } diff --git a/src/ov-range.cc b/src/ov-range.cc --- a/src/ov-range.cc +++ b/src/ov-range.cc @@ -206,7 +206,6 @@ void octave_range::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } diff --git a/src/ov-range.h b/src/ov-range.h --- a/src/ov-range.h +++ b/src/ov-range.h @@ -127,6 +127,8 @@ double double_value (bool) const; + double scalar_value (bool) const { return double_value (); } + Matrix matrix_value (bool) const { return range.matrix_value (); } diff --git a/src/ov-re-mat.cc b/src/ov-re-mat.cc --- a/src/ov-re-mat.cc +++ b/src/ov-re-mat.cc @@ -262,7 +262,6 @@ void octave_matrix::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } diff --git a/src/ov-re-mat.h b/src/ov-re-mat.h --- a/src/ov-re-mat.h +++ b/src/ov-re-mat.h @@ -111,6 +111,8 @@ double double_value (bool = false) const; + double scalar_value (bool = false) const { return double_value (); } + Matrix matrix_value (bool = false) const { return matrix; } Complex complex_value (bool = false) const; diff --git a/src/ov-scalar.cc b/src/ov-scalar.cc --- a/src/ov-scalar.cc +++ b/src/ov-scalar.cc @@ -112,7 +112,6 @@ void octave_scalar::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); print_raw (os, pr_as_read_syntax); newline (os); } @@ -120,6 +119,7 @@ void octave_scalar::print_raw (ostream& os, bool pr_as_read_syntax) const { + indent (os); octave_print_internal (os, scalar, pr_as_read_syntax); } diff --git a/src/ov-scalar.h b/src/ov-scalar.h --- a/src/ov-scalar.h +++ b/src/ov-scalar.h @@ -100,6 +100,8 @@ double double_value (bool = false) const { return scalar; } + double scalar_value (bool = false) const { return scalar; } + Matrix matrix_value (bool = false) const { return Matrix (1, 1, scalar); } Complex complex_value (bool = false) const { return scalar; } diff --git a/src/ov-str-mat.cc b/src/ov-str-mat.cc --- a/src/ov-str-mat.cc +++ b/src/ov-str-mat.cc @@ -220,7 +220,7 @@ void octave_char_matrix_str::print (ostream& os, bool pr_as_read_syntax) const { - indent (os); + // indent (os); print_raw (os, pr_as_read_syntax); newline (os); } diff --git a/src/ov-struct.cc b/src/ov-struct.cc --- a/src/ov-struct.cc +++ b/src/ov-struct.cc @@ -83,7 +83,6 @@ if (Vstruct_levels_to_print-- > 0) { - newline (os); indent (os); os << "{"; newline (os); @@ -118,6 +117,7 @@ { indent (os); os << name << " ="; + newline (os); return false; } diff --git a/src/ov.h b/src/ov.h --- a/src/ov.h +++ b/src/ov.h @@ -338,6 +338,9 @@ virtual double double_value (bool frc_str_conv = false) const { return rep->double_value (frc_str_conv); } + virtual double scalar_value (bool frc_str_conv = false) const + { return rep->scalar_value (frc_str_conv); } + virtual Matrix matrix_value (bool frc_str_conv = false) const { return rep->matrix_value (frc_str_conv); }