@@ -474,6 +474,7 @@ static void f_abs __ARGS((typval_T *argvars, typval_T *rettv));
474474static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
475475#endif
476476static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
477+ static void f_and __ARGS((typval_T *argvars, typval_T *rettv));
477478static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
478479static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
479480static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
@@ -602,6 +603,7 @@ static void f_inputrestore __ARGS((typval_T *argvars, typval_T *rettv));
602603static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
603604static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
604605static void f_insert __ARGS((typval_T *argvars, typval_T *rettv));
606+ static void f_invert __ARGS((typval_T *argvars, typval_T *rettv));
605607static void f_isdirectory __ARGS((typval_T *argvars, typval_T *rettv));
606608static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
607609static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
@@ -640,6 +642,7 @@ static void f_mzeval __ARGS((typval_T *argvars, typval_T *rettv));
640642#endif
641643static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
642644static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
645+ static void f_or __ARGS((typval_T *argvars, typval_T *rettv));
643646static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
644647#ifdef FEAT_FLOAT
645648static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
@@ -751,6 +754,7 @@ static void f_winrestview __ARGS((typval_T *argvars, typval_T *rettv));
751754static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
752755static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
753756static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
757+ static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
754758
755759static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
756760static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
@@ -7715,6 +7719,7 @@ static struct fst
77157719 {"acos", 1, 1, f_acos}, /* WJMc */
77167720#endif
77177721 {"add", 2, 2, f_add},
7722+ {"and", 2, 2, f_and},
77187723 {"append", 2, 2, f_append},
77197724 {"argc", 0, 0, f_argc},
77207725 {"argidx", 0, 0, f_argidx},
@@ -7850,6 +7855,7 @@ static struct fst
78507855 {"inputsave", 0, 0, f_inputsave},
78517856 {"inputsecret", 1, 2, f_inputsecret},
78527857 {"insert", 2, 3, f_insert},
7858+ {"invert", 1, 1, f_invert},
78537859 {"isdirectory", 1, 1, f_isdirectory},
78547860 {"islocked", 1, 1, f_islocked},
78557861 {"items", 1, 1, f_items},
@@ -7888,6 +7894,7 @@ static struct fst
78887894#endif
78897895 {"nextnonblank", 1, 1, f_nextnonblank},
78907896 {"nr2char", 1, 1, f_nr2char},
7897+ {"or", 2, 2, f_or},
78917898 {"pathshorten", 1, 1, f_pathshorten},
78927899#ifdef FEAT_FLOAT
78937900 {"pow", 2, 2, f_pow},
@@ -7999,6 +8006,7 @@ static struct fst
79998006 {"winsaveview", 0, 0, f_winsaveview},
80008007 {"winwidth", 1, 1, f_winwidth},
80018008 {"writefile", 2, 3, f_writefile},
8009+ {"xor", 2, 2, f_xor},
80028010};
80038011
80048012#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
@@ -8571,6 +8579,18 @@ f_add(argvars, rettv)
85718579 EMSG(_(e_listreq));
85728580}
85738581
8582+ /*
8583+ * "and(expr, expr)" function
8584+ */
8585+ static void
8586+ f_and(argvars, rettv)
8587+ typval_T *argvars;
8588+ typval_T *rettv;
8589+ {
8590+ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
8591+ & get_tv_number_chk(&argvars[1], NULL);
8592+ }
8593+
85748594/*
85758595 * "append(lnum, string/list)" function
85768596 */
@@ -12957,6 +12977,17 @@ f_insert(argvars, rettv)
1295712977 }
1295812978}
1295912979
12980+ /*
12981+ * "invert(expr)" function
12982+ */
12983+ static void
12984+ f_invert(argvars, rettv)
12985+ typval_T *argvars;
12986+ typval_T *rettv;
12987+ {
12988+ rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
12989+ }
12990+
1296012991/*
1296112992 * "isdirectory()" function
1296212993 */
@@ -14107,6 +14138,18 @@ f_nr2char(argvars, rettv)
1410714138 rettv->vval.v_string = vim_strsave(buf);
1410814139}
1410914140
14141+ /*
14142+ * "or(expr, expr)" function
14143+ */
14144+ static void
14145+ f_or(argvars, rettv)
14146+ typval_T *argvars;
14147+ typval_T *rettv;
14148+ {
14149+ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
14150+ | get_tv_number_chk(&argvars[1], NULL);
14151+ }
14152+
1411014153/*
1411114154 * "pathshorten()" function
1411214155 */
@@ -18393,6 +18436,19 @@ f_writefile(argvars, rettv)
1839318436 rettv->vval.v_number = ret;
1839418437}
1839518438
18439+ /*
18440+ * "xor(expr, expr)" function
18441+ */
18442+ static void
18443+ f_xor(argvars, rettv)
18444+ typval_T *argvars;
18445+ typval_T *rettv;
18446+ {
18447+ rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
18448+ ^ get_tv_number_chk(&argvars[1], NULL);
18449+ }
18450+
18451+
1839618452/*
1839718453 * Translate a String variable into a position.
1839818454 * Returns NULL when there is an error.
0 commit comments