Jelajahi Sumber

Improved enum flags testing.

woollybah 6 tahun lalu
induk
melakukan
3d58a221d7
1 mengubah file dengan 11 tambahan dan 5 penghapusan
  1. 11 5
      blitz.mod/blitz_enum.c

+ 11 - 5
blitz.mod/blitz_enum.c

@@ -69,13 +69,19 @@ ENUM_TO_STRING(BBSIZET,t)
 int bbEnumTryConvert_##chr(BBEnum * bbEnum, type ordinalValue, type * ordinalResult) {\
 	type * value = (type*)bbEnum->values;\
 	if (bbEnum->flags) {\
-		int result;\
-		for (int i = 0; i < bbEnum->length; i++) {\
-			if (ordinalValue & *value) {\
-				result |= *value++;\
+		if (ordinalValue == 0) {\
+			for (int i = 0; i < bbEnum->length; i++) {\
+				if (*value++ == 0) {\
+					return 1;\
+				}\
 			}\
+			return 0;\
+		}\
+		type val = ordinalValue;\
+		for (int i = 0; i < bbEnum->length; i++) {\
+			val ^= *value++;\
 		}\
-		if (result == ordinalValue) {\
+		if (val == 0) {\
 			*ordinalResult = ordinalValue;\
 			return 1;\
 		}\