2
0
Эх сурвалжийг харах

Allowed Oberon inline accross module boundaries

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7013 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 жил өмнө
parent
commit
bb412d231b

+ 1 - 1
source/FoxIntermediateBackend.Mod

@@ -5523,7 +5523,7 @@ TYPE
 
 			IF (x.left IS SyntaxTree.SymbolDesignator) & (x.left(SyntaxTree.SymbolDesignator).symbol IS SyntaxTree.Procedure) THEN
 				procedure := x.left(SyntaxTree.SymbolDesignator).symbol(SyntaxTree.Procedure);
-				IF procedure.isOberonInline & (procedure.scope.ownerModule = module.module) THEN
+				IF procedure.isOberonInline (* & (procedure.scope.ownerModule = module.module) *) THEN
 					IF  InlineProcedureCall(x) THEN
 						RETURN
 					ELSE

+ 17 - 19
source/FoxPrintout.Mod

@@ -1232,7 +1232,7 @@ TYPE
 				Indent;
 				Comments(x.comment,x,FALSE);
 				Keyword("PROCEDURE " );
-				IF (mode = SymbolFile) & ~x.isInline THEN
+				IF (mode = SymbolFile) & ~x.isInline & ~x.isOberonInline THEN
 					w.String("^ ");
 				END;
 
@@ -1253,7 +1253,7 @@ TYPE
 				END;
 				FlagEnd(first);
 
-				IF x.isInline THEN w.String(" - ") END;
+				IF x.isInline OR x.isOberonInline THEN w.String(" - ") END;
 				IF x.isConstructor THEN w.String(" & ") END;
 				IF x.isFinalizer THEN w.String(" ~ ") END;
 
@@ -1283,10 +1283,10 @@ TYPE
 					EndComment;
 				END;
 				IF x.externalName = NIL THEN
-					IF (mode > SymbolFile) OR (mode = SymbolFile) & (x.isInline) THEN
+					IF (mode > SymbolFile) OR (mode = SymbolFile) & (x.isInline OR x.isOberonInline) THEN
 						w.String( ";" );
 						Comments(x.comment,x,TRUE);
-						IF mode >= SymbolFile THEN
+						IF (mode >= SymbolFile) OR x.isOberonInline THEN
 							ProcedureScope(x.procedureScope);
 						END;
 						Indent;  Keyword("END " );  Identifier(x.name);
@@ -1507,7 +1507,7 @@ TYPE
 		BEGIN
 			prevScope := currentScope;
 			currentScope := x;
-			IF (mode  >= SourceCode) OR (x.ownerProcedure.isInline) THEN Scope(x) END;
+			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)
 			END;
 			currentScope := prevScope;
@@ -1785,7 +1785,7 @@ TYPE
 				procedure := currentScope(SyntaxTree.ProcedureScope).ownerProcedure;
 				procedureType := procedure.type(SyntaxTree.ProcedureType);
 			END;
-			IF (mode >= SourceCode) OR (procedure = NIL) OR (procedure.access * SyntaxTree.Public # {}) & procedure.isInline THEN
+			IF (mode >= SourceCode) OR (procedure = NIL) OR (procedure.access * SyntaxTree.Public # {}) & (procedure.isInline OR procedure.isOberonInline) THEN
 				(*
 				IF x.inlineCode # NIL THEN
 					unit := 8;
@@ -1850,18 +1850,16 @@ TYPE
 				Code(x.code);
 			ELSE
 				Indent;  Keyword("BEGIN" ); Modifiers(x.blockModifiers);
-				IF mode >= SourceCode THEN
-					IF x.statements # NIL THEN
-						w.IncIndent;
-						StatementSequence(x.statements);
-						w.DecIndent;
-					END;
-					IF x.finally # NIL THEN
-						Indent;  Keyword("FINALLY" );
-						w.IncIndent;
-						StatementSequence(x.finally);
-						w.DecIndent
-					END;
+				IF x.statements # NIL THEN
+					w.IncIndent;
+					StatementSequence(x.statements);
+					w.DecIndent;
+				END;
+				IF x.finally # NIL THEN
+					Indent;  Keyword("FINALLY" );
+					w.IncIndent;
+					StatementSequence(x.finally);
+					w.DecIndent
 				END;
 			END;
 			(* "END" written by caller *)
@@ -1898,7 +1896,7 @@ TYPE
 					BuiltinList(x.moduleScope.firstBuiltin)
 				END;
 
-				IF (x.moduleScope.bodyProcedure # NIL) & (x.moduleScope.bodyProcedure.procedureScope.body # NIL) THEN
+				IF (x.moduleScope.bodyProcedure # NIL) & (x.moduleScope.bodyProcedure.procedureScope.body # NIL) & (mode >= SourceCode) THEN
 					Body(x.moduleScope.bodyProcedure.procedureScope.body)
 				END;
 				Indent; Keyword("END "); Identifier(x.name); w.String( "." ); w.Ln;  w.Update;

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 140 - 140
source/FoxSemanticChecker.Mod


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно