diff options
| author | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:17:51 -0500 | 
|---|---|---|
| committer | b-r-o-c-k <brockmammen@gmail.com> | 2018-04-14 14:17:51 -0500 | 
| commit | ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f (patch) | |
| tree | 92de2079e80f5f289dd87a54af123cb7d90c3058 /src/nvim/api/private/helpers.c | |
| parent | 78bc52ea5397c092d01cd08296fe1dc85d998329 (diff) | |
| parent | ef4feab0e75be19c5f41d70a001db980b72090f5 (diff) | |
| download | rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.tar.gz rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.tar.bz2 rneovim-ad999eaa775d7d4b0cacedb30c6ea3a0ee699a6f.zip  | |
Merge branch 'master' into s-dash-stdin
Diffstat (limited to 'src/nvim/api/private/helpers.c')
| -rw-r--r-- | src/nvim/api/private/helpers.c | 32 | 
1 files changed, 18 insertions, 14 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 629873998e..12a4279dd7 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -26,6 +26,7 @@  #include "nvim/version.h"  #include "nvim/lib/kvec.h"  #include "nvim/getchar.h" +#include "nvim/ui.h"  /// Helper structure for vim_to_object  typedef struct { @@ -46,13 +47,15 @@ typedef struct {  /// @param[out]  tstate  Location where try state should be saved.  void try_enter(TryState *const tstate)  { +  // TODO(ZyX-I): Check whether try_enter()/try_leave() may use +  //              enter_cleanup()/leave_cleanup(). Or +  //              save_dbg_stuff()/restore_dbg_stuff().    *tstate = (TryState) {      .current_exception = current_exception,      .msg_list = (const struct msglist *const *)msg_list,      .private_msg_list = NULL,      .trylevel = trylevel,      .got_int = got_int, -    .did_throw = did_throw,      .need_rethrow = need_rethrow,      .did_emsg = did_emsg,    }; @@ -60,7 +63,6 @@ void try_enter(TryState *const tstate)    current_exception = NULL;    trylevel = 1;    got_int = false; -  did_throw = false;    need_rethrow = false;    did_emsg = false;  } @@ -81,7 +83,6 @@ bool try_leave(const TryState *const tstate, Error *const err)    assert(trylevel == 0);    assert(!need_rethrow);    assert(!got_int); -  assert(!did_throw);    assert(!did_emsg);    assert(msg_list == &tstate->private_msg_list);    assert(*msg_list == NULL); @@ -90,7 +91,6 @@ bool try_leave(const TryState *const tstate, Error *const err)    current_exception = tstate->current_exception;    trylevel = tstate->trylevel;    got_int = tstate->got_int; -  did_throw = tstate->did_throw;    need_rethrow = tstate->need_rethrow;    did_emsg = tstate->did_emsg;    return ret; @@ -126,7 +126,7 @@ bool try_end(Error *err)    did_emsg = false;    if (got_int) { -    if (did_throw) { +    if (current_exception) {        // If we got an interrupt, discard the current exception        discard_current_exception();      } @@ -145,7 +145,7 @@ bool try_end(Error *err)      if (should_free) {        xfree(msg);      } -  } else if (did_throw) { +  } else if (current_exception) {      api_set_error(err, kErrorTypeException, "%s", current_exception->value);      discard_current_exception();    } @@ -566,7 +566,7 @@ static inline void typval_encode_dict_end(EncodedData *const edata)      typval_encode_dict_end(edata)  #define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \ -    TYPVAL_ENCODE_CONV_NIL() +    TYPVAL_ENCODE_CONV_NIL(val)  #define TYPVAL_ENCODE_SCOPE static  #define TYPVAL_ENCODE_NAME object @@ -783,22 +783,20 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)        break;      case kObjectTypeArray: { -      list_T *const list = tv_list_alloc(); +      list_T *const list = tv_list_alloc((ptrdiff_t)obj.data.array.size);        for (uint32_t i = 0; i < obj.data.array.size; i++) {          Object item = obj.data.array.items[i]; -        listitem_T *li = tv_list_item_alloc(); +        typval_T li_tv; -        if (!object_to_vim(item, &li->li_tv, err)) { -          // cleanup -          tv_list_item_free(li); +        if (!object_to_vim(item, &li_tv, err)) {            tv_list_free(list);            return false;          } -        tv_list_append(list, li); +        tv_list_append_owned_tv(list, li_tv);        } -      list->lv_refcount++; +      tv_list_ref(list);        tv->v_type = VAR_LIST;        tv->vval.v_list = list; @@ -957,6 +955,12 @@ static void init_ui_event_metadata(Dictionary *metadata)    msgpack_rpc_to_object(&unpacked.data, &ui_events);    msgpack_unpacked_destroy(&unpacked);    PUT(*metadata, "ui_events", ui_events); +  Array ui_options = ARRAY_DICT_INIT; +  ADD(ui_options, STRING_OBJ(cstr_to_string("rgb"))); +  for (UIExtension i = 0; i < kUIExtCount; i++) { +    ADD(ui_options, STRING_OBJ(cstr_to_string(ui_ext_names[i]))); +  } +  PUT(*metadata, "ui_options", ARRAY_OBJ(ui_options));  }  static void init_error_type_metadata(Dictionary *metadata)  | 
