소스 검색

removed warning and fixed two problems:
- remove_def was wrong, and parameter defs should not be removed at the
end of a scope

ceriel 29 년 전
부모
커밋
806a084be5
3개의 변경된 파일4개의 추가작업 그리고 2개의 파일을 삭제
  1. 1 1
      lang/pc/comp/lookup.c
  2. 1 1
      lang/pc/comp/scope.c
  3. 2 0
      lang/pc/comp/typequiv.c

+ 1 - 1
lang/pc/comp/lookup.c

@@ -23,8 +23,8 @@ remove_def(df)
 	else {
 		while( df1 && df1->df_next != df ) df1 = df1->df_next;
 		df1->df_next = df->df_next;
-		free_def(df);
 	}
+	free_def(df);
 }
 
 struct def *

+ 1 - 1
lang/pc/comp/scope.c

@@ -55,7 +55,7 @@ close_scope(doclean)
 	df = CurrentScope->sc_def;
 	if (doclean) while (df) {
 		struct def *next = df->df_nextinscope;
-		remove_def(df);
+		if (! (df->df_flags & (D_VARPAR|D_VALPAR))) remove_def(df);
 		df = next;
 	}
 	CurrVis = CurrVis->next;

+ 2 - 0
lang/pc/comp/typequiv.c

@@ -86,8 +86,10 @@ TstCompat(tp1, tp2)
 		if( IsPacked(tp1) != IsPacked(tp2) )
 			return 0;
 		if( TstCompat(ElementType(tp1), ElementType(tp2)) )	{
+			/*
 			if( ElementType(tp1) != ElementType(tp2) )
 				warning("base-types of sets not equal");
+			*/
 			return 1;
 		}
 		else return 0;