ObjFW  Check-in [7bb4cae9db]

Overview
Comment:Key Value Coding: Add -[setNilValueForKey:]
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 7bb4cae9db8326f4b8d6551615810f06114860eecd601ef8ed5e292a72e64cfb
User & Date: js on 2016-06-05 15:51:12
Other Links: manifest | tags
Context
2016-06-05
16:00
Key Value Coding: Add fallback to isFoo check-in: 10fbb20fd6 user: js tags: trunk
15:51
Key Value Coding: Add -[setNilValueForKey:] check-in: 7bb4cae9db user: js tags: trunk
15:50
Fix OFDictionaryTests check-in: 4ad79a7f67 user: js tags: trunk
Changes

Modified src/OFKeyValueCoding.h from [a76365edf5] to [d63616901c].

64
65
66
67
68
69
70










71
72
73
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83







+
+
+
+
+
+
+
+
+
+



 * By default, this throws an @ref OFUndefinedKeyException.
 *
 * @param value The value for the specified undefined key
 * @param key The undefined key of the value to set
 */
-  (void)setValue: (nullable id)value
  forUndefinedKey: (OFString*)key;

/*!
 * @brief This is called by @ref setValue:forKey: if the specified key is a
 *	  scalar, but the value specified is `nil`.
 *
 * By default, this throws an @ref OFInvalidArgumentException.
 *
 * @param key The key for which the value `nil` was specified
 */
- (void)setNilValueForKey: (OFString*)key;
@end

OF_ASSUME_NONNULL_END

Modified src/OFObject+KeyValueCoding.m from [a1b8c4dfd4] to [08642a6afa].

20
21
22
23
24
25
26

27
28
29
30
31
32
33
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34







+







#include <ctype.h>

#import "OFObject.h"
#import "OFObject+KeyValueCoding.h"
#import "OFString.h"
#import "OFNumber.h"

#import "OFInvalidArgumentException.h"
#import "OFOutOfMemoryException.h"
#import "OFUndefinedKeyException.h"

int _OFObject_KeyValueCoding_reference;

static char OF_INLINE
nextType(const char **typeEncoding)
135
136
137
138
139
140
141





142
143
144
145
146
147
148
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154







+
+
+
+
+







	valueType = nextType(&typeEncoding);

	if (*typeEncoding != 0) {
		[self    setValue: value
		  forUndefinedKey: key];
		return;
	}

	if (valueType != '@' && valueType != '#' && value == nil) {
		[self setNilValueForKey: key];
		return;
	}

	switch (valueType) {
	case '@':
	case '#':
		{
			void (*setter)(id, SEL, id) = (void(*)(id, SEL, id))
			    [self methodForSelector: selector];
182
183
184
185
186
187
188





189
188
189
190
191
192
193
194
195
196
197
198
199
200







+
+
+
+
+

-  (void)setValue: (id)value
  forUndefinedKey: (OFString*)key
{
	@throw [OFUndefinedKeyException exceptionWithObject: self
							key: key
						      value: value];
}

- (void)setNilValueForKey: (OFString*)key
{
	@throw [OFInvalidArgumentException exception];
}
@end

Modified tests/OFObjectTests.m from [e7dc8eb450] to [e6767683b4].

16
17
18
19
20
21
22

23
24
25
26
27
28
29
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30







+








#include "config.h"

#import "OFString.h"
#import "OFNumber.h"
#import "OFAutoreleasePool.h"

#import "OFInvalidArgumentException.h"
#import "OFMemoryNotPartOfObjectException.h"
#import "OFOutOfMemoryException.h"
#import "OFUndefinedKeyException.h"

#import "TestsAppDelegate.h"

#if (defined(OF_DRAGONFLYBSD) && defined(__LP64__)) || defined(OF_NINTENDO_3DS)
250
251
252
253
254
255
256




257
258
259
260
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265







+
+
+
+




	    [m unsignedCharValue] == 60 &&
	    [m unsignedShortValue] == 70 &&
	    [m unsignedIntValue] == 80 &&
	    [m unsignedLongValue] == 90 &&
	    [m unsignedLongLongValue] == 100 &&
	    [m floatValue] == 110 &&
	    [m doubleValue] == 120)

	EXPECT_EXCEPTION(@"Catch -[setValue:forKey:] with nil key for scalar",
	    OFInvalidArgumentException, [m setValue: nil
					     forKey: @"intValue"])

	[pool drain];
}
@end