MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxCharSetRange

Function fxCharSetRange

xs/sources/xsre.c:1096–1146  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1094}
1095
1096void* fxCharSetRange(txPatternParser* parser, txCharSet* set1, txCharSet* set2)
1097{
1098 if ((set1->strings == C_NULL) && (set2->strings == C_NULL)) {
1099 txCharSet* result;
1100 if (set1->characters[0] == 0)
1101 return set2;
1102 if (set2->characters[0] == 0)
1103 return set1;
1104 if ((set1->characters[0] != 2) || (set2->characters[0] != 2))
1105 fxPatternParserError(parser, gxErrors[mxInvalidRange]);
1106 if ((set1->characters[1] + 1 != set1->characters[2]) || (set2->characters[1] + 1 != set2->characters[2]))
1107 fxPatternParserError(parser, gxErrors[mxInvalidRange]);
1108 if ((set1->characters[1] > set2->characters[1]))
1109 fxPatternParserError(parser, gxErrors[mxInvalidRange]);
1110 if (parser->flags & XS_REGEXP_I) {
1111 txBoolean flag = (parser->flags & XS_REGEXP_UV) ? 1 : 0;
1112 txInteger begin = set1->characters[1];
1113 txInteger end = set2->characters[1];
1114 struct {
1115 txTermPart;
1116 txInteger stringCount;
1117 txString* strings;
1118 txInteger characters[3];
1119 } _set;
1120 txCharSet* set = (txCharSet*)&_set;
1121 set->next = C_NULL;
1122 set->dispatch.code = fxCharSetCode;
1123 set->stringCount = 0;
1124 set->strings = C_NULL;
1125 set->characters[0] = 2;
1126 result = fxCharSetEmpty(parser);
1127 while (begin <= end) {
1128 set->characters[1] = fxCharCaseCanonicalize(begin, flag);
1129 set->characters[2] = set->characters[1] + 1;
1130 result = fxCharSetCombine(parser, result, set, mxCharSetUnionOp);
1131 begin++;
1132 }
1133 }
1134 else {
1135 result = fxPatternParserCreateTerm(parser, sizeof(txCharSet) + (2 * sizeof(txInteger)), fxCharSetMeasure);
1136 result->stringCount = 0;
1137 result->strings = C_NULL;
1138 result->characters[0] = 2;
1139 result->characters[1] = set1->characters[1];
1140 result->characters[2] = set2->characters[2];
1141 }
1142 return result;
1143 }
1144 fxPatternParserError(parser, gxErrors[mxInvalidPattern]);
1145 return C_NULL;
1146}
1147
1148void* fxCharSetSingle(txPatternParser* parser, txInteger character)
1149{

Callers 2

fxCharSetExpressionFunction · 0.85
fxCharSetParseListFunction · 0.85

Calls 5

fxPatternParserErrorFunction · 0.85
fxCharSetEmptyFunction · 0.85
fxCharCaseCanonicalizeFunction · 0.85
fxCharSetCombineFunction · 0.85

Tested by

no test coverage detected