diff --git a/src/las.c b/src/las.c index 0644a8960c3cc41162ed4c3ab48bfab2025132eb..f3d088c2ef5f255f607dcb5728119211cc4f7e64 100644 --- a/src/las.c +++ b/src/las.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: las.c,v 1.130 1999/11/24 00:59:11 grubba Exp $"); +RCSID("$Id: las.c,v 1.131 1999/11/24 21:41:44 hubbe Exp $"); #include "language.h" #include "interpret.h" @@ -2119,7 +2119,16 @@ void fix_type_field(node *n) /* a["b"]=c and a->b=c can be valid when a is an array */ if (CDR(n)->token != F_INDEX && CDR(n)->token != F_ARROW && !match_types(CDR(n)->type,CAR(n)->type)) { + + struct pike_string *s1,*s2; + s1=describe_type(CDR(n)->type); + s2=describe_type(CAR(n)->type); my_yyerror("Bad type in assignment."); + my_yyerror("Expected: %s",s1->str); + my_yyerror("Got : %s",s2->str); + free_string(s1); + free_string(s2); + } else if (lex.pragmas & ID_STRICT_TYPES) { struct pike_string *t1 = describe_type(CAR(n)->type); struct pike_string *t2 = describe_type(CDR(n)->type); @@ -2178,10 +2187,10 @@ void fix_type_field(node *n) max_args = count_arguments(f); if(max_args<0) max_args = 0x7fffffff; - free_string(s); if (n->type) { /* Type/argument-check OK. */ + free_string(s); break; } @@ -2236,6 +2245,17 @@ void fix_type_field(node *n) my_yyerror("Bad argument %d to %s.", max_correct_args+1, name); } + + { + struct pike_string *s1,*s2; + s1=describe_type(f); + s2=describe_type(s); + my_yyerror("Expected: %s",s1->str); + my_yyerror("Got : %s",s2->str); + free_string(s1); + free_string(s2); + } + free_string(s); } copy_shared_string(n->type, mixed_type_string); break;