Raise warning to error: duplicate key in a const map is now an error in Dart.

Eventually the plan is to handle this in the CFE when it performs
constant-evaluation, but for now we can check this in dart2js
(see https://github.com/dart-lang/sdk/issues/32983)

Change-Id: Ic2e5cfd96961094e634da201c55f82398c060aca
Reviewed-on: https://dart-review.googlesource.com/c/79421
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Stephen Adams <sra@google.com>
This commit is contained in:
Sigmund Cherem 2018-10-12 00:18:34 +00:00 committed by commit-bot@chromium.org
parent f6ca2c1d8f
commit 0cdd5b9ff3
4 changed files with 14 additions and 36 deletions

View file

@ -22,6 +22,13 @@
#### Pub
#### dart2js
* Breaking change: duplicate keys in a const map are not allowed and produce a
compile-time error. Dart2js used to report this as a warning before. Note
this is already an error in dartanalyzer and DDC and will be an error in
other tools in the future as well.
#### Other Tools
## 2.1.0-dev.7.0

View file

@ -481,7 +481,7 @@ class MapConstantExpression extends ConstantExpression {
return new NonConstantValue();
}
if (map.containsKey(key)) {
environment.reportWarning(keys[i], MessageKind.EQUAL_MAP_ENTRY_KEY, {});
environment.reportError(keys[i], MessageKind.EQUAL_MAP_ENTRY_KEY, {});
}
map[key] = value;
}

View file

@ -161,8 +161,6 @@ canonical_const2_test: RuntimeError, OK # non JS number semantics
checked_method_error_order_test: RuntimeError
class_cycle_test/02: MissingCompileTimeError
class_cycle_test/03: MissingCompileTimeError
compile_time_constant_o_test/01: MissingCompileTimeError
compile_time_constant_o_test/02: MissingCompileTimeError
conditional_method_invocation_test/05: MissingCompileTimeError
conditional_method_invocation_test/06: MissingCompileTimeError
conditional_method_invocation_test/07: MissingCompileTimeError
@ -215,7 +213,6 @@ const_constructor2_test/18: MissingCompileTimeError
const_constructor2_test/20: MissingCompileTimeError
const_constructor2_test/22: MissingCompileTimeError
const_constructor2_test/24: MissingCompileTimeError
const_dynamic_type_literal_test/02: MissingCompileTimeError
const_error_multiply_initialized_test/02: MissingCompileTimeError
const_error_multiply_initialized_test/04: MissingCompileTimeError
const_evaluation_test/01: RuntimeError
@ -442,20 +439,11 @@ class_literal_static_test/01: MissingCompileTimeError
class_literal_static_test/03: MissingCompileTimeError
class_literal_static_test/07: MissingCompileTimeError
closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
compile_time_constant_k_test/01: MissingCompileTimeError
compile_time_constant_k_test/02: MissingCompileTimeError
compile_time_constant_k_test/03: MissingCompileTimeError
config_import_corelib_test: CompileTimeError
covariant_subtyping_test: RuntimeError
identical_const_test/01: MissingCompileTimeError
identical_const_test/02: MissingCompileTimeError
identical_const_test/03: MissingCompileTimeError
identical_const_test/04: MissingCompileTimeError
issue23244_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
library_env_test/has_no_html_support: RuntimeError
library_env_test/has_no_io_support: RuntimeError
map_literal3_test/01: MissingCompileTimeError
map_literal3_test/02: MissingCompileTimeError
map_literal3_test/03: MissingCompileTimeError
partial_tearoff_instantiation_test/05: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
partial_tearoff_instantiation_test/06: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
@ -490,22 +478,13 @@ call_with_no_such_method_test: RuntimeError
class_literal_static_test/01: MissingCompileTimeError
class_literal_static_test/03: MissingCompileTimeError
class_literal_static_test/07: MissingCompileTimeError
compile_time_constant_k_test/01: MissingCompileTimeError
compile_time_constant_k_test/02: MissingCompileTimeError
compile_time_constant_k_test/03: MissingCompileTimeError
config_import_corelib_test: CompileTimeError
covariant_subtyping_test: RuntimeError
identical_const_test/01: MissingCompileTimeError
identical_const_test/02: MissingCompileTimeError
identical_const_test/03: MissingCompileTimeError
identical_const_test/04: MissingCompileTimeError
invocation_mirror2_test: RuntimeError # mirrors not supported
invocation_mirror_test: RuntimeError
issue23244_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
library_env_test/has_no_html_support: RuntimeError
many_overridden_no_such_method_test: RuntimeError
map_literal3_test/01: MissingCompileTimeError
map_literal3_test/02: MissingCompileTimeError
map_literal3_test/03: MissingCompileTimeError
mixin_generic_test: RuntimeError # Issue 12605
mixin_mixin_type_arguments_test: RuntimeError
@ -530,8 +509,6 @@ bit_operations_test: RuntimeError
branch_canonicalization_test: RuntimeError
canonical_const2_test: RuntimeError, OK # non JS number semantics
closure_type_arguments_test: Crash # Issue 34272
compile_time_constant_o_test/01: MissingCompileTimeError
compile_time_constant_o_test/02: MissingCompileTimeError
compile_time_constant_static5_test/11: CompileTimeError
compile_time_constant_static5_test/16: CompileTimeError
compile_time_constant_static5_test/21: CompileTimeError
@ -539,7 +516,6 @@ compile_time_constant_static5_test/23: CompileTimeError
conditional_rewrite_test: RuntimeError
config_import_test: RuntimeError
const_constructor3_test/04: MissingCompileTimeError # OK - Subtype check uses JS number semantics.
const_dynamic_type_literal_test/02: MissingCompileTimeError
const_evaluation_test/01: RuntimeError
const_list_test: RuntimeError
const_map2_test/00: MissingCompileTimeError

View file

@ -263,19 +263,11 @@ const_optional_args_test/01: MissingCompileTimeError
# compile-time errors).
[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartkb && $compiler != dartkp && $fasta ]
compile_time_constant_c_test/02: MissingCompileTimeError
const_constructor_nonconst_field_test/01: MissingCompileTimeError
const_syntax_test/05: MissingCompileTimeError
[ $compiler != dart2analyzer && $compiler != dart2js && $fasta && $strong ]
super_call4_test/01: MissingCompileTimeError
# The precomilation and bytecode configurations use a kernel2kernel constants evaluator
# which is is more correct than fasta/vm in JIT mode (i.e. it catches more
# compile-time errors).
[ $compiler != dart2analyzer && $compiler != dartkb && $compiler != dartkp && $fasta ]
compile_time_constant_o_test/01: MissingCompileTimeError # Issue 32983
compile_time_constant_o_test/02: MissingCompileTimeError # Issue 32983
const_constructor_nonconst_field_test/01: MissingCompileTimeError
const_dynamic_type_literal_test/02: MissingCompileTimeError # Issue 32983
const_syntax_test/05: MissingCompileTimeError
identical_const_test/01: MissingCompileTimeError # Issue 32983
identical_const_test/02: MissingCompileTimeError # Issue 32983
identical_const_test/03: MissingCompileTimeError # Issue 32983
@ -284,13 +276,16 @@ identical_const_test/04: MissingCompileTimeError # Issue 32983
# The precomilation and bytecode configurations use a kernel2kernel constants evaluator
# which is is more correct than fasta/vm in JIT mode (i.e. it catches more
# compile-time errors).
[ $compiler != dart2analyzer && $compiler != dartkb && $compiler != dartkp && $fasta && $strong ]
[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartkb && $compiler != dartkp && $fasta && $strong ]
compile_time_constant_k_test/01: MissingCompileTimeError
compile_time_constant_k_test/02: MissingCompileTimeError
compile_time_constant_k_test/03: MissingCompileTimeError
map_literal3_test/01: MissingCompileTimeError
map_literal3_test/02: MissingCompileTimeError
[ $compiler != dart2analyzer && $compiler != dart2js && $fasta && $strong ]
super_call4_test/01: MissingCompileTimeError
[ $compiler != dart2analyzer && $fasta ]
const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
const_map3_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.