瀏覽代碼

Hopefully fixed foxPrintout (was printing superfluous bodies)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7015 8c9fc860-2736-0410-a75d-ab315db34111
skoster 8 年之前
父節點
當前提交
35ec1a6826
共有 1 個文件被更改,包括 7 次插入50 次删除
  1. 7 50
      source/FoxPrintout.Mod

+ 7 - 50
source/FoxPrintout.Mod

@@ -318,7 +318,7 @@ TYPE
 			IF x.firstParameter # NIL THEN ParameterList(x.firstParameter) END;
 			Scope(x.cellScope);
 
-			IF (x.cellScope IS SyntaxTree.CellScope) & (x.cellScope(SyntaxTree.CellScope).bodyProcedure # NIL) THEN
+			IF (x.cellScope IS SyntaxTree.CellScope) & (x.cellScope(SyntaxTree.CellScope).bodyProcedure # NIL) & (mode >= SourceCode) THEN
 				Body(x.cellScope(SyntaxTree.CellScope).bodyProcedure.procedureScope.body)
 			END;
 
@@ -355,7 +355,7 @@ TYPE
 				END;
 				Scope(x.recordScope);
 
-				IF (x.recordScope.bodyProcedure # NIL) THEN
+				IF (x.recordScope.bodyProcedure # NIL)  & (mode >= SourceCode) THEN
 					Body(x.recordScope.bodyProcedure.procedureScope.body)
 				END;
 
@@ -382,37 +382,6 @@ TYPE
 			END;
 		END VisitRecordType;
 
-		PROCEDURE Flags((*flags: SET*));
-		(*
-		VAR first: BOOLEAN;
-			PROCEDURE Flag(CONST name: ARRAY OF CHAR);
-			BEGIN
-				IF first THEN w.String("{"); first := FALSE; ELSE w.String(", ") END;
-				w.String(name);
-			END Flag;
-		BEGIN
-			first := TRUE;
-			IF SyntaxTree.ActiveFlag IN flags THEN Flag("ACTIVE") END;
-			IF SyntaxTree.ExclusiveFlag IN flags THEN Flag("EXCLUSIVE") END;
-			IF SyntaxTree.SafeFlag IN flags THEN Flag("SAFE") END;
-			IF SyntaxTree.RealtimeFlag IN flags THEN Flag("REALTIME") END;
-			IF SyntaxTree.WinAPIFlag IN flags THEN Flag("WINAPI") END;
-			IF SyntaxTree.CFlag IN flags THEN Flag("C") END;
-			IF SyntaxTree.DelegateFlag IN flags THEN Flag("DELEGATE") END;
-			IF SyntaxTree.UntracedFlag IN flags THEN Flag("UNTRACED") END;
-			IF ~first THEN w.String("} ") END;
-
-			IF info THEN
-				BeginComment;
-				IF SyntaxTree.AccessedFlag IN flags THEN Flag("ACCESSED") END;
-				IF SyntaxTree.WrittenFlag IN flags THEN Flag("WRITTEN") END;
-				IF SyntaxTree.UnreachableFlag IN flags THEN Flag("UNREACHABLE") END;
-				IF ~first THEN w.String("}") END;
-				EndComment;
-			END;
-			*)
-		END Flags;
-
 		PROCEDURE Flag(identifier: SyntaxTree.Identifier; VAR first: BOOLEAN);
 		VAR name: SyntaxTree.IdentifierString;
 		BEGIN
@@ -964,7 +933,6 @@ TYPE
 		END Visible;
 
 		PROCEDURE PrintSymbol(x: SyntaxTree.Symbol);
-		VAR first: BOOLEAN;
 		BEGIN
 			IF x IS SyntaxTree.Operator THEN
 				w.String('"');Identifier(x.name);  w.String('"')
@@ -1063,7 +1031,6 @@ TYPE
 		END ConstantList;
 
 		PROCEDURE VisitVariable(x: SyntaxTree.Variable);
-		VAR first: BOOLEAN;
 		BEGIN
 			IF Visible(x) THEN
 				IF (x.access # SyntaxTree.Hidden) THEN
@@ -1226,7 +1193,7 @@ TYPE
 		END Access;
 
 		PROCEDURE VisitProcedure(x: SyntaxTree.Procedure);
-		VAR type: SyntaxTree.ProcedureType;  flags: SET; first: BOOLEAN;
+		VAR type: SyntaxTree.ProcedureType;  first: BOOLEAN;
 		BEGIN
 			IF Visible(x) THEN
 				Indent;
@@ -1507,8 +1474,9 @@ TYPE
 		BEGIN
 			prevScope := currentScope;
 			currentScope := x;
-			IF (mode  >= SourceCode) OR (x.ownerProcedure.isInline) OR (x.ownerProcedure.isOberonInline) THEN Scope(x) END;
-			IF (mode >= SymbolFile) & (x.body # NIL) THEN Body(x.body)
+			IF (mode  >= SourceCode) OR (x.ownerProcedure.isInline) OR (x.ownerProcedure.isOberonInline) THEN 
+				Scope(x); 
+				IF x.body # NIL THEN Body(x.body) END;
 			END;
 			currentScope := prevScope;
 		END ProcedureScope;
@@ -1849,6 +1817,7 @@ TYPE
 				Indent; Keyword("CODE");
 				Code(x.code);
 			ELSE
+				Keyword("(* BODY *)");
 				Indent;  Keyword("BEGIN" ); Modifiers(x.blockModifiers);
 				IF x.statements # NIL THEN
 					w.IncIndent;
@@ -1990,18 +1959,6 @@ VAR
 		D.Update();
 	END Info;
 
-	PROCEDURE IsIntegerValue(x: SyntaxTree.Expression; VAR value: LONGINT): BOOLEAN;
-	VAR result: BOOLEAN;
-	BEGIN
-		IF (x.resolved # NIL) & (x.resolved IS SyntaxTree.IntegerValue) THEN
-			value :=  x.resolved(SyntaxTree.IntegerValue).value;
-			result := TRUE
-		ELSE
-			result := FALSE
-		END;
-		RETURN result
-	END IsIntegerValue;
-
 	PROCEDURE Init;
 	BEGIN
 		NEW(debug,D.Log,All,TRUE);