فهرست منبع

added set properties

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6546 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 سال پیش
والد
کامیت
dea60cabfc
3فایلهای تغییر یافته به همراه19 افزوده شده و 0 حذف شده
  1. 10 0
      source/ActiveCellsRuntime.mod
  2. 6 0
      source/FoxIntermediateBackend.Mod
  3. 3 0
      source/FoxSemanticChecker.Mod

+ 10 - 0
source/ActiveCellsRuntime.mod

@@ -48,6 +48,9 @@ type
 		procedure AddRealProperty*(c: any; const name: array of char; value: longreal);
 		end AddRealProperty;
 
+		procedure AddSetProperty*(c: any; const name: array of char; s: set);
+		end AddSetProperty;
+
 		procedure FinishedProperties*(var c: any);
 		end FinishedProperties;
 
@@ -183,6 +186,13 @@ type
 		GetContext().AddRealProperty(c.c, name, value);
 	end AddRealProperty;
 
+	procedure AddSetProperty*(c: Cell; const name: array of char; var newValue: set; value: set);
+	begin
+		if EnableTrace then trace(c, name, newValue, value); end;
+		newValue := value;
+		GetContext().AddSetProperty(c.c, name, value);
+	end AddSetProperty;
+
 	procedure FinishedProperties*(c: Cell);
 	begin
 		if EnableTrace then trace(c); end;

+ 6 - 0
source/FoxIntermediateBackend.Mod

@@ -7120,6 +7120,12 @@ TYPE
 					Emit(Push(property.position, op.op));
 					ReleaseOperand(op);
 					CallThis(position,"ActiveCellsRuntime","AddRealProperty",-1); (* must import *)
+				ELSIF (property.type.resolved IS SyntaxTree.SetType) THEN
+					ASSERT((value.type.resolved IS SyntaxTree.SetType));
+					Evaluate(value, op); 
+					Emit(Push(property.position, op.op));
+					ReleaseOperand(op);
+					CallThis(position,"ActiveCellsRuntime","AddSetProperty",-1); (* must import *)
 				ELSE
 					HALT(200);
 				END;

+ 3 - 0
source/FoxSemanticChecker.Mod

@@ -1045,6 +1045,7 @@ TYPE
 			numberMethods, int: LONGINT;
 			real: LONGREAL;
 			bool: BOOLEAN;
+			set: SET;
 			variable: SyntaxTree.Variable;
 			v: SyntaxTree.Expression;
 			str: Scanner.StringType;
@@ -1104,6 +1105,8 @@ TYPE
 								property.SetType(system.longrealType);
 							ELSIF IsBooleanValue(modifier.expression, bool) THEN
 								property.SetType(system.booleanType);
+							ELSIF IsSetValue(modifier.expression, set) THEN
+								property.SetType(system.setType);
 							ELSIF IsStringValue(modifier.expression, str) THEN
 								(*property.SetValue(modifier.expression);*)
 								atype := SyntaxTree.NewArrayType(-1, NIL, SyntaxTree.Static);