[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: octave-forge loadpath
From: |
John W. Eaton |
Subject: |
Re: octave-forge loadpath |
Date: |
Wed, 24 Jan 2007 15:43:07 -0500 |
On 17-Jan-2007, John W. Eaton wrote:
| On 17-Jan-2007, John W. Eaton wrote:
|
| | it won't help people who just do things like
| |
| | LOADPATH = "~/octave:";
| |
| | To warn for that sort of thing I think we would have to do some
| | checking in the symbol table, but I'm not sure it is worth the
| | overhead.
|
| Wait, I hit send too soon. Maybe we could just check when the
| assignment statement is parsed, and if the assignment is to one of the
| former built-in variables, we could warn.
I checked in the following changes to implement this feature, along
with a new file scripts/miscellaneous/news.m that will display the
installed NEWS file. It would be helpful if someone could check to
make sure that I have the complete list of built-in variables that
have been removed.
Thanks,
jwe
ChangeLog
2007-01-24 John W. Eaton <address@hidden>
* octMakefile.in (install): Install NEWS file.
(uninstall): Remove it.
Index: src/ChangeLog
2007-01-24 John W. Eaton <address@hidden>
* pt-assgn.cc (former_built_in_variables): New static data.
(maybe_warn_former_built_in_variable): New static function.
(tree_simple_assignment::tree_simple_assignment,
tree_multi_assignment::tree_multi_assignment):
Move definition here from pt-assign.h
Maybe warn about assignment to obsolete built-in variables.
* version.h (OCTAVE_STARTUP_MESSAGE): Mention "news" function.
Index: octMakefile.in
===================================================================
RCS file: /cvs/octave/octMakefile.in,v
retrieving revision 1.213
diff -u -u -r1.213 octMakefile.in
--- octMakefile.in 25 Oct 2006 21:08:54 -0000 1.213
+++ octMakefile.in 24 Jan 2007 20:36:32 -0000
@@ -113,6 +113,7 @@
$(INSTALL_SCRIPT) mkoctfile $(DESTDIR)$(bindir)/mkoctfile-$(version)
(cd $(DESTDIR)$(bindir); $(LN_S) mkoctfile-$(version)
$(DESTDIR)$(bindir)/mkoctfile)
$(INSTALL_DATA) config.h $(DESTDIR)$(octincludedir)/octave/config.h
+ $(INSTALL_DATA) $(srcdir)/NEWS
$(DESTDIR)$(datadir)/octave/$(version)/NEWS
uninstall::
rm -f $(DESTDIR)$(bindir)/octave-bug
@@ -122,6 +123,7 @@
rm -f $(DESTDIR)$(bindir)/mkoctfile
rm -f $(DESTDIR)$(bindir)/mkoctfile-$(version)
rm -f $(DESTDIR)$(octincludedir)/octave/config.h
+ rm -f $(DESTDIR)$(datadir)/octave/$(version)/NEWS
maintainer-clean::
@echo ""
Index: src/pt-assign.cc
===================================================================
RCS file: /cvs/octave/src/pt-assign.cc,v
retrieving revision 1.32
diff -u -u -r1.32 pt-assign.cc
--- src/pt-assign.cc 16 Jun 2006 05:09:41 -0000 1.32
+++ src/pt-assign.cc 24 Jan 2007 20:36:37 -0000
@@ -26,6 +26,7 @@
#endif
#include <iostream>
+#include <set>
#include "defun.h"
#include "error.h"
@@ -43,6 +44,125 @@
// Simple assignment expressions.
+static const char *former_built_in_variables[] =
+{
+ "DEFAULT_EXEC_PATH",
+ "DEFAULT_LOADPATH",
+ "EDITOR",
+ "EXEC_PATH",
+ "FFTW_WISDOM_PROGRAM",
+ "IMAGEPATH",
+ "INFO_FILE",
+ "INFO_PROGRAM",
+ "LOADPATH",
+ "MAKEINFO_PROGRAM",
+ "PAGER",
+ "PS1",
+ "PS2",
+ "PS4",
+ "__kluge_procbuf_delay__",
+ "ans",
+ "automatic_replot",
+ "beep_on_error",
+ "completion_append_char",
+ "crash_dumps_octave_core",
+ "current_script_file_name",
+ "debug_on_error",
+ "debug_on_interrupt",
+ "debug_on_warning",
+ "debug_symtab_lookups",
+ "default_save_format",
+ "echo_executing_commands",
+ "fixed_point_format",
+ "gnuplot_binary",
+ "gnuplot_command_axes",
+ "gnuplot_command_end",
+ "gnuplot_command_plot",
+ "gnuplot_command_replot",
+ "gnuplot_command_splot",
+ "gnuplot_command_title",
+ "gnuplot_command_using",
+ "gnuplot_command_with",
+ "gnuplot_has_frames",
+ "history_file",
+ "history_size",
+ "ignore_function_time_stamp",
+ "max_recursion_depth",
+ "octave_core_file_format",
+ "octave_core_file_limit",
+ "octave_core_file_name",
+ "output_max_field_width",
+ "output_precision",
+ "page_output_immediately",
+ "page_screen_output",
+ "print_answer_id_name",
+ "print_empty_dimensions",
+ "print_rhs_assign_val",
+ "save_header_format_string",
+ "save_precision",
+ "saving_history",
+ "sighup_dumps_octave_core",
+ "sigterm_dumps_octave_core",
+ "silent_functions",
+ "split_long_rows",
+ "string_fill_char",
+ "struct_levels_to_print",
+ "suppress_verbose_help_message",
+ "variables_can_hide_functions",
+ "warn_assign_as_truth_value",
+ "warn_associativity_change",
+ "warn_divide_by_zero",
+ "warn_empty_list_elements",
+ "warn_fortran_indexing",
+ "warn_function_name_clash",
+ "warn_future_time_stamp",
+ "warn_imag_to_real",
+ "warn_matlab_incompatible",
+ "warn_missing_semicolon",
+ "warn_neg_dim_as_zero",
+ "warn_num_to_str",
+ "warn_precedence_change",
+ "warn_reload_forces_clear",
+ "warn_resize_on_range_error",
+ "warn_separator_insert",
+ "warn_single_quote_string",
+ "warn_str_to_num",
+ "warn_undefined_return_values",
+ "warn_variable_switch_label",
+ "whos_line_format",
+ 0,
+};
+
+static void
+maybe_warn_former_built_in_variable (const std::string& nm)
+{
+ static bool initialized = false;
+
+ static std::set<std::string> vars;
+
+ if (! initialized)
+ {
+ const char **p = former_built_in_variables;
+
+ while (*p)
+ vars.insert (*p++);
+ }
+
+ if (vars.find (nm) != vars.end ())
+ warning_with_id ("Octave:built-in-variable-assignment",
+ "%s is no longer a built-in variable; please read the NEWS
file or type `news' for details",
+ nm.c_str ());
+}
+
+tree_simple_assignment::tree_simple_assignment
+ (tree_expression *le, tree_expression *re,
+ bool plhs, int l, int c, octave_value::assign_op t)
+ : tree_expression (l, c), lhs (le), rhs (re), preserve (plhs), etype (t)
+{
+ if (lhs)
+ maybe_warn_former_built_in_variable (lhs->name ());
+}
+
tree_simple_assignment::~tree_simple_assignment (void)
{
if (! preserve)
@@ -179,6 +299,20 @@
// Multi-valued assignment expressions.
+tree_multi_assignment::tree_multi_assignment
+ (tree_argument_list *lst, tree_expression *r,
+ bool plhs, int l, int c, octave_value::assign_op t)
+ : tree_expression (l, c), lhs (lst), rhs (r), preserve (plhs), etype (t)
+{
+ for (tree_argument_list::iterator p = lhs->begin (); p != lhs->end (); p++)
+ {
+ tree_expression *lhs = *p;
+
+ if (lhs)
+ maybe_warn_former_built_in_variable (lhs->name ());
+ }
+}
+
tree_multi_assignment::~tree_multi_assignment (void)
{
if (! preserve)
Index: src/pt-assign.h
===================================================================
RCS file: /cvs/octave/src/pt-assign.h,v
retrieving revision 1.16
diff -u -u -r1.16 pt-assign.h
--- src/pt-assign.h 16 Jun 2006 05:09:41 -0000 1.16
+++ src/pt-assign.h 24 Jan 2007 20:36:37 -0000
@@ -50,9 +50,7 @@
tree_simple_assignment (tree_expression *le, tree_expression *re,
bool plhs = false, int l = -1, int c = -1,
- octave_value::assign_op t = octave_value::op_asn_eq)
- : tree_expression (l, c), lhs (le), rhs (re), preserve (plhs),
- etype (t) { }
+ octave_value::assign_op t = octave_value::op_asn_eq);
~tree_simple_assignment (void);
@@ -120,9 +118,7 @@
tree_multi_assignment (tree_argument_list *lst, tree_expression *r,
bool plhs = false, int l = -1, int c = -1,
- octave_value::assign_op t = octave_value::op_asn_eq)
- : tree_expression (l, c), lhs (lst), rhs (r), preserve (plhs),
- etype (t) { }
+ octave_value::assign_op t = octave_value::op_asn_eq);
~tree_multi_assignment (void);
Index: src/version.h
===================================================================
RCS file: /cvs/octave/src/version.h,v
retrieving revision 1.100
diff -u -u -r1.100 version.h
--- src/version.h 8 Jan 2007 16:59:35 -0000 1.100
+++ src/version.h 24 Jan 2007 20:36:37 -0000
@@ -82,7 +82,8 @@
#define OCTAVE_STARTUP_MESSAGE \
X_OCTAVE_NAME_VERSION_COPYRIGHT_COPYING_WARRANTY_AND_BUGS \
- (" For details, type `warranty'.\n\n")
+ (" For details, type `warranty'.\n\
+ For information about changes from previous versions, type `news'.\n\n")
#endif