@@ -930,9 +930,10 @@ const Pattern& MFDataModel::getPattern() const {
930930 return *(std::get_if<Pattern>(&body));
931931}
932932
933+ // Returns nullptr if no bindings
933934const Binding* MFDataModel::getLocalVariablesInternal () const {
934935 U_ASSERT (!bogus);
935- U_ASSERT (bindings.isValid ());
936+ U_ASSERT (bindingsLen == 0 || bindings.isValid ());
936937 return bindings.getAlias ();
937938}
938939
@@ -948,9 +949,10 @@ const Variant* MFDataModel::getVariantsInternal() const {
948949 return std::get_if<Matcher>(&body)->variants .getAlias ();
949950}
950951
952+ // Returns nullptr if no unsupported statements
951953const UnsupportedStatement* MFDataModel::getUnsupportedStatementsInternal () const {
952954 U_ASSERT (!bogus);
953- U_ASSERT (unsupportedStatements. isValid () );
955+ U_ASSERT (unsupportedStatementsLen == 0 || unsupportedStatements != nullptr );
954956 return unsupportedStatements.getAlias ();
955957}
956958
@@ -1056,7 +1058,6 @@ MFDataModel::MFDataModel(const MFDataModel& other) : body(Pattern()) {
10561058 UErrorCode localErrorCode = U_ZERO_ERROR;
10571059
10581060 if (other.hasPattern ()) {
1059- // body.emplace<Pattern>(Pattern(*std::get_if<Pattern>(&other.body)));
10601061 body = *std::get_if<Pattern>(&other.body );
10611062 } else {
10621063 const Expression* otherSelectors = other.getSelectorsInternal ();
@@ -1069,17 +1070,17 @@ MFDataModel::MFDataModel(const MFDataModel& other) : body(Pattern()) {
10691070 bogus = true ;
10701071 return ;
10711072 }
1072- // body.emplace<Matcher>(Matcher(copiedSelectors, numSelectors, copiedVariants, numVariants));
10731073 body = Matcher (copiedSelectors, numSelectors, copiedVariants, numVariants);
10741074 }
10751075
10761076 bindingsLen = other.bindingsLen ;
1077- bindings.adoptInstead (copyArray (other.bindings .getAlias (), bindingsLen, localErrorCode));
1078- if (U_FAILURE (localErrorCode)) {
1079- bogus = true ;
1077+ if (bindingsLen > 0 ) {
1078+ bindings.adoptInstead (copyArray (other.bindings .getAlias (), bindingsLen, localErrorCode));
10801079 }
10811080 unsupportedStatementsLen = other.unsupportedStatementsLen ;
1082- unsupportedStatements.adoptInstead (copyArray (other.unsupportedStatements .getAlias (), unsupportedStatementsLen, localErrorCode));
1081+ if (unsupportedStatementsLen > 0 ) {
1082+ unsupportedStatements.adoptInstead (copyArray (other.unsupportedStatements .getAlias (), unsupportedStatementsLen, localErrorCode));
1083+ }
10831084 if (U_FAILURE (localErrorCode)) {
10841085 bogus = true ;
10851086 }
@@ -1106,9 +1107,14 @@ MFDataModel::MFDataModel(const MFDataModel::Builder& builder, UErrorCode& errorC
11061107
11071108 U_ASSERT (builder.bindings != nullptr );
11081109 bindingsLen = builder.bindings ->size ();
1109- bindings.adoptInstead (copyVectorToArray<Binding>(*builder.bindings , errorCode));
1110+ if (bindingsLen > 0 ) {
1111+ bindings.adoptInstead (copyVectorToArray<Binding>(*builder.bindings , errorCode));
1112+ }
11101113 unsupportedStatementsLen = builder.unsupportedStatements ->size ();
1111- unsupportedStatements.adoptInstead (copyVectorToArray<UnsupportedStatement>(*builder.unsupportedStatements , errorCode));
1114+ if (unsupportedStatementsLen > 0 ) {
1115+ unsupportedStatements.adoptInstead (copyVectorToArray<UnsupportedStatement>(*builder.unsupportedStatements ,
1116+ errorCode));
1117+ }
11121118 if (U_FAILURE (errorCode)) {
11131119 bogus = true ;
11141120 }
0 commit comments