diff src/pt-assign.cc @ 6253:f1676652d808

[project @ 2007-01-24 20:43:36 by jwe]
author jwe
date Wed, 24 Jan 2007 20:43:37 +0000
parents 2a6cb4ed8f1e
children d00da2148c53
line wrap: on
line diff
--- a/src/pt-assign.cc
+++ b/src/pt-assign.cc
@@ -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)