From 9f85c30cd30f06ba84dd9964097a0cf6d26c27c7 Mon Sep 17 00:00:00 2001
From: Marcus Comstedt <marcus@mc.pp.se>
Date: Fri, 25 Oct 2002 15:13:57 +0200
Subject: [PATCH] Don't discard error messages when doing inherits etc.

Rev: src/builtin_functions.c:1.449
Rev: src/docode.c:1.151
Rev: src/language.yacc:1.303
Rev: src/las.c:1.306
Rev: src/las.h:1.59
---
 src/builtin_functions.c |  8 +++----
 src/docode.c            |  6 ++---
 src/language.yacc       | 10 ++++----
 src/las.c               | 52 ++++++++++++++++++++---------------------
 src/las.h               |  4 ++--
 5 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index 792c9db089..6dee7fb326 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -2,11 +2,11 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: builtin_functions.c,v 1.448 2002/10/15 14:57:29 grubba Exp $
+|| $Id: builtin_functions.c,v 1.449 2002/10/25 13:13:57 marcus Exp $
 */
 
 #include "global.h"
-RCSID("$Id: builtin_functions.c,v 1.448 2002/10/15 14:57:29 grubba Exp $");
+RCSID("$Id: builtin_functions.c,v 1.449 2002/10/25 13:13:57 marcus Exp $");
 #include "interpret.h"
 #include "svalue.h"
 #include "pike_macros.h"
@@ -3115,8 +3115,8 @@ node *optimize_replace(node *n)
 	  INT16 lfun;
 	  struct object *replace_obj;
 	  node *ret = NULL;
-	  INT32 args = eval_low(*arg1);	/* NOTE: Addition splitted to ensure */
-	  args += eval_low(*arg2);	/*       correct evaluation order.   */
+	  INT32 args = eval_low(*arg1,1);	/* NOTE: Addition splitted to ensure */
+	  args += eval_low(*arg2,1);		/*       correct evaluation order.   */
 
 	  replace_obj = clone_object(multi_string_replace_program, args);
 
diff --git a/src/docode.c b/src/docode.c
index 093f527807..ea3546b1df 100644
--- a/src/docode.c
+++ b/src/docode.c
@@ -2,11 +2,11 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: docode.c,v 1.150 2002/10/11 01:39:30 nilsson Exp $
+|| $Id: docode.c,v 1.151 2002/10/25 13:13:57 marcus Exp $
 */
 
 #include "global.h"
-RCSID("$Id: docode.c,v 1.150 2002/10/11 01:39:30 nilsson Exp $");
+RCSID("$Id: docode.c,v 1.151 2002/10/25 13:13:57 marcus Exp $");
 #include "las.h"
 #include "program.h"
 #include "pike_types.h"
@@ -1715,7 +1715,7 @@ static int do_docode2(node *n, INT16 flags)
 	  }
 
 	  if (!Pike_compiler->num_parse_error) {
-	    tmp1=eval_low(case_val);
+	    tmp1=eval_low(case_val,1);
 	    if(tmp1<1)
 	    {
 	      yyerror("Error in case label.");
diff --git a/src/language.yacc b/src/language.yacc
index 959825e5e1..8a94937162 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: language.yacc,v 1.302 2002/10/12 11:54:30 grubba Exp $
+|| $Id: language.yacc,v 1.303 2002/10/25 13:13:57 marcus Exp $
 */
 
 %pure_parser
@@ -113,7 +113,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.302 2002/10/12 11:54:30 grubba Exp $");
+RCSID("$Id: language.yacc,v 1.303 2002/10/25 13:13:57 marcus Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -546,7 +546,7 @@ constant_name: TOK_IDENTIFIER '=' safe_expr0
     } else {
       if(!Pike_compiler->num_parse_error)
       {
-	ptrdiff_t tmp=eval_low($3);
+	ptrdiff_t tmp=eval_low($3,1);
 	if(tmp < 1)
 	{
 	  yyerror("Error in constant definition.");
@@ -1725,7 +1725,7 @@ local_constant_name: TOK_IDENTIFIER '=' safe_expr0
       if(Pike_compiler->compiler_pass==2)
 	yyerror("Constant definition is not constant.");
     }else{
-      ptrdiff_t tmp=eval_low($3);
+      ptrdiff_t tmp=eval_low($3,1);
       if(tmp < 1)
       {
 	yyerror("Error in constant definition.");
@@ -2526,7 +2526,7 @@ enum_value: /* EMPTY */
     } else {
       if(!Pike_compiler->num_parse_error)
       {
-	ptrdiff_t tmp=eval_low($2);
+	ptrdiff_t tmp=eval_low($2,1);
 	if(tmp < 1)
 	{
 	  yyerror("Error in enum definition.");
diff --git a/src/las.c b/src/las.c
index f89042cf1f..4359b0071d 100644
--- a/src/las.c
+++ b/src/las.c
@@ -2,11 +2,11 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: las.c,v 1.305 2002/10/21 09:13:17 grubba Exp $
+|| $Id: las.c,v 1.306 2002/10/25 13:13:57 marcus Exp $
 */
 
 #include "global.h"
-RCSID("$Id: las.c,v 1.305 2002/10/21 09:13:17 grubba Exp $");
+RCSID("$Id: las.c,v 1.306 2002/10/25 13:13:57 marcus Exp $");
 
 #include "language.h"
 #include "interpret.h"
@@ -1607,7 +1607,7 @@ void resolv_constant(node *n)
       char fnord[1000];
       if(is_const(n))
       {
-	ptrdiff_t args=eval_low(n);
+	ptrdiff_t args=eval_low(n,1);
 	if(args==1) return;
 
 	if(args!=-1)
@@ -5282,7 +5282,7 @@ static void check_evaluation_time(struct callback *cb,void *tmp,void *ignored)
   }
 }
 
-ptrdiff_t eval_low(node *n)
+ptrdiff_t eval_low(node *n,int print_error)
 {
   unsigned INT16 num_strings, num_constants;
   INT32 jump;
@@ -5337,31 +5337,31 @@ ptrdiff_t eval_low(node *n)
 				 
     if(apply_low_safe_and_stupid(Pike_compiler->fake_object, jump))
     {
-#if 0
-      /* Generate error message */
-      if(!Pike_compiler->catch_level)
-      {
-	struct svalue thrown = throw_value;
-	throw_value.type = T_INT;
-	yyerror("Error evaluating constant.\n");
-	push_svalue(&thrown);
-	low_safe_apply_handler("compile_exception",
-			       error_handler, compat_handler, 1);
-	if (SAFE_IS_ZERO(Pike_sp-1)) yy_describe_exception(&thrown);
-	pop_stack();
-	free_svalue(&thrown);
-      }
+      if(print_error)
+	/* Generate error message */
+	if(!Pike_compiler->catch_level)
+	  {
+	    struct svalue thrown = throw_value;
+	    throw_value.type = T_INT;
+	    yyerror("Error evaluating constant.\n");
+	    push_svalue(&thrown);
+	    low_safe_apply_handler("compile_exception",
+				   error_handler, compat_handler, 1);
+	    if (SAFE_IS_ZERO(Pike_sp-1)) yy_describe_exception(&thrown);
+	    pop_stack();
+	    free_svalue(&thrown);
+	  }
+	else {
+	  free_svalue(&throw_value);
+	  throw_value.type = T_INT;
+	}
       else {
 	free_svalue(&throw_value);
 	throw_value.type = T_INT;
+	/* Assume the node will throw errors at runtime too. */
+	n->tree_info |= OPT_SIDE_EFFECT;
+	n->node_info |= OPT_SIDE_EFFECT;
       }
-#else /* !0 */
-      free_svalue(&throw_value);
-      throw_value.type = T_INT;
-      /* Assume the node will throw errors at runtime too. */
-      n->tree_info |= OPT_SIDE_EFFECT;
-      n->node_info |= OPT_SIDE_EFFECT;
-#endif /* 0 */
     }else{
       if(foo.yes)
 	pop_n_elems(Pike_sp-save_sp);
@@ -5408,7 +5408,7 @@ static node *eval(node *n)
   if(!is_const(n) || n->token==':')
     return n;
   
-  args=eval_low(n);
+  args=eval_low(n,0);
 
   switch(args)
   {
diff --git a/src/las.h b/src/las.h
index 0a49ea7580..8eb4e48412 100644
--- a/src/las.h
+++ b/src/las.h
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: las.h,v 1.58 2002/10/11 01:39:32 nilsson Exp $
+|| $Id: las.h,v 1.59 2002/10/25 13:13:57 marcus Exp $
 */
 
 #ifndef LAS_H
@@ -165,7 +165,7 @@ void print_tree(node *n);
 struct used_vars;
 void fix_type_field(node *n);
 struct timer_oflo;
-ptrdiff_t eval_low(node *n);
+ptrdiff_t eval_low(node *n,int print_error);
 int dooptcode(struct pike_string *name,
 	      node *n,
 	      struct pike_type *type,
-- 
GitLab