MCPcopy Create free account
hub / github.com/boostorg/build / regmatch

Function regmatch

v2/engine/regexp.c:901–1097  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

899 */
900
901static int /* 0 failure, 1 success */
902regmatch( char * prog )
903{
904 char * scan; /* Current node. */
905 char * next; /* Next node. */
906
907 scan = prog;
908#ifdef DEBUG
909 if (scan != NULL && regnarrate)
910 fprintf(stderr, "%s(\n", regprop(scan));
911#endif
912 while (scan != NULL) {
913#ifdef DEBUG
914 if (regnarrate)
915 fprintf(stderr, "%s...\n", regprop(scan));
916#endif
917 next = regnext(scan);
918
919 switch (OP(scan)) {
920 case BOL:
921 if (reginput != regbol)
922 return(0);
923 break;
924 case EOL:
925 if (*reginput != '\0')
926 return(0);
927 break;
928 case WORDA:
929 /* Must be looking at a letter, digit, or _ */
930 if ((!isalnum(*reginput)) && *reginput != '_')
931 return(0);
932 /* Prev must be BOL or nonword */
933 if (reginput > regbol &&
934 (isalnum(reginput[-1]) || reginput[-1] == '_'))
935 return(0);
936 break;
937 case WORDZ:
938 /* Must be looking at non letter, digit, or _ */
939 if (isalnum(*reginput) || *reginput == '_')
940 return(0);
941 /* We don't care what the previous char was */
942 break;
943 case ANY:
944 if (*reginput == '\0')
945 return(0);
946 reginput++;
947 break;
948 case EXACTLY: {
949 register int len;
950 register char *opnd;
951
952 opnd = OPERAND(scan);
953 /* Inline the first character, for speed. */
954 if (*opnd != *reginput)
955 return(0);
956 len = strlen(opnd);
957 if (len > 1 && strncmp(opnd, reginput, len) != 0)
958 return(0);

Callers 1

regtryFunction · 0.85

Calls 4

regpropFunction · 0.85
regnextFunction · 0.85
regrepeatFunction · 0.85
regerrorFunction · 0.85

Tested by

no test coverage detected