[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: GDL2: prototypes and EOAttribute.m
From: |
Mark Clements |
Subject: |
Re: GDL2: prototypes and EOAttribute.m |
Date: |
Mon, 1 May 2017 21:25:07 +0000 |
I have had a first attempt at getting the testsuite working with GDL2.
It seems to have been a while since the GDL2 testsuite was updated (see
patch below). Suggested changes include:
+ Bug fixes on labelling
+ Change -cString to -UTF8String
+ Change sel_eq to sel_isEqual
+ Change #include "../ObjectTesting.h" to #include "ObjectTesting.h"
+ Change ADDITIONAL_NATIVE_LIBS+=EOControl EOAccess to
ADDITIONAL_NATIVE_LIBS+=EOAccess EOControl (?)
+ Comment out TEST_EXCEPTION: is this still defined?
This gave me 1031 passed tests, 10 failed sets, 9 failed tests and 5
failed files.
I was not certain whether the failed tests indicate that the Key Value
Coding mechanism is broken. Any guidance on this point would be welcomed.
Kindly, Mark.
Index: gdl2/Bug8993/test00.m
===================================================================
--- gdl2/Bug8993/test00.m (revision 40495)
+++ gdl2/Bug8993/test00.m (working copy)
@@ -93,7 +93,7 @@
[ec saveChanges];
END_SET("Bug8993 preperation");
- START_SET(Bug8993);
+ START_SET("Bug8993");
[ec deleteObject: objS];
START_TEST(YES);
[ec saveChanges];
Index: gdl2/EOAdaptor/EOAdaptorEncoding.m
===================================================================
--- gdl2/EOAdaptor/EOAdaptorEncoding.m (revision 40495)
+++ gdl2/EOAdaptor/EOAdaptorEncoding.m (working copy)
@@ -41,7 +41,7 @@
/* Now we have the testcases for the installed Adaptors. */
- START_SET(YES);
+ START_SET("EOAdaptorEncoding");
adaptor = [EOAdaptor adaptorWithName:[[EOAdaptor
availableAdaptorNames] lastObject]];
map = [@"{"
@@ -98,7 +98,7 @@
databaseEncoding = [adaptor databaseEncoding];
result = result && (expectedEncoding == databaseEncoding ? YES : NO);
}
- END_TEST(result, [@"-[EOAdaptor databaseEncoding]" cString]);
+ END_TEST(result, "-[EOAdaptor databaseEncoding]");
END_SET("EOAdaptorEncoding");
Index: gdl2/EOAdaptor/EOAdaptorTypes00.m
===================================================================
--- gdl2/EOAdaptor/EOAdaptorTypes00.m (revision 40495)
+++ gdl2/EOAdaptor/EOAdaptorTypes00.m (working copy)
@@ -90,7 +90,7 @@
START_TEST(YES)
adaptorNamesArr = [EOAdaptor availableAdaptorNames];
result = [adaptorNamesArr containsObject: currAdaptorName];
- END_TEST(result, [[NSString
stringWithFormat:@"availableAdaptorNames contains '%@'",
currAdaptorName] cString]);
+ END_TEST(result, "availableAdaptorNames contains '%s'",
[currAdaptorName UTF8String]);
currAdaptor = [EOAdaptor adaptorWithName: currAdaptorName];
[currAdaptor setConnectionDictionary: [model connectionDictionary]];
Index: gdl2/EODataSource/test00.m
===================================================================
--- gdl2/EODataSource/test00.m (revision 40495)
+++ gdl2/EODataSource/test00.m (working copy)
@@ -103,7 +103,7 @@
START_TEST(YES);
[detailDS qualifyWithRelationshipKey:@"orderPos" ofObject: tmp1];
- START_SET("-[EODetailDataSource qualifyWithRelationshipKey:ofObject:]"
+ START_SET("-[EODetailDataSource qualifyWithRelationshipKey:ofObject:]");
result = ([detailDS masterObject] == tmp1);
END_SET("-[EODetailDataSource qualifyWithRelationshipKey:ofObject:]"
"result evaluation");
Index: gdl2/EODisplayGroup/EODisplayGroup00.m
===================================================================
--- gdl2/EODisplayGroup/EODisplayGroup00.m (revision 40495)
+++ gdl2/EODisplayGroup/EODisplayGroup00.m (working copy)
@@ -44,7 +44,7 @@
if (![obj isKindOfClass: [self class]])
return NO;
- return sel_eq(_selector, (SEL)((EOKeyValueQualifier *)obj)->_selector)
+ return sel_isEqual(_selector, (SEL)((EOKeyValueQualifier
*)obj)->_selector)
&& [_key testIsEqual:((EOKeyValueQualifier *)obj)->_key]
&& [_value testIsEqual:((EOKeyValueQualifier *)obj)->_value];
}
Index: gdl2/EOKeyValueCoding/EOKeyValueCoding00.m
===================================================================
--- gdl2/EOKeyValueCoding/EOKeyValueCoding00.m (revision 40495)
+++ gdl2/EOKeyValueCoding/EOKeyValueCoding00.m (working copy)
@@ -229,14 +229,14 @@
END_TEST(result, "-[NSObject(EOKeyValueCoding) unableToSetNilForKey:]");
obj = [EOKVCTester new];
- TEST_EXCEPTION(([obj takeValue: null forKey: @"other_int_iv"]); ,
- NSInvalidArgumentException, YES,
- "-[NSObject(EOKeyValueCoding) unableToSetNilForKey:]"
- " raise (EONull)");
- TEST_EXCEPTION(([obj takeValue: nil forKey: @"other_int_iv"]); ,
- NSInvalidArgumentException, YES,
- "-[NSObject(EOKeyValueCoding) unableToSetNilForKey:]"
- " raise (nil)");
+ // TEST_EXCEPTION(([obj takeValue: null forKey: @"other_int_iv"]); ,
+ // NSInvalidArgumentException, YES,
+ // "-[NSObject(EOKeyValueCoding) unableToSetNilForKey:]"
+ // " raise (EONull)");
+ // TEST_EXCEPTION(([obj takeValue: nil forKey: @"other_int_iv"]); ,
+ // NSInvalidArgumentException, YES,
+ // "-[NSObject(EOKeyValueCoding) unableToSetNilForKey:]"
+ // " raise (nil)");
/* NSArray */
START_TEST(YES);
Index: gdl2/EOModel/test00.m
===================================================================
--- gdl2/EOModel/test00.m (revision 40495)
+++ gdl2/EOModel/test00.m (working copy)
@@ -243,7 +243,7 @@
plist = [NSMutableDictionary dictionary];
[model encodeTableOfContentsIntoPropertyList: plist];
- START_SET("-[EOModel encodeTableOfContentsIntoPropertyList:]"
+ START_SET("-[EOModel encodeTableOfContentsIntoPropertyList:]");
{
BOOL local;
result = NO;
Index: gdl2/EOModel/test01.m
===================================================================
--- gdl2/EOModel/test01.m (revision 40495)
+++ gdl2/EOModel/test01.m (working copy)
@@ -62,7 +62,7 @@
END_TEST(result, "%s -validateName: with invalid name '(nil)",
className);
END_SET("-validateName with invalid names");
- START_SET("%s -setName: with valid names", className);
+ START_SET("-setName: with valid names");
for (i = 0; i < [validNames count]; i++)
{
NSString *aName = [validNames objectAtIndex:i];
@@ -78,9 +78,9 @@
END_TEST(result, "%s -setName: with valid name '%s'", className,
[aName cString]);
}
- END_SET("%s -setName: with valid names", className);
+ END_SET("-setName: with valid names");
- START_SET("%s -setName: with invalid names", className);
+ START_SET("-setName: with invalid names");
for (i = 0; i < [invalidNames count]; i++)
{
NSString *aName = [invalidNames objectAtIndex:i];
@@ -95,7 +95,7 @@
END_TEST(result, "%s -setName: with invalid name '%s'",
className, [aName cString]);
}
- END_SET("%s -setName: with invalid names", className);
+ END_SET("-setName: with invalid names");
}
Index: gdl2/EOQualifier/EOKeyComparisonQualifier00.m
===================================================================
--- gdl2/EOQualifier/EOKeyComparisonQualifier00.m (revision 40495)
+++ gdl2/EOQualifier/EOKeyComparisonQualifier00.m (working copy)
@@ -43,7 +43,7 @@
EOQualifierOperatorGreaterThan
rightKey: @"distributed"];
result = [[qual leftKey] isEqual: @"invented"];
- result = result && sel_eq([qual selector],
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorGreaterThan);
result = result && [[qual rightKey] isEqual: @"distributed"];
END_TEST(result,
Index: gdl2/EOQualifier/EOKeyValueQualifier00.m
===================================================================
--- gdl2/EOQualifier/EOKeyValueQualifier00.m (revision 40495)
+++ gdl2/EOQualifier/EOKeyValueQualifier00.m (working copy)
@@ -42,7 +42,7 @@
EOQualifierOperatorGreaterThan
value: @"PostgresSQL"];
result = [[qual key] isEqual: @"name"];
- result = result && sel_eq([qual selector],
EOQualifierOperatorGreaterThan);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorGreaterThan);
result = result && [[qual value] isEqual: @"PostgresSQL"];
END_TEST(result,
"-[EOKeyValueQualifier initWithKey:operatorSelector:value:]");
Index: gdl2/EOQualifier/EOQualifier00.m
===================================================================
--- gdl2/EOQualifier/EOQualifier00.m (revision 40495)
+++ gdl2/EOQualifier/EOQualifier00.m (working copy)
@@ -57,28 +57,28 @@
END_TEST(result, "+[EOQualifier relationalQualifierOperators]");
START_TEST(YES);
- result = sel_eq([qCls operatorSelectorForString: @"="],
+ result = sel_isEqual([qCls operatorSelectorForString: @"="],
EOQualifierOperatorEqual);
- result = result && sel_eq([qCls operatorSelectorForString: @"=="],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @"=="],
EOQualifierOperatorEqual);
- result = result && sel_eq([qCls operatorSelectorForString: @"!="],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @"!="],
EOQualifierOperatorNotEqual);
- result = result && sel_eq([qCls operatorSelectorForString: @"<>"],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @"<>"],
EOQualifierOperatorNotEqual);
- result = result && sel_eq([qCls operatorSelectorForString: @"<"],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @"<"],
EOQualifierOperatorLessThan);
- result = result && sel_eq([qCls operatorSelectorForString: @">"],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @">"],
EOQualifierOperatorGreaterThan);
- result = result && sel_eq([qCls operatorSelectorForString: @"<="],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @"<="],
EOQualifierOperatorLessThanOrEqualTo);
- result = result && sel_eq([qCls operatorSelectorForString: @">="],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @">="],
EOQualifierOperatorGreaterThanOrEqualTo);
- result = result && sel_eq([qCls operatorSelectorForString: @"like"],
+ result = result && sel_isEqual([qCls operatorSelectorForString: @"like"],
EOQualifierOperatorLike);
- result = result && sel_eq([qCls operatorSelectorForString:
+ result = result && sel_isEqual([qCls operatorSelectorForString:
@"caseInsensitiveLike"],
EOQualifierOperatorCaseInsensitiveLike);
- result = result && sel_eq([qCls operatorSelectorForString:
@"doesContain"],
+ result = result && sel_isEqual([qCls operatorSelectorForString:
@"doesContain"],
EOQualifierOperatorContains);
END_TEST(result, "+[EOQualifier operatorSelectorForString:]");
@@ -124,7 +124,7 @@
result = [qual isKindOfClass: [EOKeyValueQualifier class]];
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual: @"constant"];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = 'constant''");
@@ -133,7 +133,7 @@
result = [qual isKindOfClass: [EOKeyComparisonQualifier class]];
result = result && [[qual leftKey] isEqual: @"key"];
result = result && [[qual rightKey] isEqual: @"value"];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = value'");
@@ -142,7 +142,7 @@
result = [qual isKindOfClass: [EOKeyComparisonQualifier class]];
result = result && [[qual leftKey] isEqual: @"key"];
result = result && [[qual rightKey] isEqual: @"value"];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'(key = value)'");
@@ -151,7 +151,7 @@
result = [qual isKindOfClass: [EOKeyValueQualifier class]];
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual: [NSNumber numberWithInt: 25]];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = 25'");
@@ -160,7 +160,7 @@
result = [qual isKindOfClass: [EOKeyValueQualifier class]];
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual: [NSNumber numberWithInt: -25]];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = -25'");
@@ -169,7 +169,7 @@
result = [qual isKindOfClass: [EOKeyValueQualifier class]];
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual: [NSNumber numberWithDouble:
-12.8]];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = -12.8'");
@@ -178,7 +178,7 @@
result = [qual isKindOfClass: [EOKeyValueQualifier class]];
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual: [NSNumber numberWithInt: 25]];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = (NSNumber)'25''");
@@ -187,7 +187,7 @@
result = [qual isKindOfClass: [EOKeyValueQualifier class]];
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual: [NSNumber numberWithFloat:
25.5]];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = (NSNumber)'25.5''");
@@ -197,7 +197,7 @@
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value]
isEqual: [NSNumber numberWithDouble: 42.94967296]];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = (NSNumber)'42.94967296''");
@@ -207,7 +207,7 @@
result = [qual isKindOfClass: [EOKeyValueQualifier class]];
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual: tmp];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"@'key = (NSDecimalNumber)'25.1''");
Index: gdl2/EOQualifier/EOQualifier02.m
===================================================================
--- gdl2/EOQualifier/EOQualifier02.m (revision 40495)
+++ gdl2/EOQualifier/EOQualifier02.m (working copy)
@@ -51,7 +51,7 @@
result = result && [[qual key] isEqual: @"key"];
result = result && [[qual value] isEqual:
[@"\"const\\U00C0\\U038F\\U4E20\"" propertyList]];
- result = result && sel_eq([qual selector], EOQualifierOperatorEqual);
+ result = result && sel_isEqual([qual selector],
EOQualifierOperatorEqual);
END_TEST(result, "+[EOQualifier qualifierWithQualifierFormat:] "
"Unicode: @'key = 'const$$$''");
Index: gdl2/EOSharedEditingContext/EOSharedEditingContext01.m
===================================================================
--- gdl2/EOSharedEditingContext/EOSharedEditingContext01.m (revision
40495)
+++ gdl2/EOSharedEditingContext/EOSharedEditingContext01.m (working copy)
@@ -77,13 +77,13 @@
END_TEST(result, "-[EOSharedEditingContext
objectsWithFetchSpecification:editingContext:]");
obj = [tmp lastObject];
- TEST_EXCEPTION([obj takeValue: @"Software" forKey: @"name"];,
- NSInternalInconsistencyException, YES,
- "object in EOSharedEditingContext may not be altered");
+ // TEST_EXCEPTION([obj takeValue: @"Software" forKey: @"name"];,
+ // NSInternalInconsistencyException, YES,
+ // "object in EOSharedEditingContext may not be altered");
- TEST_EXCEPTION([sec deleteObject: obj];,
- NSInternalInconsistencyException, YES,
- "object in EOSharedEditingContext may not be deleted");
+ // TEST_EXCEPTION([sec deleteObject: obj];,
+ // NSInternalInconsistencyException, YES,
+ // "object in EOSharedEditingContext may not be deleted");
START_TEST(YES);
tmp = [ec1 objectsWithFetchSpecification: fs editingContext: ec1];
Index: gdl2/EOSortOrdering/EOSortOrdering00.m
===================================================================
--- gdl2/EOSortOrdering/EOSortOrdering00.m (revision 40495)
+++ gdl2/EOSortOrdering/EOSortOrdering00.m (working copy)
@@ -55,19 +55,19 @@
selector: EOCompareDescending];
result = [[sOrd1 key] isEqual: @"name"];
- result = result && sel_eq([sOrd1 selector],
+ result = result && sel_isEqual([sOrd1 selector],
EOCompareCaseInsensitiveAscending);
result = result && [[sOrd2 key] isEqual: @"details"];
- result = result && sel_eq([sOrd2 selector],
+ result = result && sel_isEqual([sOrd2 selector],
EOCompareCaseInsensitiveDescending);
result = result && [[sOrd3 key] isEqual: @"number"];
- result = result && sel_eq([sOrd3 selector],
+ result = result && sel_isEqual([sOrd3 selector],
EOCompareAscending);
result = result && [[sOrd4 key] isEqual: @"date"];
- result = result && sel_eq([sOrd4 selector],
+ result = result && sel_isEqual([sOrd4 selector],
EOCompareDescending);
END_TEST(result, "-[EOSortOrdering initWithKey:selector:]");
Index: gdl2/GDL2Testing.h
===================================================================
--- gdl2/GDL2Testing.h (revision 40495)
+++ gdl2/GDL2Testing.h (working copy)
@@ -3,7 +3,7 @@
#ifdef GNUSTEP_TESTING
#include <GNUstepBase/GSTesting.h>
#else
-#include "../ObjectTesting.h"
+#include "ObjectTesting.h"
#endif
#include <Foundation/Foundation.h>
Index: gdl2/GNUmakefile.super
===================================================================
--- gdl2/GNUmakefile.super (revision 40495)
+++ gdl2/GNUmakefile.super (working copy)
@@ -1,3 +1,3 @@
include $(GNUSTEP_MAKEFILES)/Auxiliary/gdl2.make
-ADDITIONAL_NATIVE_LIBS+=EOControl EOAccess
-ADDITIONAL_NATIVE_LIB_DIRS+=EOControl EOAccess
+ADDITIONAL_NATIVE_LIBS+=EOAccess EOControl
+ADDITIONAL_NATIVE_LIB_DIRS+=EOAccess EOControl
On 04/28/2017 01:00 PM, Matt Rice wrote:
> On Fri, Apr 28, 2017 at 2:21 AM, Mark Clements <mark.clements@ki.se> wrote:
>> I am new to Objective C and GNUstep - and interested in GDL2.
>>
>> Using https://github.com/gnustep/gdl2 and gcc 4.8.4, I have been working
>> with the Trading example with PostgreSQL and ran into a bug:
>>
>> Examples/Trading/obj/createTradingDB: Uncaught exception
>> PostgreSQLException, reason: SQL expression 'CREATE TABLE TST_CUSTOMER
>> (GRPID (null), NAME (null)(30) NOT NULL, PID (null) NOT NULL)' caused ERROR:
>> syntax error at or near "("
>> LINE 1: CREATE TABLE TST_CUSTOMER (GRPID (null), NAME (null)(30) NOT...
>> ^
>> In looking for a bug fix, I was - and am - confused by how prototypes are
>> used in EOAttribute.m. The documentation and comments suggest that the
>> getters use _prototype, but this is not implemented in code. Moreover, does
>> -(void)_updateFromPrototype actually update the values in the EOAttribute
>> class? The following patch seems to work for this example - but is it
>> correct?
> Hi Mark,
>
> It has been a fairly long time since i've much looked at the GDL2 code base,
> So i am probably not going to be of much help, in the correctness
> however _updateFromPrototype does at least _attempt_ to update the values.
>
> EOAttribute.m:2281 [self takeValuesFromDictionary:notOverridenKV];
>
> This should result in the various -[EOAttribute set*:] methods being
> called (eventually after routing through the Key Value Coding
> mechanism.
>
> It however wouldn't surprise me if this were broken, GDL2 was somewhat
> reliant on an older version of KVC, and there has been various API
> churn in this regard that came from Apple...
>
>> As a second question: what is a canonical approach for running
>> createTradingDB without make install? The incantation I have been using is:
>>
>> TEST_ADAPTOR=PostgreSQL
>> LD_LIBRARY_PATH=EOAccess/obj:EOControl/obj:Examples/Trading/obj:$LD_LIBRARY_PATH
>> Examples/Trading/obj/createTradingDB --GNU-Debug=gsdb
>>
>> Kindly, Mark.
> This in particular is a very hairy subject, due to GDL2's reliance on
> bundle loading etc,
> Do you have the GDL2 adaptors installed in the framework in gnusteps
> root somewhere? (Otherwise I would be surprised if this worked due to
> the way adaptors are located),
>
> If so, take care to check if you are using GDL2 libraries from one
> compile, (in the local directory via LD_LIBRARY_PATH), and adaptors
> from another (In the frameworks/ directory)
>
> I would recommend putting the glibc (assuming glibc?) LD_DEBUG="files"
> environment variable, to check and make sure that you are not mixing
> libraries from various compiles
>
> IMO this is quite unfortunate,
>
> There is also this repository here containing the testsuite.
>
> http://svn.gna.org/viewcvs/gnustep/tests/testsuite/trunk/gdl2/
>
> Overall, i'm not sure about the patch (It sounds like this should be
> happening in the takeValue* call discussed above, rather than the
> getter, and that something has gone awry there).
>
> Hope this helps.
>
>
>
>> diff --git a/EOAccess/EOAttribute.m b/EOAccess/EOAttribute.m
>> index df9b36e..58255ea 100644
>> --- a/EOAccess/EOAttribute.m
>> +++ b/EOAccess/EOAttribute.m
>> @@ -511,17 +511,29 @@ static NSArray* staticPrototypeKeys=nil;
>> */
>> - (int)scale
>> {
>> - return _scale;
>> + if (_scale>0)
>> + return _scale;
>> + else if (_prototype && [_prototype scale])
>> + return [_prototype scale];
>> + else return 0;
>> }
>>
>> - (unsigned)precision
>> {
>> - return _precision;
>> + if (_precision>0)
>> + return _precision;
>> + else if (_prototype && [_prototype precision])
>> + return [_prototype precision];
>> + else return 0;
>> }
>>
>> - (unsigned)width
>> {
>> - return _width;
>> + if (_width>0)
>> + return _width;
>> + else if (_prototype && [_prototype width])
>> + return [_prototype width];
>> + else return 0;
>> }
>>
>> - (id)parent
>> @@ -636,6 +648,8 @@ static NSArray* staticPrototypeKeys=nil;
>> return _valueClassName;
>> else if ([self isFlattened])
>> return [[_definitionArray realAttribute] valueClassName];
>> + else if (_prototype && [_prototype valueClassName])
>> + return [_prototype valueClassName];
>> else
>> return nil;
>> }
>> @@ -656,6 +670,8 @@ static NSArray* staticPrototypeKeys=nil;
>> return _externalType;
>> else if ([self isFlattened])
>> return [[_definitionArray realAttribute] externalType];
>> + else if (_prototype && [_prototype externalType])
>> + return [_prototype externalType];
>> else
>> return nil;
>> }
>>
>>
>> _______________________________________________
>> Discuss-gnustep mailing list
>> Discuss-gnustep@gnu.org
>> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
- Re: GDL2: prototypes and EOAttribute.m,
Mark Clements <=
Re: GDL2: prototypes and EOAttribute.m, Matt Rice, 2017/05/02