From 09c0706734010b0dbc8d03157d8eddfb82668da7 Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Wed, 7 Jun 2023 12:48:42 -0700 Subject: [PATCH] Roll engine, patch expression evaluation (#128255) Roll to engine to 4f4486b00be28183b482bbb74bbed25f4db153fe pick up dart to 3.1.0-169.0.dev. Changes since last roll ``` 4f4486b00b Roll dart to 3.1.0-169.0.dev (#42602) ``` Manual roll since rolling to dart 3.1.0-169.0.dev requires patching to expression evaluation in flutter tools --- bin/internal/engine.version | 2 +- packages/flutter_tools/lib/src/compile.dart | 26 ++++++++++++++++++- packages/flutter_tools/lib/src/run_hot.dart | 7 ++++- .../lib/src/test/flutter_platform.dart | 7 ++++- packages/flutter_tools/lib/src/vmservice.dart | 12 +++++++-- .../compile_expression_test.dart | 10 ++++--- 6 files changed, 54 insertions(+), 10 deletions(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index c5ab0ac12ec..29db89c659d 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -59d5444cf06c7a1237ed2768d2056b102c5a702e +4f4486b00be28183b482bbb74bbed25f4db153fe diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart index 666a55f2498..3199e9c902e 100644 --- a/packages/flutter_tools/lib/src/compile.dart +++ b/packages/flutter_tools/lib/src/compile.dart @@ -396,17 +396,25 @@ class _CompileExpressionRequest extends _CompilationRequest { super.completer, this.expression, this.definitions, + this.definitionTypes, this.typeDefinitions, + this.typeBounds, + this.typeDefaults, this.libraryUri, this.klass, + this.method, this.isStatic, ); String expression; List? definitions; + List? definitionTypes; List? typeDefinitions; + List? typeBounds; + List? typeDefaults; String? libraryUri; String? klass; + String? method; bool isStatic; @override @@ -506,9 +514,13 @@ abstract class ResidentCompiler { Future compileExpression( String expression, List? definitions, + List? definitionTypes, List? typeDefinitions, + List? typeBounds, + List? typeDefaults, String? libraryUri, String? klass, + String? method, bool isStatic, ); @@ -835,9 +847,13 @@ class DefaultResidentCompiler implements ResidentCompiler { Future compileExpression( String expression, List? definitions, + List? definitionTypes, List? typeDefinitions, + List? typeBounds, + List? typeDefaults, String? libraryUri, String? klass, + String? method, bool isStatic, ) async { if (!_controller.hasListener) { @@ -846,7 +862,8 @@ class DefaultResidentCompiler implements ResidentCompiler { final Completer completer = Completer(); final _CompileExpressionRequest request = _CompileExpressionRequest( - completer, expression, definitions, typeDefinitions, libraryUri, klass, isStatic); + completer, expression, definitions, definitionTypes, typeDefinitions, + typeBounds, typeDefaults, libraryUri, klass, method, isStatic); _controller.add(request); return completer.future; } @@ -867,11 +884,18 @@ class DefaultResidentCompiler implements ResidentCompiler { ..writeln(request.expression); request.definitions?.forEach(server.stdin.writeln); server.stdin.writeln(inputKey); + request.definitionTypes?.forEach(server.stdin.writeln); + server.stdin.writeln(inputKey); request.typeDefinitions?.forEach(server.stdin.writeln); + server.stdin.writeln(inputKey); + request.typeBounds?.forEach(server.stdin.writeln); + server.stdin.writeln(inputKey); + request.typeDefaults?.forEach(server.stdin.writeln); server.stdin ..writeln(inputKey) ..writeln(request.libraryUri ?? '') ..writeln(request.klass ?? '') + ..writeln(request.method ?? '') ..writeln(request.isStatic); return _stdoutHandler.compilerOutput?.future; diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart index 9dcf7e9ded6..daf1c467fad 100644 --- a/packages/flutter_tools/lib/src/run_hot.dart +++ b/packages/flutter_tools/lib/src/run_hot.dart @@ -192,16 +192,21 @@ class HotRunner extends ResidentRunner { String isolateId, String expression, List definitions, + List definitionTypes, List typeDefinitions, + List typeBounds, + List typeDefaults, String libraryUri, String? klass, + String? method, bool isStatic, ) async { for (final FlutterDevice? device in flutterDevices) { if (device!.generator != null) { final CompilerOutput? compilerOutput = await device.generator!.compileExpression(expression, definitions, - typeDefinitions, libraryUri, klass, isStatic); + definitionTypes, typeDefinitions, typeBounds, typeDefaults, + libraryUri, klass, method, isStatic); if (compilerOutput != null && compilerOutput.expressionData != null) { return base64.encode(compilerOutput.expressionData!); } diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart index 1c1292b6b19..1ae2178014b 100644 --- a/packages/flutter_tools/lib/src/test/flutter_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart @@ -392,9 +392,13 @@ class FlutterPlatform extends PlatformPlugin { String isolateId, String expression, List definitions, + List definitionTypes, List typeDefinitions, + List typeBounds, + List typeDefaults, String libraryUri, String? klass, + String? method, bool isStatic, ) async { if (compiler == null || compiler!.compiler == null) { @@ -402,7 +406,8 @@ class FlutterPlatform extends PlatformPlugin { } final CompilerOutput? compilerOutput = await compiler!.compiler!.compileExpression(expression, definitions, - typeDefinitions, libraryUri, klass, isStatic); + definitionTypes, typeDefinitions, typeBounds, typeDefaults, libraryUri, + klass, method, isStatic); if (compilerOutput != null && compilerOutput.expressionData != null) { return base64.encode(compilerOutput.expressionData!); } diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index 7f276be8c42..b7f09b82d4a 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart @@ -108,9 +108,13 @@ typedef CompileExpression = Future Function( String isolateId, String expression, List definitions, + List definitionTypes, List typeDefinitions, + List typeBounds, + List typeDefaults, String libraryUri, String? klass, + String? method, bool isStatic, ); @@ -256,14 +260,18 @@ Future setUpVmService({ final String isolateId = _validateRpcStringParam('compileExpression', params, 'isolateId'); final String expression = _validateRpcStringParam('compileExpression', params, 'expression'); final List definitions = List.from(params['definitions']! as List); + final List definitionTypes = List.from(params['definitionTypes']! as List); final List typeDefinitions = List.from(params['typeDefinitions']! as List); + final List typeBounds = List.from(params['typeBounds']! as List); + final List typeDefaults = List.from(params['typeDefaults']! as List); final String libraryUri = params['libraryUri']! as String; final String? klass = params['klass'] as String?; + final String? method = params['method'] as String?; final bool isStatic = _validateRpcBoolParam('compileExpression', params, 'isStatic'); final String kernelBytesBase64 = await compileExpression(isolateId, - expression, definitions, typeDefinitions, libraryUri, klass, - isStatic); + expression, definitions, definitionTypes, typeDefinitions, typeBounds, typeDefaults, + libraryUri, klass, method, isStatic); return { kResultType: kResultTypeSuccess, 'result': {'kernelBytes': kernelBytesBase64}, diff --git a/packages/flutter_tools/test/general.shard/compile_expression_test.dart b/packages/flutter_tools/test/general.shard/compile_expression_test.dart index d081214abcd..ac35313bfaf 100644 --- a/packages/flutter_tools/test/general.shard/compile_expression_test.dart +++ b/packages/flutter_tools/test/general.shard/compile_expression_test.dart @@ -50,7 +50,7 @@ void main() { testWithoutContext('compile expression fails if not previously compiled', () async { final CompilerOutput? result = await generator.compileExpression( - '2+2', null, null, null, null, false); + '2+2', null, null, null, null, null, null, null, null, false); expect(result, isNull); }); @@ -93,7 +93,7 @@ void main() { 'result def\nline1\nline2\ndef\ndef /path/to/main.dart.dill.incremental 0\n' ))); generator.compileExpression( - '2+2', null, null, null, null, false).then( + '2+2', null, null, null, null, null, null, null, null, false).then( (CompilerOutput? outputExpression) { expect(outputExpression, isNotNull); expect(outputExpression!.expressionData, [1, 2, 3, 4]); @@ -142,7 +142,8 @@ void main() { // The test manages timing via completers. final Completer lastExpressionCompleted = Completer(); unawaited( - generator.compileExpression('0+1', null, null, null, null, false).then( + generator.compileExpression('0+1', null, null, null, null, null, null, + null, null, false).then( (CompilerOutput? outputExpression) { expect(outputExpression, isNotNull); expect(outputExpression!.expressionData, [0, 1, 2, 3]); @@ -159,7 +160,8 @@ void main() { // The test manages timing via completers. unawaited( - generator.compileExpression('1+1', null, null, null, null, false).then( + generator.compileExpression('1+1', null, null, null, null, null, null, + null, null, false).then( (CompilerOutput? outputExpression) { expect(outputExpression, isNotNull); expect(outputExpression!.expressionData, [4, 5, 6, 7]);