Address review comments

This commit is contained in:
Tom Hvitved
2022-01-24 14:27:42 +01:00
parent 85e1cda81b
commit 2a972dc045
5 changed files with 29 additions and 21 deletions

View File

@@ -77,12 +77,12 @@ private int parseInteger(Ruby::Integer i) {
v = values.indexOf(c.toLowerCase()) and
exp = str.replaceAll("_", "").length() - index - 1
|
v * values.length().pow(exp)
v * values.length().pow(exp).floor()
)
)
}
private class RequiredIntegerConstantValue extends RequiredConstantValue {
private class RequiredIntegerLiteralConstantValue extends RequiredConstantValue {
override predicate requiredInt(int i) { i = any(IntegerLiteral il).getValue() }
}
@@ -277,7 +277,7 @@ private class FalseLiteral extends BooleanLiteral, TFalseLiteral {
final override predicate isFalse() { any() }
}
private class RequiredStringConstantValue extends RequiredConstantValue {
private class RequiredEncodingLiteralConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) { s = "UTF-8" }
}
@@ -293,7 +293,7 @@ class EncodingLiteral extends Literal, TEncoding {
override ConstantValue::ConstantStringValue getConstantValue() { result.isString("UTF-8") }
}
private class RequiredIntegerConstantValue2 extends RequiredConstantValue {
private class RequiredLineLiteralConstantValue extends RequiredConstantValue {
override predicate requiredInt(int i) { i = any(LineLiteral ll).getLocation().getStartLine() }
}
@@ -310,7 +310,7 @@ class LineLiteral extends Literal, TLine {
}
}
private class RequiredStringConstantValue2 extends RequiredConstantValue {
private class RequiredFileLiteralConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) {
s = any(FileLiteral fl).getLocation().getFile().getAbsolutePath()
}
@@ -346,7 +346,7 @@ class StringComponent extends AstNode, TStringComponent {
ConstantValue::ConstantStringValue getConstantValue() { none() }
}
private class RequiredStringConstantValue3 extends RequiredConstantValue {
private class RequiredStringTextComponentConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) {
s = any(Ruby::Token t | exists(TStringTextComponentNonRegexp(t))).getValue()
}
@@ -378,7 +378,7 @@ class StringTextComponent extends StringComponent, TStringTextComponentNonRegexp
final override string getAPrimaryQlClass() { result = "StringTextComponent" }
}
private class RequiredStringConstantValue4 extends RequiredConstantValue {
private class RequiredStringEscapeSequenceComponentConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) {
s = any(Ruby::Token t | exists(TStringEscapeSequenceComponentNonRegexp(t))).getValue()
}
@@ -450,7 +450,7 @@ private string getRegExpTextComponentValue(RegExpTextComponent c) {
)
}
private class RequiredStringConstantValue5 extends RequiredConstantValue {
private class RequiredRegExpTextComponentConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) { s = getRegExpTextComponentValue(_) }
}
@@ -490,7 +490,7 @@ private string getRegExpEscapeSequenceComponentValue(RegExpEscapeSequenceCompone
)
}
private class RequiredStringConstantValue6 extends RequiredConstantValue {
private class RequiredRegExpEscapeSequenceComponentConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) { s = getRegExpEscapeSequenceComponentValue(_) }
}
@@ -761,7 +761,7 @@ class SymbolLiteral extends StringlikeLiteral, TSymbolLiteral {
// Tree-sitter gives us value text including the colon, which we skip.
private string getSimpleSymbolValue(Ruby::SimpleSymbol ss) { result = ss.getValue().suffix(1) }
private class RequiredSymbolConstantValue extends RequiredConstantValue {
private class RequiredSimpleSymbolConstantValue extends RequiredConstantValue {
override predicate requiredSymbol(string s) { s = getSimpleSymbolValue(_) }
}
@@ -795,7 +795,7 @@ private class BareSymbolLiteral extends ComplexSymbolLiteral, TBareSymbolLiteral
final override StringComponent getComponent(int i) { toGenerated(result) = g.getChild(i) }
}
private class RequiredSymbolConstantValue2 extends RequiredConstantValue {
private class RequiredHashKeySymbolConstantValue extends RequiredConstantValue {
override predicate requiredSymbol(string s) { s = any(Ruby::HashKeySymbol h).getValue() }
}
@@ -829,7 +829,7 @@ class SubshellLiteral extends StringlikeLiteral, TSubshellLiteral {
final override StringComponent getComponent(int i) { toGenerated(result) = g.getChild(i) }
}
private class RequiredStringConstantValue7 extends RequiredConstantValue {
private class RequiredCharacterConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) { s = any(Ruby::Character c).getValue() }
}
@@ -1131,7 +1131,7 @@ private string getMethodName(MethodName::Token t) {
result = t.(Ruby::Setter).getName().getValue() + "="
}
private class RequiredStringConstantValue8 extends RequiredConstantValue {
private class RequiredMethodNameConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) { s = getMethodName(_) }
}

View File

@@ -15,6 +15,10 @@ newtype TConstantValue =
private newtype TRequiredConstantValue = MkRequiredConstantValue()
/**
* A class that exists for QL technical reasons only (the IPA type used
* to represent constant values needs to be bounded).
*/
class RequiredConstantValue extends MkRequiredConstantValue {
string toString() { none() }

View File

@@ -272,6 +272,7 @@ module ExprNodes {
final ExprCfgNode getOperand() { e.hasCfgChild(uo.getOperand(), this, result) }
final override ConstantValue getConstantValue() {
// TODO: Implement support for complex numbers and rational numbers
exists(string op, ConstantValue value | unaryConstFold(this, op, value) |
op = "+" and
result = value
@@ -373,6 +374,7 @@ module ExprNodes {
final ExprCfgNode getRightOperand() { e.hasCfgChild(bo.getRightOperand(), this, result) }
final override ConstantValue getConstantValue() {
// TODO: Implement support for complex numbers and rational numbers
exists(string op, ConstantValue left, ConstantValue right |
binaryConstFold(this, op, left, right)
|
@@ -642,7 +644,7 @@ module ExprNodes {
)
}
private class RequiredStringConstantValue extends RequiredConstantValue {
private class RequiredStringlikeLiteralConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) {
exists(StringlikeLiteralCfgNode n |
s = getStringlikeLiteralCfgNodeValue(n) and
@@ -703,7 +705,7 @@ module ExprNodes {
)
}
private class RequiredStringConstantValue2 extends RequiredConstantValue {
private class RequiredRexExpLiteralConstantValue extends RequiredConstantValue {
override predicate requiredString(string s) { s = getRegExpLiteralCfgNodeValue(_) }
}

View File

@@ -367,6 +367,8 @@
| literals/literals.rb:12:1:12:1 | 0 | 0 |
| literals/literals.rb:13:1:13:5 | 0d900 | 0 |
| literals/literals.rb:16:1:16:6 | 0x1234 | 4660 |
| literals/literals.rb:17:1:17:10 | 0xdeadbeef | -559038737 |
| literals/literals.rb:18:1:18:11 | 0xF00D_face | -267519282 |
| literals/literals.rb:21:1:21:4 | 0123 | 83 |
| literals/literals.rb:22:1:22:5 | 0o234 | 156 |
| literals/literals.rb:23:1:23:6 | 0O45_6 | 302 |

View File

@@ -10,8 +10,8 @@ allLiterals
| literals.rb:12:1:12:1 | 0 | IntegerLiteral | 0 |
| literals.rb:13:1:13:5 | 0d900 | IntegerLiteral | 0 |
| literals.rb:16:1:16:6 | 0x1234 | IntegerLiteral | 4660 |
| literals.rb:17:1:17:10 | 0xdeadbeef | IntegerLiteral | <none> |
| literals.rb:18:1:18:11 | 0xF00D_face | IntegerLiteral | <none> |
| literals.rb:17:1:17:10 | 0xdeadbeef | IntegerLiteral | -559038737 |
| literals.rb:18:1:18:11 | 0xF00D_face | IntegerLiteral | -267519282 |
| literals.rb:21:1:21:4 | 0123 | IntegerLiteral | 83 |
| literals.rb:22:1:22:5 | 0o234 | IntegerLiteral | 156 |
| literals.rb:23:1:23:6 | 0O45_6 | IntegerLiteral | 302 |
@@ -739,8 +739,8 @@ numericLiterals
| literals.rb:12:1:12:1 | 0 | IntegerLiteral | 0 |
| literals.rb:13:1:13:5 | 0d900 | IntegerLiteral | 0 |
| literals.rb:16:1:16:6 | 0x1234 | IntegerLiteral | 4660 |
| literals.rb:17:1:17:10 | 0xdeadbeef | IntegerLiteral | <none> |
| literals.rb:18:1:18:11 | 0xF00D_face | IntegerLiteral | <none> |
| literals.rb:17:1:17:10 | 0xdeadbeef | IntegerLiteral | -559038737 |
| literals.rb:18:1:18:11 | 0xF00D_face | IntegerLiteral | -267519282 |
| literals.rb:21:1:21:4 | 0123 | IntegerLiteral | 83 |
| literals.rb:22:1:22:5 | 0o234 | IntegerLiteral | 156 |
| literals.rb:23:1:23:6 | 0O45_6 | IntegerLiteral | 302 |
@@ -808,8 +808,8 @@ integerLiterals
| literals.rb:12:1:12:1 | 0 | IntegerLiteral | 0 |
| literals.rb:13:1:13:5 | 0d900 | IntegerLiteral | 0 |
| literals.rb:16:1:16:6 | 0x1234 | IntegerLiteral | 4660 |
| literals.rb:17:1:17:10 | 0xdeadbeef | IntegerLiteral | <none> |
| literals.rb:18:1:18:11 | 0xF00D_face | IntegerLiteral | <none> |
| literals.rb:17:1:17:10 | 0xdeadbeef | IntegerLiteral | -559038737 |
| literals.rb:18:1:18:11 | 0xF00D_face | IntegerLiteral | -267519282 |
| literals.rb:21:1:21:4 | 0123 | IntegerLiteral | 83 |
| literals.rb:22:1:22:5 | 0o234 | IntegerLiteral | 156 |
| literals.rb:23:1:23:6 | 0O45_6 | IntegerLiteral | 302 |