Files
swift-mirror/lib/Driver/Action.cpp
Jordan Rose 9c6ddc085f [driver] Add -lldb-repl and -integrated-repl modes.
Since LLDB is taking over as the REPL for Swift, we eventually want "swift"
and "swift -repl" to invoke "lldb --repl" rather than the frontend. However,
we only want to do this if the LLDB that's present is related to the Swift
that's present -- we don't want to invoke some random LLDB on the system
or in some other Xcode installation. Therefore, Swift searches for LLDB--
first next to the driver, then in the usr/bin/ outside of a toolchain--
before choosing to use it.

If the user just passes -repl and an LLDB is not found relative to the
driver, the existing "integrated" REPL will be launched instead.*

If the user passes -lldb-repl and an LLDB is not found relative to the
driver, one from the user's PATH will be chosen (like the linker).

The user can also pass -integrated-repl to get the existing behavior.
"swift -frontend -repl" always uses the integrated REPL.

* Since LLDB's not quite ready to be the REPL yet, "swift -repl" still
invokes the integrated REPL. "swift -repl -experimental-prefer-lldb" tests
the new behavior; this option will become the default (and the flag removed)
in <rdar://problem/16776719>.

<rdar://problem/16776705>

Swift SVN r17134
2014-05-01 02:15:53 +00:00

50 lines
1.2 KiB
C++

//===--- Action.cpp - Abstract compilation steps --------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#include "swift/Driver/Action.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/ErrorHandling.h"
using namespace swift::driver;
using namespace llvm::opt;
Action::~Action() {
if (OwnsInputs) {
llvm::DeleteContainerPointers(Inputs);
}
}
const char *Action::getClassName(ActionClass AC) {
switch (AC) {
case Input: return "input";
case CompileJob: return "compile";
case MergeModuleJob: return "merge-module";
case REPLJob: return "repl";
case LinkJob: return "link";
}
llvm_unreachable("invalid class");
}
void InputAction::anchor() {}
void JobAction::anchor() {}
void CompileJobAction::anchor() {}
void MergeModuleJobAction::anchor() {}
void REPLJobAction::anchor() {}
void LinkJobAction::anchor() {}