Unverified Commit 6552c5af authored by Thomas Van Lenten's avatar Thomas Van Lenten Committed by GitHub

Merge pull request #3884 from dmaclach/unsafe

Simplify getter/setter method implementations
parents af5ad246 4ba30923
...@@ -2998,7 +2998,10 @@ typedef struct ResolveIvarAccessorMethodResult { ...@@ -2998,7 +2998,10 @@ typedef struct ResolveIvarAccessorMethodResult {
SEL encodingSelector; SEL encodingSelector;
} ResolveIvarAccessorMethodResult; } ResolveIvarAccessorMethodResult;
static void ResolveIvarGet(GPBFieldDescriptor *field, // |field| can be __unsafe_unretained because they are created at startup
// and are essentially global. No need to pay for retain/release when
// they are captured in blocks.
static void ResolveIvarGet(__unsafe_unretained GPBFieldDescriptor *field,
ResolveIvarAccessorMethodResult *result) { ResolveIvarAccessorMethodResult *result) {
GPBDataType fieldDataType = GPBGetFieldDataType(field); GPBDataType fieldDataType = GPBGetFieldDataType(field);
switch (fieldDataType) { switch (fieldDataType) {
...@@ -3040,7 +3043,8 @@ static void ResolveIvarGet(GPBFieldDescriptor *field, ...@@ -3040,7 +3043,8 @@ static void ResolveIvarGet(GPBFieldDescriptor *field,
} }
} }
static void ResolveIvarSet(GPBFieldDescriptor *field, // See comment about __unsafe_unretained on ResolveIvarGet.
static void ResolveIvarSet(__unsafe_unretained GPBFieldDescriptor *field,
GPBFileSyntax syntax, GPBFileSyntax syntax,
ResolveIvarAccessorMethodResult *result) { ResolveIvarAccessorMethodResult *result) {
GPBDataType fieldDataType = GPBGetFieldDataType(field); GPBDataType fieldDataType = GPBGetFieldDataType(field);
...@@ -3084,9 +3088,10 @@ static void ResolveIvarSet(GPBFieldDescriptor *field, ...@@ -3084,9 +3088,10 @@ static void ResolveIvarSet(GPBFieldDescriptor *field,
// NOTE: hasOrCountSel_/setHasSel_ will be NULL if the field for the given // NOTE: hasOrCountSel_/setHasSel_ will be NULL if the field for the given
// message should not have has support (done in GPBDescriptor.m), so there is // message should not have has support (done in GPBDescriptor.m), so there is
// no need for checks here to see if has*/setHas* are allowed. // no need for checks here to see if has*/setHas* are allowed.
ResolveIvarAccessorMethodResult result = {NULL, NULL}; ResolveIvarAccessorMethodResult result = {NULL, NULL};
for (GPBFieldDescriptor *field in descriptor->fields_) {
// See comment about __unsafe_unretained on ResolveIvarGet.
for (__unsafe_unretained GPBFieldDescriptor *field in descriptor->fields_) {
BOOL isMapOrArray = GPBFieldIsMapOrArray(field); BOOL isMapOrArray = GPBFieldIsMapOrArray(field);
if (!isMapOrArray) { if (!isMapOrArray) {
// Single fields. // Single fields.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment