You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Dart analysis server crashes (exit code 255) instead of reporting a syntax error when encountering an unescaped apostrophe in a string literal immediately followed by the tokens Do (capital D, lower-case o) and or. This appears to be a lexing/parsing bug: after the unescaped apostrophe the analyzer mis-tokenizes Do and or as keywords, then fails deep inside DependencyWalker.
Here is the code that reproduces this issue, it can be also reproduced through dart.dev website:
void main() {
final a = 1;
final text = switch (a){
1=> 'You're planning to Do something or',
}
}
Dart SDK: 3.6.1
Error stack trace:
Internal error: Null check operator used on a null value
#0 LegacyAnalysisServer.sendServerErrorNotification (package:analysis_server/src/legacy_analysis_server.dart:714:31) #1 ErrorNotifier.logException (package:analysis_server/src/server/error_notifier.dart:45:12) #2 MulticastInstrumentationService.logException (package:analyzer/instrumentation/multicast_service.dart:28:15) #3 Driver._captureExceptions.errorFunction (package:analysis_server/src/server/driver.dart:528:15) #4 _Zone._processUncaughtError (dart:async/zone.dart:1097:14) #5 _CustomZone.handleUncaughtError (dart:async/zone.dart:1301:5) #6 Future._propagateToListeners (dart:async/future_impl.dart:816:16) #7 Future._completeError (dart:async/future_impl.dart:715:5)
The text was updated successfully, but these errors were encountered:
Luxorum
added
the
area-devexp
For issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages.
label
May 12, 2025
bwilkerson
added
area-dart-model
For issues related to conformance to the language spec in the parser, compilers or the CLI analyzer.
and removed
area-devexp
For issues related to the analysis server, IDE support, linter, `dart fix`, and diagnostic messages.
labels
May 12, 2025
Isn't a parsing bug as such. The string literal ended after 'You' and re planning to Do something or '... is not valid Dart code.
It's not great error recovery. If it could have recongized that the ' was intended as a string character, not the closing quote, it could possibly have error recovered better.
Error recovery is always hard, you can't trust the parsing of the things you are trying to look at to recover, and you don't know how far back to go.
And sometimes you get var string = 'the plus sign, '+', is a positive sign!';. No error, no recovery, still not what author (probably) intended.
The Dart analysis server crashes (exit code 255) instead of reporting a syntax error when encountering an unescaped apostrophe in a string literal immediately followed by the tokens Do (capital D, lower-case o) and or. This appears to be a lexing/parsing bug: after the unescaped apostrophe the analyzer mis-tokenizes Do and or as keywords, then fails deep inside DependencyWalker.
Here is the code that reproduces this issue, it can be also reproduced through dart.dev website:
void main() {
final a = 1;
final text = switch (a){
1=> 'You're planning to Do something or',
}
}
Dart SDK: 3.6.1
Error stack trace:
Internal error: Null check operator used on a null value
#0 LegacyAnalysisServer.sendServerErrorNotification (package:analysis_server/src/legacy_analysis_server.dart:714:31)
#1 ErrorNotifier.logException (package:analysis_server/src/server/error_notifier.dart:45:12)
#2 MulticastInstrumentationService.logException (package:analyzer/instrumentation/multicast_service.dart:28:15)
#3 Driver._captureExceptions.errorFunction (package:analysis_server/src/server/driver.dart:528:15)
#4 _Zone._processUncaughtError (dart:async/zone.dart:1097:14)
#5 _CustomZone.handleUncaughtError (dart:async/zone.dart:1301:5)
#6 Future._propagateToListeners (dart:async/future_impl.dart:816:16)
#7 Future._completeError (dart:async/future_impl.dart:715:5)
Unhandled exception:
Null check operator used on a null value
#0 Parser._attemptPrecedenceLevelRecovery (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6162:55)
#1 Parser._parsePrecedenceExpressionLoop (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6146:11)
#2 Parser.parsePrecedenceExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5917:12)
#3 Parser.parseExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5833:15)
#4 Parser.parseSwitchExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:10402:17)
#5 Parser.parsePrimary (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6647:16)
#6 Parser.parseUnaryExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6450:12)
#7 Parser.parsePrecedenceExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5893:13)
#8 Parser.parseExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5833:15)
#9 Parser.parseArgumentsRest (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7804:15)
#10 Parser.parseArguments (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7779:12)
#11 Parser.parseArgumentsOpt (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7760:14)
#12 Parser.parseSend (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7699:13)
#13 Parser.parseSendOrFunctionLiteral (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7206:12)
#14 Parser.parsePrimary (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6559:14)
#15 Parser.parseUnaryExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6450:12)
#16 Parser.parsePrecedenceExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5893:13)
#17 Parser.parseExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5833:15)
#18 Parser.parseLiteralListSuffix (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6944:19)
#19 Parser.parsePrimary (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6672:14)
#20 Parser.parseUnaryExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6450:12)
#21 Parser.parsePrecedenceExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5893:13)
#22 Parser.parseExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5833:15)
#23 Parser.parseArgumentsRest (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7804:15)
#24 Parser.parseArguments (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7779:12)
#25 Parser.parseArgumentsOpt (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7760:14)
#26 Parser.parseSend (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7699:13)
#27 Parser.parseSendOrFunctionLiteral (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7206:12)
#28 Parser.parsePrimary (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6559:14)
#29 Parser.parseUnaryExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6450:12)
#30 Parser.parsePrecedenceExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5893:13)
#31 Parser.parseExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5833:15)
#32 Parser.parseReturnStatement (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5735:13)
#33 Parser.parseStatementX (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5611:14)
#34 Parser.parseStatement (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5584:20)
#35 Parser.parseFunctionBody (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5489:15)
#36 Parser.parseAsyncOptBody (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5314:13)
#37 Parser.parseFunctionExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5243:13)
#38 Parser.parseParenthesizedExpressionFunctionLiteralOrRecordLiteral (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6697:16)
#39 Parser.parsePrimary (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6667:14)
#40 Parser.parseUnaryExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6450:12)
#41 Parser.parsePrecedenceExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5893:13)
#42 Parser.parseExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5833:15)
#43 Parser.parseArgumentsRest (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7804:15)
#44 Parser.parseArguments (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7779:12)
#45 Parser.parseArgumentsOpt (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7760:14)
#46 Parser.parseSend (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7699:13)
#47 Parser.parseSendOrFunctionLiteral (package:_fe_analyzer_shared/src/parser/parser_impl.dart:7206:12)
#48 Parser.parsePrimary (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6559:14)
#49 Parser.parseUnaryExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:6450:12)
#50 Parser.parsePrecedenceExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5893:13)
#51 Parser.parseExpression (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5833:15)
#52 Parser.parseReturnStatement (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5735:13)
#53 Parser.parseStatementX (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5611:14)
#54 Parser.parseStatement (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5584:20)
#55 Parser.parseFunctionBody (package:_fe_analyzer_shared/src/parser/parser_impl.dart:5489:15)
#56 Parser.parseMethod (package:_fe_analyzer_shared/src/parser/parser_impl.dart:4982:15)
#57 Parser.parseClassOrMixinOrExtensionOrEnumMemberImpl (package:_fe_analyzer_shared/src/parser/parser_impl.dart:4766:15)
#58 Parser.parseClassOrMixinOrExtensionBody (package:_fe_analyzer_shared/src/parser/parser_impl.dart:4383:15)
#59 Parser.parseClass (package:_fe_analyzer_shared/src/parser/parser_impl.dart:2724:13)
#60 Parser.parseClassOrNamedMixinApplication (package:_fe_analyzer_shared/src/parser/parser_impl.dart:2682:14)
#61 Parser._handleModifiersForClassDeclaration (package:_fe_analyzer_shared/src/parser/parser_impl.dart:832:12)
#62 Parser.parseTopLevelKeywordDeclaration (package:_fe_analyzer_shared/src/parser/parser_impl.dart:670:14)
#63 Parser.parseTopLevelDeclarationImpl (package:_fe_analyzer_shared/src/parser/parser_impl.dart:543:14)
#64 Parser.parseUnit (package:_fe_analyzer_shared/src/parser/parser_impl.dart:421:15)
#65 Parser.parseCompilationUnit2 (package:analyzer/src/generated/parser.dart:97:32)
#66 Parser.parseCompilationUnit (package:analyzer/src/generated/parser.dart:93:12)
#67 FileState.parseCode. (package:analyzer/src/dart/analysis/file_state.dart:681:25)
#68 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:155:23)
#69 FileState.parseCode (package:analyzer/src/dart/analysis/file_state.dart:660:24)
#70 FileState.getParsed (package:analyzer/src/dart/analysis/file_state.dart:617:16)
#71 FileState._getUnlinkedUnit (package:analyzer/src/dart/analysis/file_state.dart:886:16)
#72 FileState.refresh. (package:analyzer/src/dart/analysis/file_state.dart:734:29)
#73 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:155:23)
#74 FileState.refresh (package:analyzer/src/dart/analysis/file_state.dart:733:17)
#75 FileSystemState._newFile. (package:analyzer/src/dart/analysis/file_state.dart:1669:12)
#76 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:155:23)
#77 FileSystemState._newFile (package:analyzer/src/dart/analysis/file_state.dart:1668:17)
#78 FileSystemState.getFileForUri (package:analyzer/src/dart/analysis/file_state.dart:1513:14)
#79 FileState._buildDirectiveUri (package:analyzer/src/dart/analysis/file_state.dart:817:34)
#80 FileState._buildConfigurableDirectiveUris (package:analyzer/src/dart/analysis/file_state.dart:782:22)
#81 FileKind.libraryExports. (package:analyzer/src/dart/analysis/file_state.dart:236:23)
#82 MappedListIterable.elementAt (dart:_internal/iterable.dart:435:31)
#83 ListIterator.moveNext (dart:_internal/iterable.dart:364:26)
#84 new _List._ofEfficientLengthIterable (dart:core-patch/array.dart:163:27)
#85 new _List.of (dart:core-patch/array.dart:128:20)
#86 new List.of (dart:core-patch/array_patch.dart:39:50)
#87 ListIterable.toList (dart:_internal/iterable.dart:224:7)
#88 IterableExtension.toFixedList (package:analyzer/src/utilities/extensions/collection.dart:22:12)
#89 FileKind.libraryExports (package:analyzer/src/dart/analysis/file_state.dart:275:8)
#90 _LibraryNode.computeDependencies. (package:analyzer/src/dart/analysis/library_graph.dart:195:25)
#91 MappedListIterable.elementAt (dart:_internal/iterable.dart:435:31)
#92 ListIterator.moveNext (dart:_internal/iterable.dart:364:26)
#93 IterableIterableExtension.flattenedToList (package:collection/src/iterable_extensions.dart:903:32)
#94 _LibraryNode.computeDependencies (package:analyzer/src/dart/analysis/library_graph.dart:200:10)
#95 Node.getDependencies (package:_fe_analyzer_shared/src/util/dependency_walker.dart:150:40)
#96 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:55:40)
#97 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#98 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#99 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#100 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#101 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#102 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#103 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#104 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#105 DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:68:11)
#106 DependencyWalker.walk (package:_fe_analyzer_shared/src/util/dependency_walker.dart:121:5)
#107 computeLibraryCycle (package:analyzer/src/dart/analysis/library_graph.dart:20:17)
#108 LibraryFileKind.libraryCycle (package:analyzer/src/dart/analysis/file_state.dart:1953:7)
#109 LibraryContext.load.. (package:analyzer/src/dart/analysis/library_context.dart:277:32)
#110 OperationPerformanceImpl.run (package:analyzer/src/util/performance/operation_performance.dart:155:23)
#111 LibraryContext.load. (package:analyzer/src/dart/analysis/library_context.dart:274:38)
#112 PerformanceLog.runAsync (package:analyzer/src/dart/analysis/performance_logger.dart:50:21)
#113 LibraryContext.load (package:analyzer/src/dart/analysis/library_context.dart:273:18)
#114 AnalysisDriver._produceErrors (package:analyzer/src/dart/analysis/driver.dart:1967:26)
#115 AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:1252:13)
#116 AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2446:24)
The text was updated successfully, but these errors were encountered: