starlark syntax: parse big integers
Integer literals outside the signed 32-bit range are now treated
as a dynamic, not static, error. CL 333467651 will add support for
bigint values; a further follow-up will remove the dynamic error.
Also:
- rename IntegerLiteral to IntLiteral, to use preferred Starlark term.
- expose IntLiteral.scan, and clean it up, including error message tweaks.
PiperOrigin-RevId: 334669391
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index d12dde8..dfe6921 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -81,7 +81,7 @@
import net.starlark.java.syntax.ForStatement;
import net.starlark.java.syntax.Identifier;
import net.starlark.java.syntax.IfStatement;
-import net.starlark.java.syntax.IntegerLiteral;
+import net.starlark.java.syntax.IntLiteral;
import net.starlark.java.syntax.ListExpression;
import net.starlark.java.syntax.Location;
import net.starlark.java.syntax.NodeVisitor;
@@ -1163,9 +1163,11 @@
String pattern = ((StringLiteral) elem).getValue();
// exclude_directories is (oddly) an int with default 1.
boolean exclude = true;
- if (excludeDirectories instanceof IntegerLiteral
- && ((IntegerLiteral) excludeDirectories).getValue() == 0) {
- exclude = false;
+ if (excludeDirectories instanceof IntLiteral) {
+ Number v = ((IntLiteral) excludeDirectories).getValue();
+ if (v instanceof Integer && (Integer) v == 0) {
+ exclude = false;
+ }
}
(exclude ? globs : globsWithDirs).add(pattern);
}
diff --git a/src/main/java/net/starlark/java/eval/Eval.java b/src/main/java/net/starlark/java/eval/Eval.java
index 2791b9c..14a8b87 100644
--- a/src/main/java/net/starlark/java/eval/Eval.java
+++ b/src/main/java/net/starlark/java/eval/Eval.java
@@ -16,6 +16,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -38,7 +39,7 @@
import net.starlark.java.syntax.Identifier;
import net.starlark.java.syntax.IfStatement;
import net.starlark.java.syntax.IndexExpression;
-import net.starlark.java.syntax.IntegerLiteral;
+import net.starlark.java.syntax.IntLiteral;
import net.starlark.java.syntax.ListExpression;
import net.starlark.java.syntax.LoadStatement;
import net.starlark.java.syntax.Location;
@@ -448,11 +449,18 @@
return evalIdentifier(fr, (Identifier) expr);
case INDEX:
return evalIndex(fr, (IndexExpression) expr);
- case INTEGER_LITERAL:
+ case INT_LITERAL:
// TODO(adonovan): opt: avoid allocation by saving
- // the StarlarkInt in the IntegerLiteral (a temporary hack
+ // the StarlarkInt in the IntLiteral (a temporary hack
// until we use a compiled representation).
- return StarlarkInt.of(((IntegerLiteral) expr).getValue());
+ Number n = ((IntLiteral) expr).getValue();
+ if (n instanceof Integer) {
+ return StarlarkInt.of((Integer) n);
+ } else if (n instanceof Long) {
+ return StarlarkInt.of((Long) n);
+ } else {
+ return StarlarkInt.of((BigInteger) n);
+ }
case LIST_EXPR:
return evalList(fr, (ListExpression) expr);
case SLICE:
diff --git a/src/main/java/net/starlark/java/syntax/BUILD b/src/main/java/net/starlark/java/syntax/BUILD
index 28ec45f..8535a63 100644
--- a/src/main/java/net/starlark/java/syntax/BUILD
+++ b/src/main/java/net/starlark/java/syntax/BUILD
@@ -33,7 +33,7 @@
"Identifier.java",
"IfStatement.java",
"IndexExpression.java",
- "IntegerLiteral.java",
+ "IntLiteral.java",
"Lexer.java",
"ListExpression.java",
"LoadStatement.java",
diff --git a/src/main/java/net/starlark/java/syntax/Expression.java b/src/main/java/net/starlark/java/syntax/Expression.java
index f56c138..4db3ff7 100644
--- a/src/main/java/net/starlark/java/syntax/Expression.java
+++ b/src/main/java/net/starlark/java/syntax/Expression.java
@@ -37,7 +37,7 @@
CALL,
IDENTIFIER,
INDEX,
- INTEGER_LITERAL,
+ INT_LITERAL,
LIST_EXPR,
SLICE,
STRING_LITERAL,
diff --git a/src/main/java/net/starlark/java/syntax/IntLiteral.java b/src/main/java/net/starlark/java/syntax/IntLiteral.java
new file mode 100644
index 0000000..f281151
--- /dev/null
+++ b/src/main/java/net/starlark/java/syntax/IntLiteral.java
@@ -0,0 +1,107 @@
+// Copyright 2014 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package net.starlark.java.syntax;
+
+import java.math.BigInteger;
+
+/** Syntax node for an int literal. */
+public final class IntLiteral extends Expression {
+ private final String raw;
+ private final int tokenOffset;
+ private final Number value; // = Integer | Long | BigInteger
+
+ IntLiteral(FileLocations locs, String raw, int tokenOffset, Number value) {
+ super(locs);
+ this.raw = raw;
+ this.tokenOffset = tokenOffset;
+ this.value = value;
+ }
+
+ /**
+ * Returns the value denoted by this literal as an Integer, Long, or BigInteger, using the
+ * narrowest type capable of exactly representing the value.
+ */
+ public Number getValue() {
+ return value;
+ }
+
+ /** Returns the raw source text of the literal. */
+ public String getRaw() {
+ return raw;
+ }
+
+ @Override
+ public int getStartOffset() {
+ return tokenOffset;
+ }
+
+ @Override
+ public int getEndOffset() {
+ return tokenOffset + raw.length();
+ }
+
+ @Override
+ public void accept(NodeVisitor visitor) {
+ visitor.visit(this);
+ }
+
+ @Override
+ public Kind kind() {
+ return Kind.INT_LITERAL;
+ }
+
+ /**
+ * Returns the value denoted by a non-negative integer literal with an optional base prefix (but
+ * no +/- sign), using the narrowest type of Integer, Long, or BigInteger capable of exactly
+ * representing the value.
+ *
+ * @throws NumberFormatException if the string is not a valid literal.
+ */
+ public static Number scan(String str) {
+ String orig = str;
+ int radix = 10;
+ if (str.length() > 1 && str.charAt(0) == '0') {
+ switch (str.charAt(1)) {
+ case 'x':
+ case 'X':
+ radix = 16;
+ str = str.substring(2);
+ break;
+ case 'o':
+ case 'O':
+ radix = 8;
+ str = str.substring(2);
+ break;
+ default:
+ throw new NumberFormatException(
+ "invalid octal literal: " + str + " (use '0o" + str.substring(1) + "')");
+ }
+ }
+
+ try {
+ long v = Long.parseLong(str, radix);
+ if (v == (int) v) {
+ return (int) v;
+ }
+ return v;
+ } catch (NumberFormatException unused) {
+ /* fall through */
+ }
+ try {
+ return new BigInteger(str, radix);
+ } catch (NumberFormatException unused) {
+ throw new NumberFormatException("invalid base-" + radix + " integer literal: " + orig);
+ }
+ }
+}
diff --git a/src/main/java/net/starlark/java/syntax/IntegerLiteral.java b/src/main/java/net/starlark/java/syntax/IntegerLiteral.java
deleted file mode 100644
index 313e06c..0000000
--- a/src/main/java/net/starlark/java/syntax/IntegerLiteral.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package net.starlark.java.syntax;
-
-/** Syntax node for an integer literal. */
-// TODO(adonovan): support literals of arbitrary size.
-public final class IntegerLiteral extends Expression {
- private final String raw;
- private final int tokenOffset;
- private final int value;
-
- IntegerLiteral(FileLocations locs, String raw, int tokenOffset, int value) {
- super(locs);
- this.raw = raw;
- this.tokenOffset = tokenOffset;
- this.value = value;
- }
-
- public int getValue() {
- return value;
- }
-
- /** Returns the raw source text of the literal. */
- public String getRaw() {
- return raw;
- }
-
- @Override
- public int getStartOffset() {
- return tokenOffset;
- }
-
- @Override
- public int getEndOffset() {
- return tokenOffset + raw.length();
- }
-
- @Override
- public void accept(NodeVisitor visitor) {
- visitor.visit(this);
- }
-
- @Override
- public Kind kind() {
- return Kind.INTEGER_LITERAL;
- }
-}
diff --git a/src/main/java/net/starlark/java/syntax/Lexer.java b/src/main/java/net/starlark/java/syntax/Lexer.java
index 9113ee5..e957c46 100644
--- a/src/main/java/net/starlark/java/syntax/Lexer.java
+++ b/src/main/java/net/starlark/java/syntax/Lexer.java
@@ -37,7 +37,7 @@
int start; // start offset
int end; // end offset
String raw; // source text of token
- Object value; // String or Integer value of token
+ Object value; // String or Integer/Long/BigInteger value of token
// --- end of parser-visible fields ---
@@ -591,28 +591,12 @@
int oldPos = pos - 1;
String literal = scanInteger();
- final String substring;
- final int radix;
- if (literal.startsWith("0x") || literal.startsWith("0X")) {
- radix = 16;
- substring = literal.substring(2);
- } else if (literal.startsWith("0o") || literal.startsWith("0O")) {
- radix = 8;
- substring = literal.substring(2);
- } else if (literal.startsWith("0") && literal.length() > 1) {
- radix = 8;
- substring = literal.substring(1);
- error("invalid octal value `" + literal + "`, should be: `0o" + substring + "`", oldPos);
- } else {
- radix = 10;
- substring = literal;
- }
-
- int value = 0;
+ Number value;
try {
- value = Integer.parseInt(substring, radix);
- } catch (NumberFormatException e) {
- error("invalid base-" + radix + " integer constant: " + literal, oldPos);
+ value = IntLiteral.scan(literal);
+ } catch (NumberFormatException ex) {
+ error(ex.getMessage(), oldPos);
+ value = 0;
}
setToken(TokenKind.INT, oldPos, pos);
diff --git a/src/main/java/net/starlark/java/syntax/NodePrinter.java b/src/main/java/net/starlark/java/syntax/NodePrinter.java
index 98dc8c0..5a68072 100644
--- a/src/main/java/net/starlark/java/syntax/NodePrinter.java
+++ b/src/main/java/net/starlark/java/syntax/NodePrinter.java
@@ -356,9 +356,9 @@
break;
}
- case INTEGER_LITERAL:
+ case INT_LITERAL:
{
- buf.append(((IntegerLiteral) expr).getValue());
+ buf.append(((IntLiteral) expr).getValue());
break;
}
diff --git a/src/main/java/net/starlark/java/syntax/NodeVisitor.java b/src/main/java/net/starlark/java/syntax/NodeVisitor.java
index 22396fe..1af2275 100644
--- a/src/main/java/net/starlark/java/syntax/NodeVisitor.java
+++ b/src/main/java/net/starlark/java/syntax/NodeVisitor.java
@@ -110,7 +110,7 @@
visitAll(node.getElements());
}
- public void visit(@SuppressWarnings("unused") IntegerLiteral node) {}
+ public void visit(@SuppressWarnings("unused") IntLiteral node) {}
public void visit(@SuppressWarnings("unused") StringLiteral node) {}
diff --git a/src/main/java/net/starlark/java/syntax/Parser.java b/src/main/java/net/starlark/java/syntax/Parser.java
index 4e72318..f375025 100644
--- a/src/main/java/net/starlark/java/syntax/Parser.java
+++ b/src/main/java/net/starlark/java/syntax/Parser.java
@@ -572,8 +572,7 @@
switch (token.kind) {
case INT:
{
- IntegerLiteral literal =
- new IntegerLiteral(locs, token.raw, token.start, (Integer) token.value);
+ IntLiteral literal = new IntLiteral(locs, token.raw, token.start, (Number) token.value);
nextToken();
return literal;
}
diff --git a/src/test/java/net/starlark/java/eval/testdata/int.sky b/src/test/java/net/starlark/java/eval/testdata/int.sky
index e6b1680..59e517b 100644
--- a/src/test/java/net/starlark/java/eval/testdata/int.sky
+++ b/src/test/java/net/starlark/java/eval/testdata/int.sky
@@ -7,12 +7,13 @@
assert_eq(5 * 7, 35)
assert_eq(5 - 7, -2)
-# big numbers (but no big literals yet)
-# TODO(adonovan): implement %x.
-assert_eq("%d" % (1 << 32), "4294967296") # ="0x100000000"
-assert_eq("%d" % (1 << 64), "18446744073709551616") # ="0x10000000000000000"
-assert_eq("%d" % (1 << 128), "340282366920938463463374607431768211456") # ="0x100000000000000000000000000000000"
-assert_eq("%d" % (-1 << 128), "-340282366920938463463374607431768211456") # ="-0x100000000000000000000000000000000"
+# big numbers
+assert_eq(+1 << 32, +0x100000000)
+assert_eq(-1 << 32, -0x100000000)
+assert_eq(+1 << 64, +0x10000000000000000)
+assert_eq(-1 << 64, -0x10000000000000000)
+assert_eq(+1 << 128, +0x100000000000000000000000000000000)
+assert_eq(-1 << 128, -0x100000000000000000000000000000000)
assert_eq((1 << 128) // (1 << 127), 2)
# size boundaries
@@ -20,10 +21,10 @@
maxlong = (1<<63) - 1
minint = -1 << 31
minlong = -1 << 63
-assert_eq(str(maxint + 1), "2147483648")
-assert_eq(str(maxlong + 1), "9223372036854775808")
-assert_eq(str(minint - 1), "-2147483649")
-assert_eq(str(minlong - 1), "-9223372036854775809")
+assert_eq(maxint + 1, 0x80000000)
+assert_eq(maxlong + 1, 0x8000000000000000)
+assert_eq(minint - 1, -0x80000001)
+assert_eq(minlong - 1, -0x8000000000000001)
# str(int)
assert_eq(str(0), "0")
@@ -35,6 +36,13 @@
assert_eq(str(-1<<48), "-281474976710656")
assert_eq(str(-1<<96), "-79228162514264337593543950336")
+# %d formatting
+# TODO(adonovan): implement %x.
+assert_eq("%d" % (1 << 32), "4294967296")
+assert_eq("%d" % (1 << 64), "18446744073709551616")
+assert_eq("%d" % (1 << 128), "340282366920938463463374607431768211456")
+assert_eq("%d" % (-1 << 128), "-340282366920938463463374607431768211456")
+
# truth
assert_(not 0)
assert_(1)
@@ -69,12 +77,11 @@
assert_eq(product // p1, p2)
assert_eq(product % p1, 0)
assert_eq(maxint, 0x7fffffff)
-assert_eq(str(maxint * maxint), "4611686014132420609")
-assert_eq(str((1<<62) - (2<<31) + 1), "4611686014132420609")
-assert_eq(str(111111111 * 111111111), "12345678987654321")
-assert_eq(str(-(111111111 * 111111111)), "-12345678987654321")
-assert_eq(str((111111111 * 111111111) // 111111111), "111111111")
-assert_eq(str((111111111 * 111111111) // 111111111), "111111111")
+assert_eq(maxint * maxint, 0x3fffffff00000001)
+assert_eq((1<<62) - (2<<31) + 1, 0x3fffffff00000001)
+assert_eq(111111111 * 111111111, 12345678987654321)
+assert_eq(-(111111111 * 111111111), -12345678987654321)
+assert_eq((111111111 * 111111111) // 111111111, 111111111)
# division
assert_eq(100 // 7, 14)
diff --git a/src/test/java/net/starlark/java/eval/testdata/int_constructor.sky b/src/test/java/net/starlark/java/eval/testdata/int_constructor.sky
index abd5861..840b430 100644
--- a/src/test/java/net/starlark/java/eval/testdata/int_constructor.sky
+++ b/src/test/java/net/starlark/java/eval/testdata/int_constructor.sky
@@ -5,14 +5,9 @@
assert_eq(int(42), 42)
assert_eq(int(-1), -1)
assert_eq(int(2147483647), 2147483647)
-# -2147483648 is not (yet) a valid int literal even though it's a
-# valid int value, hence the -1 expression.
-assert_eq(int(-2147483647 - 1), -2147483647 - 1)
----
-2147483648 ### invalid base-10 integer constant: 2147483648
----
--2147483649 ### invalid base-10 integer constant: 2147483649
----
+assert_eq(int(-2147483647 - 1), -2147483648)
+assert_eq(int(-2147483649), -2147483649)
+assert_eq(int(1 << 100), 1 << 100)
# from bool
assert_eq(int(True), 1)
@@ -33,15 +28,15 @@
assert_eq(int('-1234'), -1234)
assert_eq(int('2147483647'), 2147483647)
assert_eq(int('-2147483648'), -2147483647 - 1)
-assert_eq(int('123456789012345678901234567891234567890'), int('123456789012345678901234567891234567891') - 1)
-assert_eq(int('-123456789012345678901234567891234567890'), int('-123456789012345678901234567891234567891') + 1)
-assert_eq(int('-0xabcdefabcdefabcdefabcdefabcdef', 0), int('-892059645479943313385225296292859375'))
+assert_eq(int('123456789012345678901234567891234567890'), 123456789012345678901234567891234567890)
+assert_eq(int('-123456789012345678901234567891234567890'), -123456789012345678901234567891234567890)
+assert_eq(int('-0xabcdefabcdefabcdefabcdefabcdef', 0), -0xabcdefabcdefabcdefabcdefabcdef)
assert_eq(int('1111111111111', 2), 8191)
-assert_eq(int('1111111111111', 5), int('305175781'))
-assert_eq(int('1111111111111', 8), int('78536544841'))
-assert_eq(int('1111111111111', 10), int('1111111111111'))
-assert_eq(int('1111111111111', 16), int('300239975158033'))
-assert_eq(int('1111111111111', 36), int('4873763662273663093'))
+assert_eq(int('1111111111111', 5), 305175781)
+assert_eq(int('1111111111111', 8), 78536544841)
+assert_eq(int('1111111111111', 10), 1111111111111)
+assert_eq(int('1111111111111', 16), 300239975158033)
+assert_eq(int('1111111111111', 36), 4873763662273663093)
assert_eq(int('016'), 16) # zero ok when base != 0.
assert_eq(int('+42'), 42) # '+' prefix ok
# with base, no prefix
diff --git a/src/test/java/net/starlark/java/syntax/LexerTest.java b/src/test/java/net/starlark/java/syntax/LexerTest.java
index bc5e209..de6c909 100644
--- a/src/test/java/net/starlark/java/syntax/LexerTest.java
+++ b/src/test/java/net/starlark/java/syntax/LexerTest.java
@@ -192,7 +192,7 @@
.isEqualTo("INT IN LPAREN STRING AND LBRACKET RBRACKET RPAREN NEWLINE EOF");
assertThat(values(tokens("0or()"))).isEqualTo("INT(0) IDENTIFIER(r) LPAREN RPAREN NEWLINE EOF");
- assertThat(lastError).isEqualTo("/some/path.txt:1: invalid base-8 integer constant: 0o");
+ assertThat(lastError).isEqualTo("/some/path.txt:1: invalid base-8 integer literal: 0o");
}
@Test
@@ -223,17 +223,17 @@
assertThat(values(tokens("0O77"))).isEqualTo("INT(63) NEWLINE EOF");
// octal (bad)
- assertThat(values(tokens("012349-"))).isEqualTo("INT(0) MINUS NEWLINE EOF");
+ assertThat(values(tokens("0o12349-"))).isEqualTo("INT(0) MINUS NEWLINE EOF");
assertThat(lastError.toString())
- .isEqualTo("/some/path.txt:1: invalid base-8 integer constant: 012349");
+ .isEqualTo("/some/path.txt:1: invalid base-8 integer literal: 0o12349");
assertThat(values(tokens("0o"))).isEqualTo("INT(0) NEWLINE EOF");
assertThat(lastError.toString())
- .isEqualTo("/some/path.txt:1: invalid base-8 integer constant: 0o");
+ .isEqualTo("/some/path.txt:1: invalid base-8 integer literal: 0o");
- assertThat(values(tokens("012345"))).isEqualTo("INT(5349) NEWLINE EOF");
+ assertThat(values(tokens("012345"))).isEqualTo("INT(0) NEWLINE EOF");
assertThat(lastError.toString())
- .isEqualTo("/some/path.txt:1: invalid octal value `012345`, should be: `0o12345`");
+ .isEqualTo("/some/path.txt:1: invalid octal literal: 012345 (use '0o12345')");
// hexadecimal (uppercase)
assertThat(values(tokens("0X12345F-"))).isEqualTo("INT(1193055) MINUS NEWLINE EOF");
@@ -243,6 +243,15 @@
// hexadecimal (lowercase) [note: "g" cause termination of token]
assertThat(values(tokens("0x12345g-"))).isEqualTo("INT(74565) IDENTIFIER(g) MINUS NEWLINE EOF");
+
+ // long
+ assertThat(values(tokens("1234567890 0x123456789ABCDEF")))
+ .isEqualTo("INT(1234567890) INT(81985529216486895) NEWLINE EOF");
+ // big
+ assertThat(values(tokens("123456789123456789123456789 0xABCDEFABCDEFABCDEFABCDEFABCDEF")))
+ .isEqualTo(
+ "INT(123456789123456789123456789) INT(892059645479943313385225296292859375) NEWLINE"
+ + " EOF");
}
@Test
@@ -251,13 +260,14 @@
assertThat(values(tokens("1.2.345"))).isEqualTo("INT(1) DOT INT(2) DOT INT(345) NEWLINE EOF");
+ // TODO(adonovan): parse floating point numbers.
assertThat(values(tokens("1.0E10"))).isEqualTo("INT(1) DOT INT(0) NEWLINE EOF");
assertThat(lastError.toString())
- .isEqualTo("/some/path.txt:1: invalid base-8 integer constant: 0E10");
+ .isEqualTo("/some/path.txt:1: invalid octal literal: 0E10 (use '0oE10')");
assertThat(values(tokens("1.03E-10"))).isEqualTo("INT(1) DOT INT(0) MINUS INT(10) NEWLINE EOF");
assertThat(lastError.toString())
- .isEqualTo("/some/path.txt:1: invalid base-8 integer constant: 03E");
+ .isEqualTo("/some/path.txt:1: invalid octal literal: 03E (use '0o3E')");
assertThat(values(tokens(". 123"))).isEqualTo("DOT INT(123) NEWLINE EOF");
assertThat(values(tokens(".123"))).isEqualTo("DOT INT(123) NEWLINE EOF");
diff --git a/src/test/java/net/starlark/java/syntax/ParserTest.java b/src/test/java/net/starlark/java/syntax/ParserTest.java
index 951036c..33560c1 100644
--- a/src/test/java/net/starlark/java/syntax/ParserTest.java
+++ b/src/test/java/net/starlark/java/syntax/ParserTest.java
@@ -101,13 +101,13 @@
}
// helper func for testListExpressions:
- private static int getIntElem(DictExpression.Entry entry, boolean key) {
- return ((IntegerLiteral) (key ? entry.getKey() : entry.getValue())).getValue();
+ private static Number getIntElem(DictExpression.Entry entry, boolean key) {
+ return ((IntLiteral) (key ? entry.getKey() : entry.getValue())).getValue();
}
// helper func for testListExpressions:
- private static int getIntElem(ListExpression list, int index) {
- return ((IntegerLiteral) list.getElements().get(index)).getValue();
+ private static Number getIntElem(ListExpression list, int index) {
+ return ((IntLiteral) list.getElements().get(index)).getValue();
}
// helper func for testListExpressions:
@@ -186,9 +186,9 @@
UnaryOperatorExpression e = (UnaryOperatorExpression) parseExpression("-5");
UnaryOperatorExpression e2 = (UnaryOperatorExpression) parseExpression("- 5");
- IntegerLiteral i = (IntegerLiteral) e.getX();
+ IntLiteral i = (IntLiteral) e.getX();
assertThat(i.getValue()).isEqualTo(5);
- IntegerLiteral i2 = (IntegerLiteral) e2.getX();
+ IntLiteral i2 = (IntLiteral) e2.getX();
assertThat(i2.getValue()).isEqualTo(5);
assertLocation(0, 2, e);
assertLocation(0, 3, e2);
@@ -201,16 +201,16 @@
IndexExpression function = (IndexExpression) e.getFunction();
Identifier functionList = (Identifier) function.getObject();
assertThat(functionList.getName()).isEqualTo("foo");
- IntegerLiteral listIndex = (IntegerLiteral) function.getKey();
+ IntLiteral listIndex = (IntLiteral) function.getKey();
assertThat(listIndex.getValue()).isEqualTo(0);
assertThat(e.getArguments()).hasSize(3);
assertThat(e.getNumPositionalArguments()).isEqualTo(2);
- IntegerLiteral arg0 = (IntegerLiteral) e.getArguments().get(0).getValue();
+ IntLiteral arg0 = (IntLiteral) e.getArguments().get(0).getValue();
assertThat((int) arg0.getValue()).isEqualTo(1);
- IntegerLiteral arg1 = (IntegerLiteral) e.getArguments().get(1).getValue();
+ IntLiteral arg1 = (IntLiteral) e.getArguments().get(1).getValue();
assertThat((int) arg1.getValue()).isEqualTo(2);
Argument arg2 = e.getArguments().get(2);
@@ -229,10 +229,10 @@
assertThat(e.getArguments()).hasSize(3);
assertThat(e.getNumPositionalArguments()).isEqualTo(2);
- IntegerLiteral arg0 = (IntegerLiteral) e.getArguments().get(0).getValue();
+ IntLiteral arg0 = (IntLiteral) e.getArguments().get(0).getValue();
assertThat((int) arg0.getValue()).isEqualTo(1);
- IntegerLiteral arg1 = (IntegerLiteral) e.getArguments().get(1).getValue();
+ IntLiteral arg1 = (IntLiteral) e.getArguments().get(1).getValue();
assertThat((int) arg1.getValue()).isEqualTo(2);
Argument arg2 = e.getArguments().get(2);
@@ -251,7 +251,7 @@
assertThat(e.getArguments()).hasSize(1);
assertThat(e.getNumPositionalArguments()).isEqualTo(1);
- IntegerLiteral arg0 = (IntegerLiteral) e.getArguments().get(0).getValue();
+ IntLiteral arg0 = (IntLiteral) e.getArguments().get(0).getValue();
assertThat((int) arg0.getValue()).isEqualTo(1);
}
@@ -310,7 +310,7 @@
@Test
public void testSubstring() throws Exception {
SliceExpression s = (SliceExpression) parseExpression("'FOO.CC'[:].lower()[1:]");
- assertThat(((IntegerLiteral) s.getStart()).getValue()).isEqualTo(1);
+ assertThat(((IntLiteral) s.getStart()).getValue()).isEqualTo(1);
CallExpression e = (CallExpression) parseExpression("'FOO.CC'.lower()[1:].startswith('oo')");
DotExpression dotExpression = (DotExpression) e.getFunction();
@@ -318,7 +318,7 @@
assertThat(e.getArguments()).hasSize(1);
s = (SliceExpression) parseExpression("'FOO.CC'[1:][:2]");
- assertThat(((IntegerLiteral) s.getStop()).getValue()).isEqualTo(2);
+ assertThat(((IntLiteral) s.getStop()).getValue()).isEqualTo(2);
}
@Test
@@ -372,7 +372,7 @@
assertThat(e.getArguments()).hasSize(3);
assertThat(e.getNumPositionalArguments()).isEqualTo(3);
- IntegerLiteral arg0 = (IntegerLiteral) e.getArguments().get(0).getValue();
+ IntLiteral arg0 = (IntLiteral) e.getArguments().get(0).getValue();
assertThat((int) arg0.getValue()).isEqualTo(1);
Argument arg1 = e.getArguments().get(1);
@@ -383,7 +383,7 @@
assertThat(src.substring(5, 28)).isEqualTo("[x for foo foo foo foo]");
assertThat(arg1val.getEndLocation().column()).isEqualTo(29);
- IntegerLiteral arg2 = (IntegerLiteral) e.getArguments().get(2).getValue();
+ IntLiteral arg2 = (IntLiteral) e.getArguments().get(2).getValue();
assertThat((int) arg2.getValue()).isEqualTo(3);
}
@@ -727,7 +727,7 @@
@Test
public void testTupleLiterals5() throws Exception {
- IntegerLiteral intLit = (IntegerLiteral) parseExpression("(42)"); // not a tuple!
+ IntLiteral intLit = (IntLiteral) parseExpression("(42)"); // not a tuple!
assertThat((int) intLit.getValue()).isEqualTo(42);
}