Browse Source

Added basic support for inheriting context objects in cooperative mode

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8591 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 years ago
parent
commit
c15dd78903
2 changed files with 8 additions and 2 deletions
  1. 6 0
      source/Activities.Mod
  2. 2 2
      source/Coop.Objects.Mod

+ 6 - 0
source/Activities.Mod

@@ -49,6 +49,7 @@ TYPE Activity* = OBJECT {DISPOSABLE} (Queues.Item)
 	VAR startTime-: Timer.Counter;
 	VAR time- := 0: HUGEINT;
 	VAR stack {UNTRACED}: Stack;
+	VAR context*: OBJECT;
 
 	PROCEDURE &InitializeActivity (procedure: PROCEDURE; priority: Priority);
 	VAR stackRecord {UNTRACED}: StackRecord; stackFrame {UNTRACED}: BaseTypes.StackFrame;
@@ -69,6 +70,11 @@ TYPE Activity* = OBJECT {DISPOSABLE} (Queues.Item)
 		stackFrame.previous := NIL;
 		stackFrame.descriptor := ADDRESS OF StackFrameDescriptor;
 		SELF.procedure := procedure;
+		IF SYSTEM.GetActivity () # NIL THEN
+			context := SYSTEM.GetActivity ()(Activity).context;
+		ELSE
+			context := NIL;
+		END;
 	END InitializeActivity;
 
 	PROCEDURE ~Finalize;

+ 2 - 2
source/Coop.Objects.Mod

@@ -224,12 +224,12 @@ END CurrentProcess;
 
 PROCEDURE CurrentContext*(): ANY;
 BEGIN
-	RETURN NIL; (* stub *)
+	RETURN Activities.GetCurrentActivity ().context;
 END CurrentContext;
 
 PROCEDURE SetContext*(context: ANY);
 BEGIN
-	(* stub *)
+	Activities.GetCurrentActivity ().context := context;
 END SetContext;
 
 (* Return stack bottom of process. For compatibility WinAos/UnixAos/NativeAos  *)