[Lldb-commits] [lldb] 5af3a66 - Remove Windows editline from LLDB
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Wed May 12 02:05:50 PDT 2021
Author: Neal (nealsid)
Date: 2021-05-12T10:05:44+01:00
New Revision: 5af3a6645f38e5638b4ba03613ee18140f36962d
URL: https://github.com/llvm/llvm-project/commit/5af3a6645f38e5638b4ba03613ee18140f36962d
DIFF: https://github.com/llvm/llvm-project/commit/5af3a6645f38e5638b4ba03613ee18140f36962d.diff
LOG: Remove Windows editline from LLDB
I don't mean to undo others' work but it looks like the hand-rolled EditLine for LLDB on Windows isn't used. It'd be easier to make changes to bring the other platforms' Editline wrapper up to date (e.g. simplifying char vs wchar_t) without modifying/testing this one too.
Reviewed By: amccarth
Differential Revision: https://reviews.llvm.org/D102208
Added:
Modified:
lldb/include/lldb/Host/Editline.h
lldb/source/Host/CMakeLists.txt
Removed:
lldb/include/lldb/Host/windows/editlinewin.h
lldb/source/Host/windows/EditLineWin.cpp
################################################################################
diff --git a/lldb/include/lldb/Host/Editline.h b/lldb/include/lldb/Host/Editline.h
index 04da25edf632a..876f6052311e9 100644
--- a/lldb/include/lldb/Host/Editline.h
+++ b/lldb/include/lldb/Host/Editline.h
@@ -40,9 +40,7 @@
#include "lldb/lldb-private.h"
-#if defined(_WIN32)
-#include "lldb/Host/windows/editlinewin.h"
-#elif !defined(__ANDROID__)
+#if !defined(_WIN32) && !defined(__ANDROID__)
#include <histedit.h>
#endif
diff --git a/lldb/include/lldb/Host/windows/editlinewin.h b/lldb/include/lldb/Host/windows/editlinewin.h
deleted file mode 100644
index 287972178cd12..0000000000000
--- a/lldb/include/lldb/Host/windows/editlinewin.h
+++ /dev/null
@@ -1,115 +0,0 @@
-//===-- editlinewin.h -------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#pragma once
-
-#include <stdio.h>
-
-// EditLine editor function return codes.
-// For user-defined function interface
-#define CC_NORM 0
-#define CC_NEWLINE 1
-#define CC_EOF 2
-#define CC_ARGHACK 3
-#define CC_REFRESH 4
-#define CC_CURSOR 5
-#define CC_ERROR 6
-#define CC_FATAL 7
-#define CC_REDISPLAY 8
-#define CC_REFRESH_BEEP 9
-
-// el_set/el_get parameters
-#define EL_PROMPT 0 // , el_pfunc_t
-#define EL_TERMINAL 1 // , const char *
-#define EL_EDITOR 2 // , const char *
-#define EL_SIGNAL 3 // , int);
-#define EL_BIND 4 // , const char *, ..., NULL
-#define EL_TELLTC 5 // , const char *, ..., NULL
-#define EL_SETTC 6 // , const char *, ..., NULL
-#define EL_ECHOTC 7 // , const char *, ..., NULL
-#define EL_SETTY 8 // , const char *, ..., NULL
-#define EL_ADDFN 9 // , const char *, const char *, el_func_t
-#define EL_HIST 10 // , hist_fun_t, const char *
-#define EL_EDITMODE 11 // , int
-#define EL_RPROMPT 12 // , el_pfunc_t
-#define EL_GETCFN 13 // , el_rfunc_t
-#define EL_CLIENTDATA 14 // , void *
-#define EL_UNBUFFERED 15 // , int
-#define EL_PREP_TERM 16 // , int
-#define EL_GETTC 17 // , const char *, ..., NULL
-#define EL_GETFP 18 // , int, FILE **
-#define EL_SETFP 19 // , int, FILE *
-#define EL_REFRESH 20 // , void
-#define EL_PROMPT_ESC 21 // , prompt_func, Char); set/get
-
-#define EL_BUILTIN_GETCFN (NULL)
-
-// history defines
-#define H_FUNC 0 // , UTSL
-#define H_SETSIZE 1 // , const int
-#define H_GETSIZE 2 // , void
-#define H_FIRST 3 // , void
-#define H_LAST 4 // , void
-#define H_PREV 5 // , void
-#define H_NEXT 6 // , void
-#define H_CURR 8 // , const int
-#define H_SET 7 // , int
-#define H_ADD 9 // , const char *
-#define H_ENTER 10 // , const char *
-#define H_APPEND 11 // , const char *
-#define H_END 12 // , void
-#define H_NEXT_STR 13 // , const char *
-#define H_PREV_STR 14 // , const char *
-#define H_NEXT_EVENT 15 // , const int
-#define H_PREV_EVENT 16 // , const int
-#define H_LOAD 17 // , const char *
-#define H_SAVE 18 // , const char *
-#define H_CLEAR 19 // , void
-#define H_SETUNIQUE 20 // , int
-#define H_GETUNIQUE 21 // , void
-#define H_DEL 22 // , int
-
-struct EditLine {};
-
-struct LineInfo {
- const char *buffer;
- const char *cursor;
- const char *lastchar;
-};
-
-struct History {};
-
-struct HistEvent {
- int num;
- const char *str;
-};
-
-extern "C" {
-// edit line API
-EditLine *el_init(const char *, FILE *, FILE *, FILE *);
-const char *el_gets(EditLine *, int *);
-int el_set(EditLine *, int, ...);
-
-void el_end(EditLine *);
-void el_reset(EditLine *);
-int el_getc(EditLine *, char *);
-void el_push(EditLine *, const char *);
-void el_beep(EditLine *);
-int el_parse(EditLine *, int, const char **);
-int el_get(EditLine *, int, ...);
-int el_source(EditLine *, const char *);
-void el_resize(EditLine *);
-const LineInfo *el_line(EditLine *);
-int el_insertstr(EditLine *, const char *);
-void el_deletestr(EditLine *, int);
-
-// history API
-History *history_init(void);
-void history_end(History *);
-int history(History *, HistEvent *, int, ...);
-}
diff --git a/lldb/source/Host/CMakeLists.txt b/lldb/source/Host/CMakeLists.txt
index 7456cb98bfa19..a018fd6c183dc 100644
--- a/lldb/source/Host/CMakeLists.txt
+++ b/lldb/source/Host/CMakeLists.txt
@@ -58,7 +58,6 @@ add_host_subdirectory(posix
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
add_host_subdirectory(windows
windows/ConnectionGenericFileWindows.cpp
- windows/EditLineWin.cpp
windows/FileSystem.cpp
windows/Host.cpp
windows/HostInfoWindows.cpp
diff --git a/lldb/source/Host/windows/EditLineWin.cpp b/lldb/source/Host/windows/EditLineWin.cpp
deleted file mode 100644
index 3567b5e241892..0000000000000
--- a/lldb/source/Host/windows/EditLineWin.cpp
+++ /dev/null
@@ -1,349 +0,0 @@
-//===-- EditLineWin.cpp ---------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// this file is only relevant for Visual C++
-#if defined(_WIN32)
-
-#include "lldb/Host/windows/windows.h"
-
-#include "lldb/Host/windows/editlinewin.h"
-#include "llvm/Support/ErrorHandling.h"
-#include <assert.h>
-#include <vector>
-
-// edit line EL_ADDFN function pointer type
-typedef unsigned char (*el_addfn_func)(EditLine *e, int ch);
-typedef const char *(*el_prompt_func)(EditLine *);
-
-// edit line wrapper binding container
-struct el_binding {
- //
- const char *name;
- const char *help;
- // function pointer to callback routine
- el_addfn_func func;
- // ascii key this function is bound to
- const char *key;
-};
-
-// stored key bindings
-static std::vector<el_binding *> _bindings;
-
-// TODO: this should in fact be related to the exact edit line context we create
-static void *clientData = NULL;
-
-// store the current prompt string
-// default to what we expect to receive anyway
-static const char *_prompt = "(lldb) ";
-
-#if !defined(_WIP_INPUT_METHOD)
-
-static char *el_get_s(char *buffer, int chars) { return gets_s(buffer, chars); }
-#else
-
-static void con_output(char _in) {
- HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
- DWORD written = 0;
- // get the cursor position
- CONSOLE_SCREEN_BUFFER_INFO info;
- GetConsoleScreenBufferInfo(hout, &info);
- // output this char
- WriteConsoleOutputCharacterA(hout, &_in, 1, info.dwCursorPosition, &written);
- // advance cursor position
- info.dwCursorPosition.X++;
- SetConsoleCursorPosition(hout, info.dwCursorPosition);
-}
-
-static void con_backspace(void) {
- HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
- DWORD written = 0;
- // get cursor position
- CONSOLE_SCREEN_BUFFER_INFO info;
- GetConsoleScreenBufferInfo(hout, &info);
- // nudge cursor backwards
- info.dwCursorPosition.X--;
- SetConsoleCursorPosition(hout, info.dwCursorPosition);
- // blank out the last character
- WriteConsoleOutputCharacterA(hout, " ", 1, info.dwCursorPosition, &written);
-}
-
-static void con_return(void) {
- HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
- DWORD written = 0;
- // get cursor position
- CONSOLE_SCREEN_BUFFER_INFO info;
- GetConsoleScreenBufferInfo(hout, &info);
- // move onto the new line
- info.dwCursorPosition.X = 0;
- info.dwCursorPosition.Y++;
- SetConsoleCursorPosition(hout, info.dwCursorPosition);
-}
-
-static bool runBind(char _key) {
- for (int i = 0; i < _bindings.size(); i++) {
- el_binding *bind = _bindings[i];
- if (bind->key[0] == _key) {
- bind->func((EditLine *)-1, _key);
- return true;
- }
- }
- return false;
-}
-
-// replacement get_s which is EL_BIND aware
-static char *el_get_s(char *buffer, int chars) {
- //
- char *head = buffer;
- //
- for (;; Sleep(10)) {
- //
- INPUT_RECORD _record;
- //
- DWORD _read = 0;
- if (ReadConsoleInputA(GetStdHandle(STD_INPUT_HANDLE), &_record, 1,
- &_read) == FALSE)
- break;
- // if we didn't read a key
- if (_read == 0)
- continue;
- // only interested in key events
- if (_record.EventType != KEY_EVENT)
- continue;
- // is the key down
- if (!_record.Event.KeyEvent.bKeyDown)
- continue;
- // read the ascii key character
- char _key = _record.Event.KeyEvent.uChar.AsciiChar;
- // non ascii conformant key press
- if (_key == 0) {
- // check the scan code
- // if VK_UP scroll back through history
- // if VK_DOWN scroll forward through history
- continue;
- }
- // try to execute any bind this key may have
- if (runBind(_key))
- continue;
- // if we read a return key
- if (_key == '\n' || _key == '\r') {
- con_return();
- break;
- }
- // key is backspace
- if (_key == 0x8) {
- // avoid deleting past beginning
- if (head > buffer) {
- con_backspace();
- head--;
- }
- continue;
- }
-
- // add this key to the input buffer
- if ((head - buffer) < (chars - 1)) {
- con_output(_key);
- *(head++) = _key;
- }
- }
- // insert end of line character
- *head = '\0';
-
- return buffer;
-}
-#endif
-
-// edit line initialize
-EditLine *el_init(const char *, FILE *, FILE *, FILE *) {
- //
- SetConsoleTitleA("lldb");
- // return dummy handle
- return (EditLine *)-1;
-}
-
-const char *el_gets(EditLine *el, int *length) {
- // print the prompt if we have one
- if (_prompt != NULL)
- printf("%s", _prompt);
- // create a buffer for the user input
- char *buffer = new char[MAX_PATH];
- // try to get user input string
- if (el_get_s(buffer, MAX_PATH)) {
- // get the string length in 'length'
- while (buffer[*length] != '\0')
- (*length)++;
- // return the input buffer
- // remember that this memory has the be free'd somewhere
- return buffer;
- } else {
- // on error
- delete[] buffer;
- return NULL;
- }
-}
-
-int el_set(EditLine *el, int code, ...) {
- va_list vl;
- va_start(vl, code);
- //
- switch (code) {
- // edit line set prompt message
- case (EL_PROMPT): {
- // EL_PROMPT, char *(*f)( EditLine *)
- // define a prompt printing function as 'f', which is to return a
- // string that
- // contains the prompt.
-
- // get the function pointer from the arg list
- void *func_vp = (void *)va_arg(vl, el_prompt_func);
- // cast to suitable prototype
- el_prompt_func func_fp = (el_prompt_func)func_vp;
- // call to get the prompt as a string
- _prompt = func_fp(el);
- } break;
-
- case (EL_PROMPT_ESC): {
- // EL_PROMPT, char *(*f)( EditLine *)
- // define a prompt printing function as 'f', which is to return a
- // string that
- // contains the prompt.
-
- // get the function pointer from the arg list
- void *func_vp = (void *)va_arg(vl, el_prompt_func);
- va_arg(vl, int);
- // call to get the prompt as a string
- el_prompt_func func_fp = (el_prompt_func)func_vp;
- _prompt = func_fp(el);
- } break;
-
- case (EL_EDITOR): {
- // EL_EDITOR, const char *mode
- // set editing mode to "emacs" or "vi"
- } break;
- case (EL_HIST): {
- // EL_HIST, History *(*fun)(History *, int op, ... ), const char *ptr
- // defines which history function to use, which is usually history().
- // Ptr should be the
- // value returned by history_init().
- } break;
- case (EL_ADDFN): {
- // EL_ADDFN, const char *name, const char *help, unsigned char
- // (*func)(EditLine *e, int ch)
- // add a user defined function, func), referred to as 'name' which is
- // invoked when a key which is bound to 'name' is
- // entered. 'help' is a description of 'name'. at invocation time, 'ch'
- // is the key which caused the invocation. the
- // return value of 'func()' should be one of:
- // CC_NORM add a normal character
- // CC_NEWLINE end of line was entered
- // CC_EOF EOF was entered
- // CC_ARGHACK expecting further command input as arguments, do
- // nothing visually.
- // CC_REFRESH refresh display.
- // CC_REFRESH_BEEP refresh display and beep.
- // CC_CURSOR cursor moved so update and perform CC_REFRESH
- // CC_REDISPLAY redisplay entire input line. this is useful
- // if a key binding outputs extra information.
- // CC_ERROR an error occurred. beep and flush tty.
- // CC_FATAL fatal error, reset tty to known state.
-
- el_binding *binding = new el_binding;
- binding->name = va_arg(vl, const char *);
- binding->help = va_arg(vl, const char *);
- binding->func = va_arg(vl, el_addfn_func);
- binding->key = 0;
- // add this to the bindings list
- _bindings.push_back(binding);
- } break;
- case (EL_BIND): {
- // EL_BIND, const char *, ..., NULL
- // perform the BIND built-in command. Refer to editrc(5) for more
- // information.
-
- const char *name = va_arg(vl, const char *);
-
- for (auto bind : _bindings) {
- if (strcmp(bind->name, name) == 0) {
- bind->key = va_arg(vl, const char *);
- break;
- }
- }
-
- } break;
- case (EL_CLIENTDATA): {
- clientData = va_arg(vl, void *);
- } break;
- }
- return 0;
-}
-
-void el_end(EditLine *el) {
- // assert( !"Not implemented!" );
-}
-
-void el_reset(EditLine *) { llvm_unreachable("Not implemented!"); }
-
-int el_getc(EditLine *, char *) {
- llvm_unreachable("Not implemented!");
-}
-
-void el_push(EditLine *, const char *) {}
-
-void el_beep(EditLine *) { Beep(1000, 500); }
-
-int el_parse(EditLine *, int, const char **) {
- llvm_unreachable("Not implemented!");
-}
-
-int el_get(EditLine *el, int code, ...) {
- va_list vl;
- va_start(vl, code);
-
- switch (code) {
- case (EL_CLIENTDATA): {
- void **dout = va_arg(vl, void **);
- *dout = clientData;
- } break;
- default:
- llvm_unreachable("Not implemented!");
- }
- return 0;
-}
-
-int el_source(EditLine *el, const char *file) {
- // init edit line by reading the contents of 'file' nothing to do here on
- // windows...
- return 0;
-}
-
-void el_resize(EditLine *) { llvm_unreachable("Not implemented!"); }
-
-const LineInfo *el_line(EditLine *el) { return 0; }
-
-int el_insertstr(EditLine *, const char *) {
- // assert( !"Not implemented!" );
- return 0;
-}
-
-void el_deletestr(EditLine *, int) { llvm_unreachable("Not implemented!"); }
-
-History *history_init(void) {
- // return dummy handle
- return (History *)-1;
-}
-
-void history_end(History *) {
- // assert( !"Not implemented!" );
-}
-
-int history(History *, HistEvent *, int op, ...) {
- // perform operation 'op' on the history list with optional arguments as
- // needed by the operation.
- return 0;
-}
-
-#endif
More information about the lldb-commits
mailing list