|
|
|
@ -14713,20 +14713,35 @@ const UPB_DESC(FeatureSet*) |
|
|
|
|
size_t n; |
|
|
|
|
const UPB_DESC(FeatureSetDefaults_FeatureSetEditionDefault)* const* d = |
|
|
|
|
UPB_DESC(FeatureSetDefaults_defaults)(defaults, &n); |
|
|
|
|
const UPB_DESC(FeatureSet)* ret = NULL; |
|
|
|
|
const UPB_DESC(FeatureSetDefaults_FeatureSetEditionDefault)* result = NULL; |
|
|
|
|
for (size_t i = 0; i < n; i++) { |
|
|
|
|
if (UPB_DESC(FeatureSetDefaults_FeatureSetEditionDefault_edition)(d[i]) > |
|
|
|
|
edition) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
ret = UPB_DESC(FeatureSetDefaults_FeatureSetEditionDefault_features)(d[i]); |
|
|
|
|
result = d[i]; |
|
|
|
|
} |
|
|
|
|
if (ret == NULL) { |
|
|
|
|
if (result == NULL) { |
|
|
|
|
_upb_DefBuilder_Errf(ctx, "No valid default found for edition %s", |
|
|
|
|
upb_FileDef_EditionName(edition)); |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
// Merge the fixed and overridable features to get the edition's default
|
|
|
|
|
// feature set.
|
|
|
|
|
const UPB_DESC(FeatureSet)* fixed = UPB_DESC( |
|
|
|
|
FeatureSetDefaults_FeatureSetEditionDefault_fixed_features)(result); |
|
|
|
|
const UPB_DESC(FeatureSet)* overridable = UPB_DESC( |
|
|
|
|
FeatureSetDefaults_FeatureSetEditionDefault_overridable_features)(result); |
|
|
|
|
if (!fixed && !overridable) { |
|
|
|
|
_upb_DefBuilder_Errf(ctx, "No valid default found for edition %s", |
|
|
|
|
upb_FileDef_EditionName(edition)); |
|
|
|
|
return NULL; |
|
|
|
|
} else if (!fixed) { |
|
|
|
|
return overridable; |
|
|
|
|
} |
|
|
|
|
return _upb_DefBuilder_DoResolveFeatures(ctx, fixed, overridable, |
|
|
|
|
/*is_implicit=*/true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Allocate and initialize one file def, and add it to the context object.
|
|
|
|
|