From c8b2183bb5d440178c2d0c06dfd1c8e6002dda35 Mon Sep 17 00:00:00 2001 From: Jens Johansen Date: Fri, 20 Oct 2017 09:38:57 +0000 Subject: [PATCH] [kernel] Disallow const x = [] and const y = {} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This CL makes fasta issue an error when trying to create a non-const ListLiteral or MapLiteral in a context where const is required. Bug: Change-Id: I27ea151a38eb1198faa83a8cfa57453a4e225e1a Reviewed-on: https://dart-review.googlesource.com/15460 Commit-Queue: Jens Johansen Reviewed-by: Peter von der Ahé --- .../lib/src/fasta/kernel/body_builder.dart | 16 ++++++++++++++-- tests/co19/co19-kernel.status | 4 ---- tests/corelib/corelib.status | 3 --- tests/corelib_2/corelib_2.status | 2 -- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart index f1ed0041286..e6eac21561a 100644 --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart @@ -1639,8 +1639,13 @@ class BodyBuilder extends ScopeListener implements BuilderHelper { beginToken.charOffset); } } + bool isConst = constKeyword != null; + if (constantExpressionRequired && !isConst) { + deprecated_addCompileTimeError( + offsetForToken(beginToken), "Not a constant expression."); + } push(new ShadowListLiteral(expressions, - typeArgument: typeArgument, isConst: constKeyword != null) + typeArgument: typeArgument, isConst: isConst) ..fileOffset = offsetForToken(constKeyword ?? beginToken)); } @@ -1684,8 +1689,15 @@ class BodyBuilder extends ScopeListener implements BuilderHelper { valueType = typeArguments[1]; } } + + bool isConst = constKeyword != null; + + if (constantExpressionRequired && !isConst) { + deprecated_addCompileTimeError( + offsetForToken(beginToken), "Not a constant expression."); + } push(new ShadowMapLiteral(entries, - keyType: keyType, valueType: valueType, isConst: constKeyword != null) + keyType: keyType, valueType: valueType, isConst: isConst) ..fileOffset = constKeyword?.charOffset ?? offsetForToken(beginToken)); } diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status index 460cb6c3151..39f3df5334e 100644 --- a/tests/co19/co19-kernel.status +++ b/tests/co19/co19-kernel.status @@ -39,8 +39,6 @@ Language/Expressions/Constants/bitwise_operators_t02: Crash Language/Expressions/Constants/bitwise_operators_t03: Crash Language/Expressions/Constants/bitwise_operators_t04: Crash Language/Expressions/Constants/bitwise_operators_t06: Crash -Language/Expressions/Constants/constant_list_t02: MissingCompileTimeError -Language/Expressions/Constants/constant_map_t02: MissingCompileTimeError Language/Expressions/Constants/depending_on_itself_t03: Crash Language/Expressions/Constants/equals_expression_t03: MissingCompileTimeError Language/Expressions/Constants/exception_t04: MissingCompileTimeError @@ -50,10 +48,8 @@ Language/Expressions/Constants/math_operators_t04: Crash Language/Expressions/Constants/math_operators_t05: Crash Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t03: MissingCompileTimeError Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: MissingCompileTimeError -Language/Expressions/Instance_Creation/Const/arguments_t03: MissingCompileTimeError Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError # Kernel Issue 28335 (deferred libraries) Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError # Kernel Issue 28335 (deferred libraries) -Language/Expressions/Maps/constant_map_t02: MissingCompileTimeError Language/Expressions/Maps/key_value_equals_operator_t01: MissingCompileTimeError Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t01: MissingCompileTimeError # Issue 25496 Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t02: MissingCompileTimeError # Issue 25496 diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status index 671440362ef..c2b37c911ca 100644 --- a/tests/corelib/corelib.status +++ b/tests/corelib/corelib.status @@ -198,19 +198,16 @@ bool_from_environment2_test/01: MissingCompileTimeError bool_from_environment2_test/02: MissingCompileTimeError bool_from_environment2_test/03: MissingCompileTimeError bool_from_environment2_test/04: MissingCompileTimeError -bool_from_environment2_test/05: MissingCompileTimeError compare_to2_test: RuntimeError int_from_environment3_test/01: MissingCompileTimeError int_from_environment3_test/02: MissingCompileTimeError int_from_environment3_test/03: MissingCompileTimeError int_from_environment3_test/04: MissingCompileTimeError -int_from_environment3_test/05: MissingCompileTimeError string_case_test/01: RuntimeError string_from_environment3_test/01: MissingCompileTimeError string_from_environment3_test/02: MissingCompileTimeError string_from_environment3_test/03: MissingCompileTimeError string_from_environment3_test/04: MissingCompileTimeError -string_from_environment3_test/05: MissingCompileTimeError string_trimlr_test/02: RuntimeError symbol_operator_test/03: RuntimeError symbol_reserved_word_test/04: MissingCompileTimeError diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status index cb154315962..70030726914 100644 --- a/tests/corelib_2/corelib_2.status +++ b/tests/corelib_2/corelib_2.status @@ -292,7 +292,6 @@ bool_from_environment2_test/01: MissingCompileTimeError bool_from_environment2_test/02: MissingCompileTimeError bool_from_environment2_test/03: MissingCompileTimeError bool_from_environment2_test/04: MissingCompileTimeError -bool_from_environment2_test/05: MissingCompileTimeError compare_to2_test: RuntimeError string_trimlr_test/02: RuntimeError symbol_operator_test/03: RuntimeError @@ -312,7 +311,6 @@ string_from_environment3_test/01: MissingCompileTimeError string_from_environment3_test/02: MissingCompileTimeError string_from_environment3_test/03: MissingCompileTimeError string_from_environment3_test/04: MissingCompileTimeError -string_from_environment3_test/05: MissingCompileTimeError [ ($compiler == dartk || $compiler == dartkp) && ($runtime == vm || $runtime == dart_precompiled) && $mode == debug] list_test/*: Crash