Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1599)

Unified Diff: pkg/fletchc/lib/src/worker/worker_main.dart

Issue 1659163007: Rename fletch -> dartino (Closed) Base URL: https://github.com/dartino/sdk.git@master
Patch Set: address comments Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/fletchc/lib/src/worker/developer.dart ('k') | pkg/fletchc/lib/src/zone_helper.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/fletchc/lib/src/worker/worker_main.dart
diff --git a/pkg/fletchc/lib/src/worker/worker_main.dart b/pkg/fletchc/lib/src/worker/worker_main.dart
deleted file mode 100644
index bb7526b65e4f339a6e4e44bf931d3e4297d5bc79..0000000000000000000000000000000000000000
--- a/pkg/fletchc/lib/src/worker/worker_main.dart
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE.md file.
-
-library fletchc.worker_isolate;
-
-import 'dart:async' show
- Completer,
- EventSink,
- Future,
- Stream,
- StreamController,
- StreamIterator,
- StreamSubscription,
- StreamTransformer,
- ZoneSpecification,
- runZoned;
-
-import 'dart:isolate' show
- ReceivePort,
- SendPort;
-
-import '../hub/client_commands.dart' show
- ClientCommand,
- ClientCommandCode,
- CommandSender;
-
-import '../diagnostic.dart' show
- DiagnosticKind,
- InputError,
- throwInternalError;
-
-import '../hub/exit_codes.dart' show
- COMPILER_EXITCODE_CRASH;
-
-// This class is used to send commands from the worker isolate back to the
-// hub (main isolate).
-// TODO(ahe): Send ClientCommands directly when they are canonicalized
-// correctly, see issue 23244.
-class HubCommandSender extends CommandSender {
- final SendPort port;
-
- HubCommandSender(this.port);
-
- void sendExitCode(int exitCode) {
- port.send([ClientCommandCode.ExitCode.index, exitCode]);
- }
-
- void sendDataCommand(ClientCommandCode commandCode, List<int> data) {
- port.send([commandCode.index, data]);
- }
-
- void sendClose() {
- port.send([ClientCommandCode.ClosePort.index, null]);
- }
-
- void sendEventLoopStarted() {
- port.send([ClientCommandCode.EventLoopStarted.index, null]);
- }
-}
-
-Future<Null> workerMain(SendPort port) async {
- ReceivePort receivePort = new ReceivePort();
- port.send(receivePort.sendPort);
- port = null;
- StreamIterator iterator = new StreamIterator(receivePort);
- while (await iterator.moveNext()) {
- await beginSession(iterator.current);
- }
-}
-
-Future<Null> beginSession(SendPort port) {
- ReceivePort receivePort = new ReceivePort();
- port.send([ClientCommandCode.SendPort.index, receivePort.sendPort]);
- return handleClient(port, receivePort);
-}
-
-Future<int> doInZone(void printLineOnStdout(line), Future<int> f()) {
- ZoneSpecification specification = new ZoneSpecification(
- print: (_1, _2, _3, String line) => printLineOnStdout(line));
- return runZoned(f, zoneSpecification: specification);
-}
-
-Future<Null> handleClient(SendPort clientOutgoing, ReceivePort clientIncoming) {
- WorkerSideTask task =
- new WorkerSideTask(clientIncoming, new HubCommandSender(clientOutgoing));
-
- return doInZone(task.printLineOnStdout, task.perform).then((int exitCode) {
- task.endTask(exitCode);
- });
-}
-
-/// Represents a task running in this worker isolate.
-class WorkerSideTask {
- final ReceivePort clientIncoming;
-
- final HubCommandSender commandSender;
-
- final StreamController<ClientCommand> filteredIncomingCommands =
- new StreamController<ClientCommand>();
-
- final Completer<int> taskCompleter = new Completer<int>();
-
- List<String> receivedArguments;
-
- WorkerSideTask(this.clientIncoming, this.commandSender);
-
- void printLineOnStdout(String line) {
- commandSender.sendStdout("$line\n");
- }
-
- Stream<ClientCommand> buildIncomingCommandStream() {
- void handleData(List message, EventSink<ClientCommand> sink) {
- int code = message[0];
- var data = message[1];
- sink.add(new ClientCommand(ClientCommandCode.values[code], data));
- }
- StreamTransformer<List, ClientCommand> commandDecoder =
- new StreamTransformer<List, ClientCommand>.fromHandlers(
- handleData: handleData);
- return clientIncoming.transform(commandDecoder);
- }
-
- void handleIncomingCommand(ClientCommand command) {
- if (command.code == ClientCommandCode.PerformTask) {
- performTask(command.data).then(taskCompleter.complete);
- } else {
- filteredIncomingCommands.add(command);
- }
- }
-
- void handleError(error, StackTrace stackTrace) {
- filteredIncomingCommands.addError(error, stackTrace);
- }
-
- void handleDone() {
- filteredIncomingCommands.close();
- }
-
- Future<int> performTask(
- Future<int> task(
- CommandSender commandSender,
- StreamIterator<ClientCommand> commandIterator)) async {
- StreamIterator<ClientCommand> commandIterator =
- new StreamIterator<ClientCommand>(filteredIncomingCommands.stream);
-
- try {
- return await task(commandSender, commandIterator);
- } on InputError catch (error, stackTrace) {
- // TODO(ahe): Send [error] instead.
- commandSender.sendStderr("${error.asDiagnostic().formatMessage()}\n");
- if (error.kind == DiagnosticKind.internalError) {
- commandSender.sendStderr("$stackTrace\n");
- return COMPILER_EXITCODE_CRASH;
- } else {
- return 1;
- }
- }
- }
-
- Future<int> perform() {
- StreamSubscription<ClientCommand> subscription =
- buildIncomingCommandStream().listen(null);
- subscription
- ..onData(handleIncomingCommand)
- ..onError(handleError)
- ..onDone(handleDone);
- return taskCompleter.future;
- }
-
- void endTask(int exitCode) {
- clientIncoming.close();
- commandSender.sendExitCode(exitCode);
- commandSender.sendClose();
- }
-}
« no previous file with comments | « pkg/fletchc/lib/src/worker/developer.dart ('k') | pkg/fletchc/lib/src/zone_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698