Skip to content

Commit d17605a

Browse files
shickscopybara-github
authored andcommitted
Allow uninitialized var _F_toggleOrdinals for type definition.
PiperOrigin-RevId: 550063262
1 parent 7985a09 commit d17605a

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

src/com/google/javascript/jscomp/ReplaceToggles.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback;
2121
import com.google.javascript.rhino.Node;
2222
import com.google.javascript.rhino.QualifiedName;
23+
import com.google.javascript.rhino.Token;
2324
import java.util.HashSet;
2425
import java.util.LinkedHashMap;
2526
import java.util.Map;
@@ -79,7 +80,10 @@ public void visit(NodeTraversal t, Node n, Node parent) {
7980
&& n.getFirstChild().matchesName(ORDINAL_VAR_NAME)) {
8081
Node rhs = n.getFirstFirstChild();
8182

82-
if (rhs == null || !rhs.isObjectLit()) {
83+
if (rhs == null && n.getToken() == Token.VAR) {
84+
// An empty var is a type definition, which is OK.
85+
return;
86+
} else if (!rhs.isObjectLit()) {
8387
compiler.report(JSError.make(n, INVALID_ORDINAL_MAPPING, "not an object literal"));
8488
return;
8589
}

test/com/google/javascript/jscomp/ReplaceTogglesTest.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,20 @@ public void resetPassParameters() throws Exception {
3737
check = false;
3838
}
3939

40+
@Test
41+
public void testBootstrapOrdinals_uninitialized() {
42+
check = true;
43+
testSame(srcs("var _F_toggleOrdinals;"), expectOrdinals(null));
44+
}
45+
4046
@Test
4147
public void testBootstrapOrdinals_empty() {
48+
check = true;
49+
testSame(srcs("var _F_toggleOrdinals = {};"), expectOrdinals(ImmutableMap.of()));
50+
}
51+
52+
@Test
53+
public void testBootstrapOrdinals_simple() {
4254
check = true;
4355
testSame(
4456
srcs("var _F_toggleOrdinals = {'foo_bar': 1};"),
@@ -49,14 +61,20 @@ public void testBootstrapOrdinals_empty() {
4961
}
5062

5163
@Test
52-
public void testBootstrapOrdinals_simple() {
64+
public void testBootstrapOrdinals_ignoresExtraUninitializedDefinitions() {
5365
check = true;
5466
testSame(
55-
srcs("var _F_toggleOrdinals = {'foo_bar': 1};"),
56-
expectOrdinals(ImmutableMap.of("foo_bar", 1)));
67+
srcs(
68+
lines(
69+
"var _F_toggleOrdinals = {'foo': 1};", //
70+
"var _F_toggleOrdinals;")),
71+
expectOrdinals(ImmutableMap.of("foo", 1)));
5772
testSame(
58-
srcs("var _F_toggleOrdinals = {'foo_bar': 1, qux: 2};"),
59-
expectOrdinals(ImmutableMap.of("foo_bar", 1, "qux", 2)));
73+
srcs(
74+
lines(
75+
"var _F_toggleOrdinals;", //
76+
"var _F_toggleOrdinals = {'foo': 1};")),
77+
expectOrdinals(ImmutableMap.of("foo", 1)));
6078
}
6179

6280
@Test
@@ -70,10 +88,6 @@ public void testBootstrapOrdinals_notAnObject() {
7088
srcs("var _F_toggleOrdinals = [];"),
7189
error(ReplaceToggles.INVALID_ORDINAL_MAPPING)
7290
.withMessageContaining("not an object literal"));
73-
test(
74-
srcs("var _F_toggleOrdinals;"),
75-
error(ReplaceToggles.INVALID_ORDINAL_MAPPING)
76-
.withMessageContaining("not an object literal"));
7791
}
7892

7993
@Test

0 commit comments

Comments
 (0)