comparison src/eval.c @ 5796:f084024c0ddb v7.4.242

updated for version 7.4.242 Problem: getreg() does not distinguish between a NL used for a line break and a NL used for a NUL character. Solution: Add another argument to return a list. (ZyX)
author Bram Moolenaar <bram@vim.org>
date Wed, 02 Apr 2014 19:55:10 +0200
parents a63d0cd691dc
children 9f8fa56f1906
comparison
equal deleted inserted replaced
5795:64e4633f0751 5796:f084024c0ddb
2456 char_u *s; 2456 char_u *s;
2457 2457
2458 p = get_tv_string_chk(tv); 2458 p = get_tv_string_chk(tv);
2459 if (p != NULL && op != NULL && *op == '.') 2459 if (p != NULL && op != NULL && *op == '.')
2460 { 2460 {
2461 s = get_reg_contents(*arg == '@' ? '"' : *arg, TRUE, TRUE); 2461 s = get_reg_contents(*arg == '@' ? '"' : *arg, GREG_EXPR_SRC);
2462 if (s != NULL) 2462 if (s != NULL)
2463 { 2463 {
2464 p = ptofree = concat_str(s, p); 2464 p = ptofree = concat_str(s, p);
2465 vim_free(s); 2465 vim_free(s);
2466 } 2466 }
5119 */ 5119 */
5120 case '@': ++*arg; 5120 case '@': ++*arg;
5121 if (evaluate) 5121 if (evaluate)
5122 { 5122 {
5123 rettv->v_type = VAR_STRING; 5123 rettv->v_type = VAR_STRING;
5124 rettv->vval.v_string = get_reg_contents(**arg, TRUE, TRUE); 5124 rettv->vval.v_string = get_reg_contents(**arg,
5125 GREG_EXPR_SRC);
5125 } 5126 }
5126 if (**arg != NUL) 5127 if (**arg != NUL)
5127 ++*arg; 5128 ++*arg;
5128 break; 5129 break;
5129 5130
7968 {"getloclist", 1, 1, f_getqflist}, 7969 {"getloclist", 1, 1, f_getqflist},
7969 {"getmatches", 0, 0, f_getmatches}, 7970 {"getmatches", 0, 0, f_getmatches},
7970 {"getpid", 0, 0, f_getpid}, 7971 {"getpid", 0, 0, f_getpid},
7971 {"getpos", 1, 1, f_getpos}, 7972 {"getpos", 1, 1, f_getpos},
7972 {"getqflist", 0, 0, f_getqflist}, 7973 {"getqflist", 0, 0, f_getqflist},
7973 {"getreg", 0, 2, f_getreg}, 7974 {"getreg", 0, 3, f_getreg},
7974 {"getregtype", 0, 1, f_getregtype}, 7975 {"getregtype", 0, 1, f_getregtype},
7975 {"gettabvar", 2, 3, f_gettabvar}, 7976 {"gettabvar", 2, 3, f_gettabvar},
7976 {"gettabwinvar", 3, 4, f_gettabwinvar}, 7977 {"gettabwinvar", 3, 4, f_gettabwinvar},
7977 {"getwinposx", 0, 0, f_getwinposx}, 7978 {"getwinposx", 0, 0, f_getwinposx},
7978 {"getwinposy", 0, 0, f_getwinposy}, 7979 {"getwinposy", 0, 0, f_getwinposy},
11797 typval_T *rettv; 11798 typval_T *rettv;
11798 { 11799 {
11799 char_u *strregname; 11800 char_u *strregname;
11800 int regname; 11801 int regname;
11801 int arg2 = FALSE; 11802 int arg2 = FALSE;
11803 int return_list = FALSE;
11802 int error = FALSE; 11804 int error = FALSE;
11803 11805
11804 if (argvars[0].v_type != VAR_UNKNOWN) 11806 if (argvars[0].v_type != VAR_UNKNOWN)
11805 { 11807 {
11806 strregname = get_tv_string_chk(&argvars[0]); 11808 strregname = get_tv_string_chk(&argvars[0]);
11807 error = strregname == NULL; 11809 error = strregname == NULL;
11808 if (argvars[1].v_type != VAR_UNKNOWN) 11810 if (argvars[1].v_type != VAR_UNKNOWN)
11811 {
11809 arg2 = get_tv_number_chk(&argvars[1], &error); 11812 arg2 = get_tv_number_chk(&argvars[1], &error);
11813 if (!error && argvars[2].v_type != VAR_UNKNOWN)
11814 return_list = get_tv_number_chk(&argvars[2], &error);
11815 }
11810 } 11816 }
11811 else 11817 else
11812 strregname = vimvars[VV_REG].vv_str; 11818 strregname = vimvars[VV_REG].vv_str;
11819
11820 if (error)
11821 return;
11822
11813 regname = (strregname == NULL ? '"' : *strregname); 11823 regname = (strregname == NULL ? '"' : *strregname);
11814 if (regname == 0) 11824 if (regname == 0)
11815 regname = '"'; 11825 regname = '"';
11816 11826
11817 rettv->v_type = VAR_STRING; 11827 if (return_list)
11818 rettv->vval.v_string = error ? NULL : 11828 {
11819 get_reg_contents(regname, TRUE, arg2); 11829 rettv->v_type = VAR_LIST;
11830 rettv->vval.v_list = (list_T *)get_reg_contents(regname,
11831 (arg2 ? GREG_EXPR_SRC : 0) | GREG_LIST);
11832 }
11833 else
11834 {
11835 rettv->v_type = VAR_STRING;
11836 rettv->vval.v_string = get_reg_contents(regname,
11837 arg2 ? GREG_EXPR_SRC : 0);
11838 }
11820 } 11839 }
11821 11840
11822 /* 11841 /*
11823 * "getregtype()" function 11842 * "getregtype()" function
11824 */ 11843 */
17889 f_submatch(argvars, rettv) 17908 f_submatch(argvars, rettv)
17890 typval_T *argvars; 17909 typval_T *argvars;
17891 typval_T *rettv; 17910 typval_T *rettv;
17892 { 17911 {
17893 int error = FALSE; 17912 int error = FALSE;
17894 char_u **match;
17895 char_u **s;
17896 listitem_T *li;
17897 int no; 17913 int no;
17898 int retList = 0; 17914 int retList = 0;
17899 17915
17900 no = (int)get_tv_number_chk(&argvars[0], &error); 17916 no = (int)get_tv_number_chk(&argvars[0], &error);
17901 if (error) 17917 if (error)