Revert "[vm/kernel] Expression execution through Kernel.
This reverts commit afd0a52a5ae02c22e00526f74f2449958dff40e7.
Reason for revert: Breaks kernel-a32 and kernel-rbc bots
Original change's description:
> [vm/kernel] Expression execution through Kernel.
>
> Change-Id: Id90c91cb3b71f9ce703e21fe48147b86a7764d34
> Reviewed-on: https://dart-review.googlesource.com/42562
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Alexander Aprelev <aam@google.com>
> Commit-Queue: Samir Jindel <sjindel@google.com>
TBR=aam@google.com,rmacnak@google.com,sjindel@google.com
Change-Id: If1ecad6145aeab81d5d3581798a628ead0265c38
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/54420
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
diff --git a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
index 768cb71..76e4075 100644
--- a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
@@ -61,7 +61,6 @@
String expression,
Map<String, DartType> definitions,
List<TypeParameter> typeDefinitions,
- String syntheticProcedureName,
Uri libraryUri,
[String className,
bool isStatic = false]);
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index bbd98f8..f23b510 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -360,7 +360,6 @@
String expression,
Map<String, DartType> definitions,
List<TypeParameter> typeDefinitions,
- String syntheticProcedureName,
Uri libraryUri,
[String className,
bool isStatic = false]) async {
@@ -441,7 +440,7 @@
debugLibrary, className, className != null && !isStatic, parameters);
Procedure procedure = new Procedure(
- new Name(syntheticProcedureName), ProcedureKind.Method, parameters,
+ new Name("debugExpr"), ProcedureKind.Method, parameters,
isStatic: isStatic);
parameters.body = new ReturnStatement(compiledExpression)
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index d95f852..8bcda60 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -6,10 +6,7 @@
import 'dart:io' show BytesBuilder, File, IOSink;
-import 'package:kernel/clone.dart' show CloneVisitor;
-
-import 'package:kernel/ast.dart'
- show Library, Component, Procedure, Class, TypeParameter, Supertype;
+import 'package:kernel/ast.dart' show Library, Component;
import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
@@ -61,39 +58,6 @@
return byteSink.builder.takeBytes();
}
-List<int> serializeProcedure(Procedure procedure) {
- Library fakeLibrary =
- new Library(new Uri(scheme: 'evaluate', path: 'source'));
-
- if (procedure.parent is Class) {
- Class realClass = procedure.parent;
-
- CloneVisitor cloner = new CloneVisitor();
-
- Class fakeClass = new Class(name: realClass.name);
- for (TypeParameter typeParam in realClass.typeParameters) {
- fakeClass.typeParameters.add(typeParam.accept(cloner));
- }
-
- fakeClass.parent = fakeLibrary;
- fakeClass.supertype = new Supertype.byReference(
- realClass.supertype.className,
- realClass.supertype.typeArguments.map(cloner.visitType).toList());
-
- // Rebind the type parameters in the procedure.
- procedure = procedure.accept(cloner);
- procedure.parent = fakeClass;
- fakeClass.procedures.add(procedure);
- fakeLibrary.classes.add(fakeClass);
- } else {
- fakeLibrary.procedures.add(procedure);
- procedure.parent = fakeLibrary;
- }
-
- Component program = new Component(libraries: [fakeLibrary]);
- return serializeComponent(program);
-}
-
/// A [Sink] that directly writes data into a byte builder.
class ByteSink implements Sink<List<int>> {
final BytesBuilder builder = new BytesBuilder();
diff --git a/pkg/front_end/test/fasta/expression_test.dart b/pkg/front_end/test/fasta/expression_test.dart
index ee97b9d..4a21e78 100644
--- a/pkg/front_end/test/fasta/expression_test.dart
+++ b/pkg/front_end/test/fasta/expression_test.dart
@@ -325,7 +325,6 @@
test.expression,
definitions,
typeParams,
- "debugExpr",
test.library,
test.className,
test.isStaticMethod);
diff --git a/pkg/status_file/test/data/vm.status b/pkg/status_file/test/data/vm.status
index 726d64e..e446356 100644
--- a/pkg/status_file/test/data/vm.status
+++ b/pkg/status_file/test/data/vm.status
@@ -217,7 +217,6 @@
cc/IsolateReload_KernelIncrementalCompile: Skip
cc/IsolateReload_KernelIncrementalCompileAppAndLib: Skip
cc/IsolateReload_KernelIncrementalCompileGenerics: Skip
-cc/IsolateReload_KernelIncrementalCompileExpression: Skip
cc/Mixin_PrivateSuperResolution: Skip
cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Skip
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index 0590e39..329b554 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -33,7 +33,7 @@
show computePlatformBinariesLocation;
import 'package:front_end/src/fasta/kernel/utils.dart';
import 'package:front_end/src/fasta/hybrid_file_system.dart';
-import 'package:kernel/kernel.dart' show Component, Procedure;
+import 'package:kernel/kernel.dart' show Component;
import 'package:kernel/target/targets.dart' show TargetFlags;
import 'package:kernel/target/vm.dart' show VmTarget;
import 'package:vm/incremental_compiler.dart';
@@ -49,15 +49,10 @@
// 1 - Update in-memory file system with in-memory sources (used by tests).
// 2 - Accept last compilation result.
// 3 - APP JIT snapshot training run for kernel_service.
-// 4 - Compile an individual expression in some context (for debugging
-// purposes).
const int kCompileTag = 0;
const int kUpdateSourcesTag = 1;
const int kAcceptTag = 2;
const int kTrainTag = 3;
-const int kCompileExpressionTag = 4;
-
-bool allowDartInternalImport = false;
abstract class Compiler {
final FileSystem fileSystem;
@@ -182,10 +177,9 @@
}
}
-final Map<int, IncrementalCompilerWrapper> isolateCompilers =
- new Map<int, IncrementalCompilerWrapper>();
+final Map<int, Compiler> isolateCompilers = new Map<int, Compiler>();
-IncrementalCompilerWrapper lookupIncrementalCompiler(int isolateId) {
+Compiler lookupIncrementalCompiler(int isolateId) {
return isolateCompilers[isolateId];
}
@@ -248,60 +242,10 @@
// Process a request from the runtime. See KernelIsolate::CompileToKernel in
// kernel_isolate.cc and Loader::SendKernelRequest in loader.cc.
-Future _processExpressionCompilationRequest(request) async {
- final SendPort port = request[1];
- final int isolateId = request[2];
- final String expression = request[3];
- final List definitions = request[4];
- final List typeDefinitions = request[5];
- final String libraryUri = request[6];
- final String klass = request[7]; // might be null
- final bool isStatic = request[8];
-
- IncrementalCompilerWrapper compiler = isolateCompilers[isolateId];
-
- if (compiler == null) {
- port.send(new CompilationResult.errors(
- ["No incremental compiler available for this isolate."]).toResponse());
- return;
- }
-
- compiler.errors.clear();
-
- CompilationResult result;
- try {
- Procedure procedure = await compiler.generator.compileExpression(
- expression, definitions, typeDefinitions, libraryUri, klass, isStatic);
-
- if (procedure == null) {
- port.send(new CompilationResult.errors(["Invalid scope."]).toResponse());
- return;
- }
-
- if (compiler.errors.isNotEmpty) {
- // TODO(sigmund): the compiler prints errors to the console, so we
- // shouldn't print those messages again here.
- result = new CompilationResult.errors(compiler.errors);
- } else {
- result = new CompilationResult.ok(serializeProcedure(procedure));
- }
- } catch (error, stack) {
- result = new CompilationResult.crash(error, stack);
- }
-
- port.send(result.toResponse());
-}
-
Future _processLoadRequest(request) async {
if (verbose) print("DFE: request: $request");
int tag = request[0];
-
- if (tag == kCompileExpressionTag) {
- await _processExpressionCompilationRequest(request);
- return;
- }
-
final SendPort port = request[1];
final String inputFileUri = request[2];
final Uri script =
diff --git a/pkg/vm/lib/incremental_compiler.dart b/pkg/vm/lib/incremental_compiler.dart
index 3541bc2..91d9426 100644
--- a/pkg/vm/lib/incremental_compiler.dart
+++ b/pkg/vm/lib/incremental_compiler.dart
@@ -10,8 +10,6 @@
import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
import 'package:kernel/kernel.dart';
-const String kDebugProcedureName = ":Eval";
-
/// Wrapper around [IncrementalKernelGenerator] that keeps track of rejected
/// deltas and combines them together into resultant program until it is
/// accepted.
@@ -76,30 +74,4 @@
_pendingDeltas.clear();
fullComponent = true;
}
-
- Future<Procedure> compileExpression(
- String expression,
- List<String> definitions,
- List<String> typeDefinitions,
- String libraryUri,
- String klass,
- bool isStatic) {
- Map<String, DartType> completeDefinitions = {};
- for (String name in definitions) {
- if (!isLegalIdentifier(name)) continue;
- completeDefinitions[name] = new DynamicType();
- }
-
- List<TypeParameter> typeParameters = [];
- for (String name in typeDefinitions) {
- if (!isLegalIdentifier(name)) continue;
- typeParameters.add(new TypeParameter(name, new DynamicType()));
- }
-
- Uri library = Uri.parse(libraryUri);
- if (library == null) return null;
-
- return _generator.compileExpression(expression, completeDefinitions,
- typeParameters, kDebugProcedureName, library, klass, isStatic);
- }
}
diff --git a/runtime/observatory/tests/service/async_generator_breakpoint_test.dart b/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
index 79c6be7..6781af7 100644
--- a/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
+++ b/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
@@ -69,8 +69,7 @@
var hits = [];
- isolate.rootLibrary.evaluate('testerReady = true').then((result) {
- print(result);
+ isolate.rootLibrary.evaluate('testerReady = true;').then((result) {
expect((result as Instance).valueAsString, equals('true'));
});
diff --git a/runtime/observatory/tests/service/bad_reload_test.dart b/runtime/observatory/tests/service/bad_reload_test.dart
index 23927e9..8e9aed7 100644
--- a/runtime/observatory/tests/service/bad_reload_test.dart
+++ b/runtime/observatory/tests/service/bad_reload_test.dart
@@ -72,11 +72,9 @@
expect(reasonForCancelling['type'], equals('ReasonForCancelling'));
expect(reasonForCancelling['message'], contains('library_isnt_here_man'));
- // TODO(32341): enable in Dart 2
- if (!Platform.executableArguments.contains("--preview_dart_2")) {
- String v2 = await invokeTest(spawnedIsolate);
- expect(v2, 'apple');
- }
+ // Invoke test in v2.
+ String v2 = await invokeTest(spawnedIsolate);
+ expect(v2, 'apple');
}
];
diff --git a/runtime/observatory/tests/service/debugger_inspect_test.dart b/runtime/observatory/tests/service/debugger_inspect_test.dart
index 4f8f680..c52c42f 100644
--- a/runtime/observatory/tests/service/debugger_inspect_test.dart
+++ b/runtime/observatory/tests/service/debugger_inspect_test.dart
@@ -32,7 +32,7 @@
});
// Start listening for events first.
- await isolate.rootLibrary.evaluate('testeeDo()');
+ await isolate.rootLibrary.evaluate('testeeDo();');
return completer.future;
},
];
diff --git a/runtime/observatory/tests/service/evaluate_activation_test.dart b/runtime/observatory/tests/service/evaluate_activation_test.dart
index cb352cd..fc87190 100644
--- a/runtime/observatory/tests/service/evaluate_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_activation_test.dart
@@ -114,7 +114,7 @@
}
});
- var result = await rootLib.evaluate('new C().method(3)');
+ var result = await rootLib.evaluate('new C().method(3);');
print("Result $result");
expect(hitBreakpoint, isTrue);
}
@@ -163,7 +163,7 @@
}
});
- var result = await rootLib.evaluate('C.method2(3)');
+ var result = await rootLib.evaluate('C.method2(3);');
print("Result $result");
expect(hitBreakpoint, isTrue);
}
@@ -204,7 +204,7 @@
}
});
- var result = await rootLib.evaluate('new C().method3(3)');
+ var result = await rootLib.evaluate('new C().method3(3);');
print("Result $result");
expect(hitBreakpoint, isTrue);
}
diff --git a/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart b/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart
index 6211574..c458396 100644
--- a/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart
@@ -40,7 +40,7 @@
// Expect a simple path through variable x instead of long path filled
// with VM objects
(Isolate isolate) async {
- var target1 = await eval(isolate, 'x');
+ var target1 = await eval(isolate, 'x;');
var params = {
'targetId': target1['id'],
'limit': 100,
@@ -56,7 +56,7 @@
// Expect a simple path through variable fn instead of long path filled
// with VM objects
(Isolate isolate) async {
- var target2 = await eval(isolate, 'fn');
+ var target2 = await eval(isolate, 'fn;');
var params = {
'targetId': target2['id'],
'limit': 100,
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 8a8fd82..c9b5f1d 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -11,6 +11,7 @@
async_star_step_out_test: RuntimeError # Issue 29158, Async debugging
async_step_out_test: RuntimeError # Issue 29158, Async debugging
awaiter_async_stack_contents_test: RuntimeError # Issue 29158, Async debugging
+eval_internal_class_test: RuntimeError
evaluate_activation_in_method_class_test: RuntimeError
evaluate_activation_test/instance: RuntimeError
evaluate_activation_test/scope: RuntimeError
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index b097d1e..1c25d3c 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -55,7 +55,6 @@
[ $compiler != dartk ]
cc/IsolateReload_KernelIncrementalCompile: SkipByDesign
cc/IsolateReload_KernelIncrementalCompileAppAndLib: SkipByDesign
-cc/IsolateReload_KernelIncrementalCompileExpression: SkipByDesign
cc/IsolateReload_KernelIncrementalCompileGenerics: SkipByDesign
cc/Mixin_PrivateSuperResolution: Skip
cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Skip
diff --git a/runtime/vm/bootstrap.cc b/runtime/vm/bootstrap.cc
index 66037a1..2bd04fa 100644
--- a/runtime/vm/bootstrap.cc
+++ b/runtime/vm/bootstrap.cc
@@ -336,7 +336,7 @@
// The platform binary may contain other libraries (e.g., dart:_builtin or
// dart:io) that will not be bundled with application. Load them now.
- const Object& result = Object::Handle(zone, loader.LoadProgram());
+ const Object& result = loader.LoadProgram();
if (result.IsError()) {
return Error::Cast(result).raw();
}
diff --git a/runtime/vm/bootstrap_nocore.cc b/runtime/vm/bootstrap_nocore.cc
index b311558..679c41f 100644
--- a/runtime/vm/bootstrap_nocore.cc
+++ b/runtime/vm/bootstrap_nocore.cc
@@ -96,7 +96,7 @@
// The platform binary may contain other libraries (e.g., dart:_builtin or
// dart:io) that will not be bundled with application. Load them now.
- const Object& result = Object::Handle(loader.LoadProgram());
+ const Object& result = loader.LoadProgram();
if (result.IsError()) {
return Error::Cast(result).raw();
}
diff --git a/runtime/vm/compiler_test.cc b/runtime/vm/compiler_test.cc
index bbc4d16..091dd5d 100644
--- a/runtime/vm/compiler_test.cc
+++ b/runtime/vm/compiler_test.cc
@@ -179,10 +179,6 @@
}
ISOLATE_UNIT_TEST_CASE(EvalExpressionWithLazyCompile) {
- { // Initialize an incremental compiler in DFE mode.
- TransitionVMToNative transition(thread);
- TestCase::LoadTestScript("", NULL);
- }
Library& lib = Library::Handle(Library::CoreLibrary());
const String& expression = String::Handle(
@@ -197,10 +193,6 @@
}
ISOLATE_UNIT_TEST_CASE(EvalExpressionExhaustCIDs) {
- { // Initialize an incremental compiler in DFE mode.
- TransitionVMToNative transition(thread);
- TestCase::LoadTestScript("", NULL);
- }
Library& lib = Library::Handle(Library::CoreLibrary());
const String& expression = String::Handle(String::New("3 + 4"));
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index 3c30629..1362438 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -8,7 +8,6 @@
#include "vm/debugger_api_impl_test.h"
#include "vm/globals.h"
#include "vm/isolate.h"
-#include "vm/kernel_loader.h"
#include "vm/lockers.h"
#include "vm/thread_barrier.h"
#include "vm/thread_pool.h"
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index 90325c2..cf12542 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -52,7 +52,6 @@
const int KernelIsolate::kUpdateSourcesTag = 1;
const int KernelIsolate::kAcceptTag = 2;
const int KernelIsolate::kTrainTag = 3;
-const int KernelIsolate::kCompileExpressionTag = 4;
Dart_IsolateCreateCallback KernelIsolate::create_callback_ = NULL;
Monitor* KernelIsolate::monitor_ = new Monitor();
@@ -342,125 +341,6 @@
}
Dart_KernelCompilationResult SendAndWaitForResponse(
- Dart_Port kernel_port,
- const char* expression,
- const Array& definitions,
- const Array& type_definitions,
- char const* library_uri,
- char const* klass,
- bool is_static) {
- Dart_CObject tag;
- tag.type = Dart_CObject_kInt32;
- tag.value.as_int32 = KernelIsolate::kCompileExpressionTag;
-
- Dart_CObject send_port;
- send_port.type = Dart_CObject_kSendPort;
- send_port.value.as_send_port.id = port_;
- send_port.value.as_send_port.origin_id = ILLEGAL_PORT;
-
- Dart_CObject expression_object;
- expression_object.type = Dart_CObject_kString;
- expression_object.value.as_string = const_cast<char*>(expression);
-
- Dart_CObject definitions_object;
- intptr_t num_definitions = definitions.Length();
- definitions_object.type = Dart_CObject_kArray;
- definitions_object.value.as_array.length = num_definitions;
-
- Dart_CObject** definitions_array = new Dart_CObject*[num_definitions];
- for (intptr_t i = 0; i < num_definitions; ++i) {
- definitions_array[i] = new Dart_CObject;
- definitions_array[i]->type = Dart_CObject_kString;
- definitions_array[i]->value.as_string = const_cast<char*>(
- String::CheckedHandle(definitions.At(i)).ToCString());
- }
- definitions_object.value.as_array.values = definitions_array;
-
- Dart_CObject type_definitions_object;
- intptr_t num_type_definitions = type_definitions.Length();
- type_definitions_object.type = Dart_CObject_kArray;
- type_definitions_object.value.as_array.length = num_type_definitions;
-
- Dart_CObject** type_definitions_array =
- new Dart_CObject*[num_type_definitions];
- for (intptr_t i = 0; i < num_type_definitions; ++i) {
- type_definitions_array[i] = new Dart_CObject;
- type_definitions_array[i]->type = Dart_CObject_kString;
- type_definitions_array[i]->value.as_string = const_cast<char*>(
- String::CheckedHandle(type_definitions.At(i)).ToCString());
- }
- type_definitions_object.value.as_array.values = type_definitions_array;
-
- Dart_CObject library_uri_object;
- library_uri_object.type = Dart_CObject_kString;
- library_uri_object.value.as_string = const_cast<char*>(library_uri);
-
- Dart_CObject class_object;
- if (klass != NULL) {
- class_object.type = Dart_CObject_kString;
- class_object.value.as_string = const_cast<char*>(klass);
- } else {
- class_object.type = Dart_CObject_kNull;
- }
-
- Dart_CObject is_static_object;
- is_static_object.type = Dart_CObject_kBool;
- is_static_object.value.as_bool = is_static;
-
- Isolate* isolate =
- Thread::Current() != NULL ? Thread::Current()->isolate() : NULL;
- ASSERT(isolate != NULL);
- Dart_CObject isolate_id;
- isolate_id.type = Dart_CObject_kInt64;
- isolate_id.value.as_int64 =
- isolate != NULL ? static_cast<int64_t>(isolate->main_port()) : 0;
-
- Dart_CObject message;
- message.type = Dart_CObject_kArray;
- Dart_CObject suppress_warnings;
- suppress_warnings.type = Dart_CObject_kBool;
- suppress_warnings.value.as_bool = FLAG_suppress_fe_warnings;
-
- Dart_CObject dart_sync_async;
- dart_sync_async.type = Dart_CObject_kBool;
- dart_sync_async.value.as_bool = FLAG_sync_async;
-
- Dart_CObject* message_arr[] = {&tag,
- &send_port,
- &isolate_id,
- &expression_object,
- &definitions_object,
- &type_definitions_object,
- &library_uri_object,
- &class_object,
- &is_static_object,
- &suppress_warnings,
- &dart_sync_async};
- message.value.as_array.values = message_arr;
- message.value.as_array.length = ARRAY_SIZE(message_arr);
- // Send the message.
- Dart_PostCObject(kernel_port, &message);
-
- // Wait for reply to arrive.
- MonitorLocker ml(monitor_);
- while (result_.status == Dart_KernelCompilationStatus_Unknown) {
- ml.Wait();
- }
-
- for (intptr_t i = 0; i < num_definitions; ++i) {
- delete definitions_array[i];
- }
- delete[] definitions_array;
-
- for (intptr_t i = 0; i < num_type_definitions; ++i) {
- delete type_definitions_array[i];
- }
- delete[] type_definitions_array;
-
- return result_;
- }
-
- Dart_KernelCompilationResult SendAndWaitForResponse(
int request_tag,
Dart_Port kernel_port,
const char* script_uri,
@@ -722,27 +602,6 @@
0, NULL, true, NULL);
}
-Dart_KernelCompilationResult KernelIsolate::CompileExpressionToKernel(
- const char* expression,
- const Array& definitions,
- const Array& type_definitions,
- const char* library_url,
- const char* klass,
- bool is_static) {
- Dart_Port kernel_port = WaitForKernelPort();
- if (kernel_port == ILLEGAL_PORT) {
- Dart_KernelCompilationResult result;
- result.status = Dart_KernelCompilationStatus_Unknown;
- result.error = strdup("Error while initializing Kernel isolate");
- return result;
- }
-
- KernelCompilationRequest request;
- return request.SendAndWaitForResponse(kernel_port, expression, definitions,
- type_definitions, library_url, klass,
- is_static);
-}
-
Dart_KernelCompilationResult KernelIsolate::UpdateInMemorySources(
int source_files_count,
Dart_SourceFile source_files[]) {
diff --git a/runtime/vm/kernel_isolate.h b/runtime/vm/kernel_isolate.h
index 2e45b52..f9084cf 100644
--- a/runtime/vm/kernel_isolate.h
+++ b/runtime/vm/kernel_isolate.h
@@ -8,7 +8,6 @@
#if !defined(DART_PRECOMPILED_RUNTIME)
#include "include/dart_api.h"
-#include "include/dart_native_api.h"
#include "vm/allocation.h"
#include "vm/dart.h"
@@ -23,7 +22,6 @@
static const int kUpdateSourcesTag;
static const int kAcceptTag;
static const int kTrainTag;
- static const int kCompileExpressionTag;
static void Run();
@@ -48,14 +46,6 @@
int source_files_count,
Dart_SourceFile source_files[]);
- static Dart_KernelCompilationResult CompileExpressionToKernel(
- const char* expression,
- const Array& definitions,
- const Array& type_definitions,
- const char* library_url,
- const char* klass,
- bool is_static);
-
protected:
static Monitor* monitor_;
static Dart_IsolateCreateCallback create_callback_;
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index d151f4e..6a3358c 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -195,7 +195,7 @@
bool process_pending_classes) {
if (program->is_single_program()) {
KernelLoader loader(program);
- return Object::Handle(loader.LoadProgram(process_pending_classes));
+ return loader.LoadProgram(process_pending_classes);
}
kernel::Reader reader(program->kernel_data(), program->kernel_data_size());
@@ -216,7 +216,7 @@
Program* subprogram = Program::ReadFrom(&reader, false);
ASSERT(subprogram->is_single_program());
KernelLoader loader(subprogram);
- Object& load_result = Object::Handle(loader.LoadProgram(false));
+ Object& load_result = loader.LoadProgram(false);
if (load_result.IsError()) return load_result;
if (library.IsNull() && load_result.IsLibrary()) {
@@ -545,7 +545,7 @@
potential_extension_libraries_ = GrowableObjectArray::null();
}
-RawObject* KernelLoader::LoadProgram(bool process_pending_classes) {
+Object& KernelLoader::LoadProgram(bool process_pending_classes) {
ASSERT(kernel_program_info_.constants() == Array::null());
if (!program_->is_single_program()) {
@@ -557,15 +557,15 @@
LongJumpScope jump;
if (setjmp(*jump.Set()) == 0) {
const intptr_t length = program_->library_count();
- Object& last_library = Library::Handle(Z);
for (intptr_t i = 0; i < length; i++) {
- last_library = LoadLibrary(i);
+ LoadLibrary(i);
}
if (process_pending_classes) {
if (!ClassFinalizer::ProcessPendingClasses()) {
// Class finalization failed -> sticky error would be set.
- RawError* error = H.thread()->sticky_error();
+ Error& error = Error::Handle(Z);
+ error = H.thread()->sticky_error();
H.thread()->clear_sticky_error();
return error;
}
@@ -586,18 +586,19 @@
NameIndex main = program_->main_method();
if (main == -1) {
- return Library::null();
+ return Library::Handle(Z);
}
NameIndex main_library = H.EnclosingName(main);
Library& library = LookupLibrary(main_library);
- return library.raw();
+ return library;
}
// Either class finalization failed or we caught a compile error.
// In both cases sticky error would be set.
- RawError* error = thread_->sticky_error();
+ Error& error = Error::Handle(Z);
+ error = thread_->sticky_error();
thread_->clear_sticky_error();
return error;
}
@@ -682,7 +683,7 @@
field.set_has_initializer(false);
}
-RawLibrary* KernelLoader::LoadLibrary(intptr_t index) {
+void KernelLoader::LoadLibrary(intptr_t index) {
if (!program_->is_single_program()) {
FATAL(
"Trying to load a concatenated dill file at a time where that is "
@@ -712,16 +713,15 @@
// snapshot so we skip loading 'dart:vmservice_io'.
skip_vmservice_library_ = library_helper.canonical_name_;
ASSERT(H.IsLibrary(skip_vmservice_library_));
- return Library::null();
+ return;
}
}
- Library& library =
- Library::Handle(Z, LookupLibrary(library_helper.canonical_name_).raw());
+ Library& library = LookupLibrary(library_helper.canonical_name_);
// The Kernel library is external implies that it is already loaded.
ASSERT(!library_helper.IsExternal() || library.Loaded());
- if (library.Loaded()) return library.raw();
+ if (library.Loaded()) return;
library_kernel_data_ =
TypedData::New(kTypedDataUint8ArrayCid, library_size, Heap::kOld);
@@ -846,8 +846,6 @@
toplevel_class.SetFunctions(Array::Handle(MakeFunctionsArray()));
classes.Add(toplevel_class, Heap::kOld);
if (!library.Loaded()) library.SetLoaded();
-
- return library.raw();
}
void KernelLoader::LoadLibraryImportsAndExports(Library* library) {
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 21f4bb2..ed47893 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -128,7 +128,7 @@
// Returns the library containing the main procedure, null if there
// was no main procedure, or a failure object if there was an error.
- RawObject* LoadProgram(bool process_pending_classes = true);
+ Object& LoadProgram(bool process_pending_classes = true);
// Finds all libraries that have been modified in this incremental
// version of the kernel program file.
@@ -137,7 +137,7 @@
BitVector* modified_libs,
bool force_reload);
- RawLibrary* LoadLibrary(intptr_t index);
+ void LoadLibrary(intptr_t index);
static void FinishLoading(const Class& klass);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 4923104..1e84c31 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -34,8 +34,6 @@
#include "vm/heap.h"
#include "vm/isolate_reload.h"
#include "vm/kernel.h"
-#include "vm/kernel_isolate.h"
-#include "vm/kernel_loader.h"
#include "vm/native_symbol.h"
#include "vm/object_store.h"
#include "vm/parser.h"
@@ -3197,14 +3195,6 @@
return String::ConcatAll(Array::Handle(Array::MakeFixedLength(src_pieces)));
}
-static RawObject* EvaluateWithDFEHelper(const String& expression,
- const Array& definitions,
- const Array& type_definitions,
- const String& library_url,
- const String& klass,
- bool is_static,
- const Array& arguments);
-
RawFunction* Function::EvaluateHelper(const Class& cls,
const String& expr,
const Array& param_names,
@@ -3231,12 +3221,6 @@
return func.raw();
}
-#if !defined(DART_PRECOMPILED_RUNTIME)
-static void ReleaseFetchedBytes(uint8_t* buffer) {
- free(buffer);
-}
-#endif
-
RawObject* Class::Evaluate(const String& expr,
const Array& param_names,
const Array& param_values) const {
@@ -3248,17 +3232,11 @@
return UnhandledException::New(exception, stacktrace);
}
- if (Library::Handle(library()).kernel_data() == TypedData::null()) {
- const Function& eval_func = Function::Handle(
- Function::EvaluateHelper(*this, expr, param_names, true));
- return DartEntry::InvokeFunction(eval_func, param_values);
- }
-
- return EvaluateWithDFEHelper(
- expr, param_names, Array::Handle(Array::New(0)),
- String::Handle(Library::Handle(library()).url()),
- IsTopLevel() ? String::Handle() : String::Handle(UserVisibleName()),
- !IsTopLevel(), param_values);
+ const Function& eval_func = Function::Handle(
+ Function::EvaluateHelper(*this, expr, param_names, true));
+ const Object& result =
+ Object::Handle(DartEntry::InvokeFunction(eval_func, param_values));
+ return result.raw();
}
// Ensure that top level parsing of the class has been done.
@@ -6055,9 +6033,6 @@
// This field is heavily overloaded:
// eval function: Script expression source
-// kernel eval function: Array[0] = Script
-// Array[1] = Kernel data
-// Array[2] = Kernel offset of enclosing library
// signature function: SignatureData
// method extractor: Function extracted closure function
// noSuchMethod dispatcher: Array arguments descriptor
@@ -7530,26 +7505,9 @@
return PatchClass::Cast(obj).origin_class();
}
-void Function::SetKernelDataAndScript(const Script& script,
- const TypedData& data,
- intptr_t offset) {
- Array& data_field = Array::Handle(Array::New(3));
- data_field.SetAt(0, script);
- data_field.SetAt(1, data);
- data_field.SetAt(2, Smi::Handle(Smi::New(offset)));
- set_data(data_field);
-}
-
RawScript* Function::script() const {
// NOTE(turnidge): If you update this function, you probably want to
// update Class::PatchFieldsAndFunctions() at the same time.
- Object& data = Object::Handle(raw_ptr()->data_);
- if (data.IsArray()) {
- Object& script = Object::Handle(Array::Cast(data).At(0));
- if (script.IsScript()) {
- return Script::Cast(script).raw();
- }
- }
if (token_pos() == TokenPosition::kMinSource) {
// Testing for position 0 is an optimization that relies on temporary
// eval functions having token position 0.
@@ -7574,13 +7532,6 @@
}
RawTypedData* Function::KernelData() const {
- Object& data = Object::Handle(raw_ptr()->data_);
- if (data.IsArray()) {
- Object& script = Object::Handle(Array::Cast(data).At(0));
- if (script.IsScript()) {
- return TypedData::RawCast(Array::Cast(data).At(1));
- }
- }
if (IsClosureFunction()) {
Function& parent = Function::Handle(parent_function());
ASSERT(!parent.IsNull());
@@ -7597,13 +7548,6 @@
}
intptr_t Function::KernelDataProgramOffset() const {
- Object& data = Object::Handle(raw_ptr()->data_);
- if (data.IsArray()) {
- Object& script = Object::Handle(Array::Cast(data).At(0));
- if (script.IsScript()) {
- return Smi::Value(Smi::RawCast(Array::Cast(data).At(2)));
- }
- }
if (IsClosureFunction()) {
Function& parent = Function::Handle(parent_function());
ASSERT(!parent.IsNull());
@@ -11366,15 +11310,10 @@
RawObject* Library::Evaluate(const String& expr,
const Array& param_names,
const Array& param_values) const {
- if (kernel_data() == TypedData::null()) {
- // Evaluate the expression as a static function of the toplevel class.
- Class& top_level_class = Class::Handle(toplevel_class());
- ASSERT(top_level_class.is_finalized());
- return top_level_class.Evaluate(expr, param_names, param_values);
- }
- return EvaluateWithDFEHelper(expr, param_names, Array::Handle(Array::New(0)),
- String::Handle(url()), String::Handle(), false,
- param_values);
+ // Evaluate the expression as a static function of the toplevel class.
+ Class& top_level_class = Class::Handle(toplevel_class());
+ ASSERT(top_level_class.is_finalized());
+ return top_level_class.Evaluate(expr, param_names, param_values);
}
void Library::InitNativeWrappersLibrary(Isolate* isolate, bool is_kernel) {
@@ -11431,118 +11370,6 @@
};
typedef UnorderedHashMap<LibraryLookupTraits> LibraryLookupMap;
-static RawObject* EvaluateWithDFEHelper(const String& expression,
- const Array& definitions,
- const Array& type_definitions,
- const String& library_url,
- const String& klass,
- bool is_static,
- const Array& arguments) {
-#if defined(DART_PRECOMPILED_RUNTIME)
- const String& error_str = String::Handle(
- String::New("Kernel service isolate not available in precompiled mode."));
- return ApiError::New(error_str);
-#else
- Isolate* I = Isolate::Current();
- Thread* T = Thread::Current();
-
- Dart_KernelCompilationResult compilation_result;
- {
- TransitionVMToNative transition(T);
- compilation_result = KernelIsolate::CompileExpressionToKernel(
- expression.ToCString(), definitions, type_definitions,
- library_url.ToCString(), klass.IsNull() ? NULL : klass.ToCString(),
- is_static);
- }
-
- Function& callee = Function::Handle();
- intptr_t num_cids = I->class_table()->NumCids();
- intptr_t num_libs =
- GrowableObjectArray::Handle(I->object_store()->libraries()).Length();
-
- void* kernel_pgm = NULL;
- if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
- const String& prefix =
- String::Handle(String::New("Kernel isolate rejected this request:\n"));
- const String& error_str = String::Handle(String::Concat(
- prefix, String::Handle(String::New(compilation_result.error))));
- free(compilation_result.error);
- return ApiError::New(error_str);
- }
-
- const uint8_t* kernel_file = compilation_result.kernel;
- intptr_t kernel_length = compilation_result.kernel_size;
- ASSERT(kernel_file != NULL);
- kernel_pgm =
- Dart_ReadKernelBinary(kernel_file, kernel_length, ReleaseFetchedBytes);
- if (kernel_pgm == NULL) {
- return ApiError::New(String::Handle(
- String::New("Kernel isolate returned ill-formed kernel.")));
- }
-
- // Load the program with the debug procedure as a regular, independent
- // program.
- kernel::KernelLoader loader(reinterpret_cast<kernel::Program*>(kernel_pgm));
- loader.LoadProgram();
- ASSERT(I->class_table()->NumCids() > num_cids &&
- GrowableObjectArray::Handle(I->object_store()->libraries()).Length() ==
- num_libs + 1);
- const String& fake_library_url =
- String::Handle(String::New("evaluate:source"));
- const Library& loaded =
- Library::Handle(Library::LookupLibrary(T, fake_library_url));
- ASSERT(!loaded.IsNull());
-
- String& debug_name = String::Handle(
- String::New(Symbols::Symbol(Symbols::kDebugProcedureNameId)));
- Class& fake_class = Class::Handle();
- if (!klass.IsNull()) {
- fake_class = loaded.LookupClass(String::Handle(String::New(klass)));
- ASSERT(!fake_class.IsNull());
- callee = fake_class.LookupFunctionAllowPrivate(debug_name);
- } else {
- callee = loaded.LookupFunctionAllowPrivate(debug_name);
- }
- ASSERT(!callee.IsNull());
-
- // Save the loaded library's kernel data to the generic "data" field of the
- // callee, so it doesn't require access it's parent library during
- // compilation.
- callee.SetKernelDataAndScript(Script::Handle(callee.script()),
- TypedData::Handle(loaded.kernel_data()),
- loaded.kernel_offset());
-
- // Reparent the callee to the real enclosing class so we can remove the fake
- // class and library from the object store.
- const Library& real_library =
- Library::Handle(Library::LookupLibrary(T, library_url));
- ASSERT(!real_library.IsNull());
- Class& real_class = Class::Handle();
- if (!klass.IsNull()) {
- real_class = real_library.LookupClass(String::Handle(String::New(klass)));
- } else {
- real_class = real_library.toplevel_class();
- }
- ASSERT(!real_class.IsNull());
-
- callee.set_owner(real_class);
-
- // Unlink the fake library and class from the object store.
- GrowableObjectArray::Handle(I->object_store()->libraries())
- .SetLength(num_libs);
- I->class_table()->SetNumCids(num_cids);
- if (!fake_class.IsNull()) {
- fake_class.set_id(kIllegalCid);
- }
- LibraryLookupMap libraries_map(I->object_store()->libraries_map());
- bool removed = libraries_map.Remove(fake_library_url);
- ASSERT(removed);
- I->object_store()->set_libraries_map(libraries_map.Release());
-
- return DartEntry::InvokeFunction(callee, arguments);
-#endif
-}
-
// Returns library with given url in current isolate, or NULL.
RawLibrary* Library::LookupLibrary(Thread* thread, const String& url) {
Zone* zone = thread->zone();
@@ -15695,6 +15522,8 @@
const String& expr,
const Array& param_names,
const Array& param_values) const {
+ const Function& eval_func = Function::Handle(
+ Function::EvaluateHelper(method_cls, expr, param_names, false));
const Array& args = Array::Handle(Array::New(1 + param_values.Length()));
PassiveObject& param = PassiveObject::Handle();
args.SetAt(0, *this);
@@ -15702,18 +15531,7 @@
param = param_values.At(i);
args.SetAt(i + 1, param);
}
-
- const Library& library = Library::Handle(method_cls.library());
- if (library.kernel_data() == TypedData::null()) {
- const Function& eval_func = Function::Handle(
- Function::EvaluateHelper(method_cls, expr, param_names, false));
- return DartEntry::InvokeFunction(eval_func, args);
- } else {
- return EvaluateWithDFEHelper(
- expr, param_names, Array::Handle(Array::New(0)),
- String::Handle(Library::Handle(method_cls.library()).url()),
- String::Handle(method_cls.UserVisibleName()), false, args);
- }
+ return DartEntry::InvokeFunction(eval_func, args);
}
RawObject* Instance::HashCode() const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 7d373a9..6a99622 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2130,7 +2130,6 @@
void ZeroEdgeCounters() const;
RawClass* Owner() const;
- void set_owner(const Object& value) const;
RawClass* origin() const;
RawScript* script() const;
RawObject* RawOwner() const { return raw_ptr()->owner_; }
@@ -2489,10 +2488,6 @@
set_optimized_call_site_count(value);
}
- void SetKernelDataAndScript(const Script& script,
- const TypedData& data,
- intptr_t offset);
-
intptr_t KernelDataProgramOffset() const;
RawTypedData* KernelData() const;
@@ -2893,6 +2888,7 @@
void set_name(const String& value) const;
void set_kind(RawFunction::Kind value) const;
void set_parent_function(const Function& value) const;
+ void set_owner(const Object& value) const;
RawFunction* implicit_closure_function() const;
void set_implicit_closure_function(const Function& value) const;
RawInstance* implicit_static_closure() const;
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 0fc1385..4890d04 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -4495,7 +4495,6 @@
LinkedHashMap& cc_map = LinkedHashMap::Handle(LinkedHashMap::NewDefault());
// 3. Expect them to have identical structure.
- TransitionNativeToVM transition(thread);
CheckIdenticalHashStructure(dart_map, cc_map);
}
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 5ca98a9..4b3f6bc 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -450,8 +450,7 @@
V(PrependTypeArguments, "_prependTypeArguments") \
V(DartDeveloperCausalAsyncStacks, "dart.developer.causal_async_stacks") \
V(_AsyncStarListenHelper, "_asyncStarListenHelper") \
- V(GrowRegExpStack, "_growRegExpStack") \
- V(DebugProcedureName, ":Eval")
+ V(GrowRegExpStack, "_growRegExpStack")
// Contains a list of frequently used strings in a canonicalized form. This
// list is kept in the vm_isolate in order to share the copy across isolates
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 7dd78a0..10795eb 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -267,13 +267,7 @@
url, FLAG_strong ? platform_strong_dill : platform_dill,
FLAG_strong ? platform_strong_dill_size : platform_dill_size,
sourcefiles_count, sourcefiles, incrementally, NULL);
- return ValidateCompilationResult(zone, compilation_result, kernel_pgm);
-}
-char* TestCase::ValidateCompilationResult(
- Zone* zone,
- Dart_KernelCompilationResult compilation_result,
- void** kernel_pgm) {
if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
char* result =
OS::SCreate(zone, "Compilation failed %s", compilation_result.error);
diff --git a/runtime/vm/unit_test.h b/runtime/vm/unit_test.h
index 7a500d4..5aa1d6a 100644
--- a/runtime/vm/unit_test.h
+++ b/runtime/vm/unit_test.h
@@ -379,10 +379,6 @@
const char* name,
void* data = NULL);
- static char* ValidateCompilationResult(Zone* zone,
- Dart_KernelCompilationResult result,
- void** kernel_pgm);
-
RunEntry* const run_;
};