# HG changeset patch # User jwe # Date 831994987 0 # Node ID d681195167798ad83b4f631cfb391c8289974f92 # Parent 83d91aa3759bacf4a56a3253a6031a1259f4f92f [project @ 1996-05-13 13:41:55 by jwe] diff -r 83d91aa3759b -r d68119516779 src/lex.h --- a/src/lex.h Mon May 13 13:29:05 1996 +0000 +++ b/src/lex.h Mon May 13 13:43:07 1996 +0000 @@ -191,6 +191,8 @@ // Flags that need to be shared between the lexer and parser. extern lexical_feedback lexer_flags; +extern void symbols_of_lex (void); + #endif /* diff -r 83d91aa3759b -r d68119516779 src/parse.y --- a/src/parse.y Mon May 13 13:29:05 1996 +0000 +++ b/src/parse.y Mon May 13 13:43:07 1996 +0000 @@ -35,6 +35,7 @@ #include "Matrix.h" +#include "defun.h" #include "error.h" #include "input.h" #include "lex.h" @@ -57,6 +58,31 @@ #include "utils.h" #include "variables.h" +// If TRUE, generate a warning for the assignment in things like +// +// octave> if (a = 2 < n) +// +// but not +// +// octave> if ((a = 2) < n) +// +static bool Vwarn_assign_as_truth_value; + +// If TRUE, generate a warning for the comma in things like +// +// octave> global a, b = 2 +// +static bool Vwarn_comma_in_global_decl; + +// If TRUE, generate warning if declared function name disagrees with +// the name of the file in which it is defined. +static bool Vwarn_function_name_clash; + +// If TRUE, generate warning if a statement in a function is not +// terminated with a semicolon. Useful for checking functions that +// should only produce output using explicit printing statements. +static bool Vwarn_missing_semicolon; + // Temporary symbol table pointer used to cope with bogus function syntax. symbol_table *tmp_local_sym_tab = 0; @@ -626,7 +652,7 @@ optcomma : // empty | ',' { - if (user_pref.warn_comma_in_global_decl) + if (Vwarn_comma_in_global_decl) warning ("comma in global declaration not\ interpreted as a command separator"); } @@ -1325,7 +1351,7 @@ static void maybe_warn_assign_as_truth_value (tree_expression *expr) { - if (user_pref.warn_assign_as_truth_value + if (Vwarn_assign_as_truth_value && expr->is_assignment_expression () && expr->is_in_parens () < 2) { @@ -1948,7 +1974,7 @@ { if (curr_fcn_file_name != id_name) { - if (user_pref.warn_function_name_clash) + if (Vwarn_function_name_clash) warning ("function name `%s' does not agree with function\ file name `%s'", id_name.c_str (), curr_fcn_file_full_name.c_str ()); @@ -2058,7 +2084,7 @@ static void maybe_warn_missing_semi (tree_statement_list *t) { - if (lexer_flags.defining_func && user_pref.warn_missing_semicolon) + if (lexer_flags.defining_func && Vwarn_missing_semicolon) { tree_statement *tmp = t->rear(); @@ -2069,6 +2095,56 @@ } } +static int +warn_assign_as_truth_value (void) +{ + Vwarn_assign_as_truth_value + = check_preference ("warn_assign_as_truth_value"); + + return 0; +} + +static int +warn_comma_in_global_decl (void) +{ + Vwarn_comma_in_global_decl = check_preference ("warn_comma_in_global_decl"); + + return 0; +} + +static int +warn_function_name_clash (void) +{ + Vwarn_function_name_clash = check_preference ("warn_function_name_clash"); + + return 0; +} + +static int +warn_missing_semicolon (void) +{ + Vwarn_missing_semicolon = check_preference ("warn_missing_semicolon"); + + return 0; +} + +void +symbols_of_parse (void) +{ + DEFVAR (warn_assign_as_truth_value, 1.0, 0, warn_assign_as_truth_value, + "produce warning for assignments used as truth values"); + + DEFVAR (warn_comma_in_global_decl, 1.0, 0, warn_comma_in_global_decl, + "produce warning for commas in global declarations"); + + DEFVAR (warn_function_name_clash, 1.0, 0, warn_function_name_clash, + "produce warning if function name conflicts with file name"); + + DEFVAR (warn_missing_semicolon, 0.0, 0, warn_missing_semicolon, + "produce a warning if a statement in a function file is not +terminated with a semicolon"); +} + /* ;;; Local Variables: *** ;;; mode: text ***