neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

eval.h (5297B)


      1 #pragma once
      2 
      3 #include <stdbool.h>
      4 #include <stddef.h>
      5 #include <stdint.h>
      6 
      7 #include "nvim/channel_defs.h"  // IWYU pragma: keep
      8 #include "nvim/cmdexpand_defs.h"  // IWYU pragma: keep
      9 #include "nvim/eval/typval_defs.h"
     10 #include "nvim/eval_defs.h"  // IWYU pragma: keep
     11 #include "nvim/event/defs.h"
     12 #include "nvim/ex_cmds_defs.h"  // IWYU pragma: keep
     13 #include "nvim/grid_defs.h"  // IWYU pragma: keep
     14 #include "nvim/hashtab_defs.h"
     15 #include "nvim/macros_defs.h"
     16 #include "nvim/mbyte_defs.h"  // IWYU pragma: keep
     17 #include "nvim/msgpack_rpc/channel_defs.h"  // IWYU pragma: keep
     18 #include "nvim/option_defs.h"  // IWYU pragma: keep
     19 #include "nvim/os/fileio_defs.h"  // IWYU pragma: keep
     20 #include "nvim/os/stdpaths_defs.h"  // IWYU pragma: keep
     21 #include "nvim/types_defs.h"  // IWYU pragma: keep
     22 #include "nvim/vim_defs.h"  // IWYU pragma: keep
     23 
     24 #define COPYID_INC 2
     25 #define COPYID_MASK (~0x1)
     26 
     27 // Structure returned by get_lval() and used by set_var_lval().
     28 // For a plain name:
     29 //      "name"      points to the variable name.
     30 //      "exp_name"  is NULL.
     31 //      "tv"        is NULL
     32 // For a magic braces name:
     33 //      "name"      points to the expanded variable name.
     34 //      "exp_name"  is non-NULL, to be freed later.
     35 //      "tv"        is NULL
     36 // For an index in a list:
     37 //      "name"      points to the (expanded) variable name.
     38 //      "exp_name"  NULL or non-NULL, to be freed later.
     39 //      "tv"        points to the (first) list item value
     40 //      "li"        points to the (first) list item
     41 //      "range", "n1", "n2" and "empty2" indicate what items are used.
     42 // For an existing Dict item:
     43 //      "name"      points to the (expanded) variable name.
     44 //      "exp_name"  NULL or non-NULL, to be freed later.
     45 //      "tv"        points to the dict item value
     46 //      "newkey"    is NULL
     47 // For a non-existing Dict item:
     48 //      "name"      points to the (expanded) variable name.
     49 //      "exp_name"  NULL or non-NULL, to be freed later.
     50 //      "tv"        points to the Dictionary typval_T
     51 //      "newkey"    is the key for the new item.
     52 typedef struct {
     53  const char *ll_name;  ///< Start of variable name (can be NULL).
     54  size_t ll_name_len;   ///< Length of the .ll_name.
     55  char *ll_exp_name;    ///< NULL or expanded name in allocated memory.
     56  typval_T *ll_tv;      ///< Typeval of item being used.  If "newkey"
     57  ///< isn't NULL it's the Dict to which to add the item.
     58  listitem_T *ll_li;  ///< The list item or NULL.
     59  list_T *ll_list;    ///< The list or NULL.
     60  bool ll_range;      ///< true when a [i:j] range was used.
     61  bool ll_empty2;     ///< Second index is empty: [i:].
     62  int ll_n1;          ///< First index for list.
     63  int ll_n2;          ///< Second index for list range.
     64  dict_T *ll_dict;    ///< The Dict or NULL.
     65  dictitem_T *ll_di;  ///< The dictitem or NULL.
     66  char *ll_newkey;    ///< New key for Dict in allocated memory or NULL.
     67  blob_T *ll_blob;    ///< The Blob or NULL.
     68 } lval_T;
     69 
     70 /// enum used by var_flavour()
     71 typedef enum {
     72  VAR_FLAVOUR_DEFAULT = 1,   // doesn't start with uppercase
     73  VAR_FLAVOUR_SESSION = 2,   // starts with uppercase, some lower
     74  VAR_FLAVOUR_SHADA   = 4,  // all uppercase
     75 } var_flavour_T;
     76 
     77 // Struct passed to get_v_event() and restore_v_event().
     78 typedef struct {
     79  bool sve_did_save;
     80  hashtab_T sve_hashtab;
     81 } save_v_event_T;
     82 
     83 /// trans_function_name() flags
     84 typedef enum {
     85  TFN_INT = 1,  ///< May use internal function name
     86  TFN_QUIET = 2,  ///< Do not emit error messages.
     87  TFN_NO_AUTOLOAD = 4,  ///< Do not use script autoloading.
     88  TFN_NO_DEREF = 8,  ///< Do not dereference a Funcref.
     89  TFN_READ_ONLY = 16,  ///< Will not change the variable.
     90 } TransFunctionNameFlags;
     91 
     92 /// get_lval() flags
     93 typedef enum {
     94  GLV_QUIET = TFN_QUIET,  ///< Do not emit error messages.
     95  GLV_NO_AUTOLOAD = TFN_NO_AUTOLOAD,  ///< Do not use script autoloading.
     96  GLV_READ_ONLY = TFN_READ_ONLY,  ///< Indicates that caller will not change
     97                                  ///< the value (prevents error message).
     98 } GetLvalFlags;
     99 
    100 /// flags for find_name_end()
    101 #define FNE_INCL_BR     1       // find_name_end(): include [] in name
    102 #define FNE_CHECK_START 2       // find_name_end(): check name starts with
    103                                // valid character
    104 
    105 typedef struct {
    106  TimeWatcher tw;
    107  int timer_id;
    108  int repeat_count;
    109  int refcount;
    110  int emsg_count;  ///< Errors in a repeating timer.
    111  int64_t timeout;
    112  bool stopped;
    113  bool paused;
    114  Callback callback;
    115 } timer_T;
    116 
    117 /// types for expressions.
    118 typedef enum {
    119  EXPR_UNKNOWN = 0,
    120  EXPR_EQUAL,         ///< ==
    121  EXPR_NEQUAL,        ///< !=
    122  EXPR_GREATER,       ///< >
    123  EXPR_GEQUAL,        ///< >=
    124  EXPR_SMALLER,       ///< <
    125  EXPR_SEQUAL,        ///< <=
    126  EXPR_MATCH,         ///< =~
    127  EXPR_NOMATCH,       ///< !~
    128  EXPR_IS,            ///< is
    129  EXPR_ISNOT,         ///< isnot
    130 } exprtype_T;
    131 
    132 // Used for checking if local variables or arguments used in a lambda.
    133 extern bool *eval_lavars_used;
    134 
    135 // Character used as separated in autoload function/variable names.
    136 #define AUTOLOAD_CHAR '#'
    137 
    138 /// Flag for expression evaluation.
    139 enum {
    140  EVAL_EVALUATE = 1,  ///< when missing don't actually evaluate
    141 };
    142 
    143 /// Passed to an eval() function to enable evaluation.
    144 EXTERN evalarg_T EVALARG_EVALUATE INIT( = { EVAL_EVALUATE, NULL, NULL, NULL });
    145 
    146 #include "eval.h.generated.h"