JavaScript: Move getAMatchedConstant(RegExpTerm) into the library.

This commit is contained in:
Max Schaefer
2019-11-05 12:15:39 +00:00
parent a5a5debdc7
commit 12ea81af9c
2 changed files with 14 additions and 14 deletions

View File

@@ -21,24 +21,11 @@ string metachar() { result = "'\"\\&<>\n\r\t*|{}[]%$".charAt(_) }
/** Gets a string matched by `e` in a `replace` call. */ /** Gets a string matched by `e` in a `replace` call. */
string getAMatchedString(Expr e) { string getAMatchedString(Expr e) {
result = getAMatchedConstant(e.(RegExpLiteral).getRoot()).getValue() result = e.(RegExpLiteral).getRoot().getAMatchedString()
or or
result = e.getStringValue() result = e.getStringValue()
} }
/** Gets a constant matched by `t`. */
RegExpConstant getAMatchedConstant(RegExpTerm t) {
result = t
or
result = getAMatchedConstant(t.(RegExpAlt).getAlternative())
or
result = getAMatchedConstant(t.(RegExpGroup).getAChild())
or
exists(RegExpCharacterClass recc | recc = t and not recc.isInverted() |
result = getAMatchedConstant(recc.getAChild())
)
}
/** Holds if `t` is simple, that is, a union of constants. */ /** Holds if `t` is simple, that is, a union of constants. */
predicate isSimple(RegExpTerm t) { predicate isSimple(RegExpTerm t) {
t instanceof RegExpConstant t instanceof RegExpConstant

View File

@@ -185,6 +185,11 @@ class RegExpTerm extends Locatable, @regexpterm {
* into account. * into account.
*/ */
string getConstantValue() { none() } string getConstantValue() { none() }
/**
* Gets a string that is matched by this regular-expression term.
*/
string getAMatchedString() { result = getConstantValue() }
} }
/** /**
@@ -280,6 +285,8 @@ class RegExpAlt extends RegExpTerm, @regexp_alt {
int getNumAlternative() { result = getNumChild() } int getNumAlternative() { result = getNumChild() }
override predicate isNullable() { getAlternative().isNullable() } override predicate isNullable() { getAlternative().isNullable() }
override string getAMatchedString() { result = getAlternative().getAMatchedString() }
} }
/** /**
@@ -574,6 +581,8 @@ class RegExpGroup extends RegExpTerm, @regexp_group {
override predicate isNullable() { getAChild().isNullable() } override predicate isNullable() { getAChild().isNullable() }
override string getConstantValue() { result = getAChild().getConstantValue() } override string getConstantValue() { result = getAChild().getConstantValue() }
override string getAMatchedString() { result = getAChild().getAMatchedString() }
} }
/** /**
@@ -759,6 +768,10 @@ class RegExpCharacterClass extends RegExpTerm, @regexp_char_class {
predicate isInverted() { isInverted(this) } predicate isInverted() { isInverted(this) }
override predicate isNullable() { none() } override predicate isNullable() { none() }
override string getAMatchedString() {
not isInverted() and result = getAChild().getAMatchedString()
}
} }
/** /**