Mercurial > vim
comparison src/eval.c @ 1661:5bbc2d6658ad v7.2a.013
updated for version 7.2a-013
author | vimboss |
---|---|
date | Fri, 04 Jul 2008 09:44:11 +0000 |
parents | 6412b0befebc |
children | ac6d15d91466 |
comparison
equal
deleted
inserted
replaced
1660:a0c70314350f | 1661:5bbc2d6658ad |
---|---|
460 static int find_internal_func __ARGS((char_u *name)); | 460 static int find_internal_func __ARGS((char_u *name)); |
461 static char_u *deref_func_name __ARGS((char_u *name, int *lenp)); | 461 static char_u *deref_func_name __ARGS((char_u *name, int *lenp)); |
462 static int get_func_tv __ARGS((char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict)); | 462 static int get_func_tv __ARGS((char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict)); |
463 static int call_func __ARGS((char_u *name, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict)); | 463 static int call_func __ARGS((char_u *name, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict)); |
464 static void emsg_funcname __ARGS((char *ermsg, char_u *name)); | 464 static void emsg_funcname __ARGS((char *ermsg, char_u *name)); |
465 static int non_zero_arg __ARGS((typval_T *argvars)); | |
465 | 466 |
466 #ifdef FEAT_FLOAT | 467 #ifdef FEAT_FLOAT |
467 static void f_abs __ARGS((typval_T *argvars, typval_T *rettv)); | 468 static void f_abs __ARGS((typval_T *argvars, typval_T *rettv)); |
468 #endif | 469 #endif |
469 static void f_add __ARGS((typval_T *argvars, typval_T *rettv)); | 470 static void f_add __ARGS((typval_T *argvars, typval_T *rettv)); |
7609 {"setpos", 2, 2, f_setpos}, | 7610 {"setpos", 2, 2, f_setpos}, |
7610 {"setqflist", 1, 2, f_setqflist}, | 7611 {"setqflist", 1, 2, f_setqflist}, |
7611 {"setreg", 2, 3, f_setreg}, | 7612 {"setreg", 2, 3, f_setreg}, |
7612 {"settabwinvar", 4, 4, f_settabwinvar}, | 7613 {"settabwinvar", 4, 4, f_settabwinvar}, |
7613 {"setwinvar", 3, 3, f_setwinvar}, | 7614 {"setwinvar", 3, 3, f_setwinvar}, |
7614 {"shellescape", 1, 1, f_shellescape}, | 7615 {"shellescape", 1, 2, f_shellescape}, |
7615 {"simplify", 1, 1, f_simplify}, | 7616 {"simplify", 1, 1, f_simplify}, |
7616 #ifdef FEAT_FLOAT | 7617 #ifdef FEAT_FLOAT |
7617 {"sin", 1, 1, f_sin}, | 7618 {"sin", 1, 1, f_sin}, |
7618 #endif | 7619 #endif |
7619 {"sort", 1, 2, f_sort}, | 7620 {"sort", 1, 2, f_sort}, |
8090 else | 8091 else |
8091 p = name; | 8092 p = name; |
8092 EMSG2(_(ermsg), p); | 8093 EMSG2(_(ermsg), p); |
8093 if (p != name) | 8094 if (p != name) |
8094 vim_free(p); | 8095 vim_free(p); |
8096 } | |
8097 | |
8098 /* | |
8099 * Return TRUE for a non-zero Number and a non-empty String. | |
8100 */ | |
8101 static int | |
8102 non_zero_arg(argvars) | |
8103 typval_T *argvars; | |
8104 { | |
8105 return ((argvars[0].v_type == VAR_NUMBER | |
8106 && argvars[0].vval.v_number != 0) | |
8107 || (argvars[0].v_type == VAR_STRING | |
8108 && argvars[0].vval.v_string != NULL | |
8109 && *argvars[0].vval.v_string != NUL)); | |
8095 } | 8110 } |
8096 | 8111 |
8097 /********************************************* | 8112 /********************************************* |
8098 * Implementation of the built-in functions | 8113 * Implementation of the built-in functions |
8099 */ | 8114 */ |
13478 buf[0] = 'n'; | 13493 buf[0] = 'n'; |
13479 if (finish_op) | 13494 if (finish_op) |
13480 buf[1] = 'o'; | 13495 buf[1] = 'o'; |
13481 } | 13496 } |
13482 | 13497 |
13483 /* A zero number or empty string argument: return only major mode. */ | 13498 /* Clear out the minor mode when the argument is not a non-zero number or |
13484 if (!(argvars[0].v_type == VAR_NUMBER && argvars[0].vval.v_number != 0) | 13499 * non-empty string. */ |
13485 && !(argvars[0].v_type == VAR_STRING | 13500 if (!non_zero_arg(&argvars[0])) |
13486 && *get_tv_string(&argvars[0]) != NUL)) | |
13487 buf[1] = NUL; | 13501 buf[1] = NUL; |
13488 | 13502 |
13489 rettv->vval.v_string = vim_strsave(buf); | 13503 rettv->vval.v_string = vim_strsave(buf); |
13490 rettv->v_type = VAR_STRING; | 13504 rettv->v_type = VAR_STRING; |
13491 } | 13505 } |
15682 static void | 15696 static void |
15683 f_shellescape(argvars, rettv) | 15697 f_shellescape(argvars, rettv) |
15684 typval_T *argvars; | 15698 typval_T *argvars; |
15685 typval_T *rettv; | 15699 typval_T *rettv; |
15686 { | 15700 { |
15687 rettv->vval.v_string = vim_strsave_shellescape(get_tv_string(&argvars[0])); | 15701 rettv->vval.v_string = vim_strsave_shellescape( |
15702 get_tv_string(&argvars[0]), non_zero_arg(&argvars[1])); | |
15688 rettv->v_type = VAR_STRING; | 15703 rettv->v_type = VAR_STRING; |
15689 } | 15704 } |
15690 | 15705 |
15691 /* | 15706 /* |
15692 * "simplify()" function | 15707 * "simplify()" function |
17271 str[0] = curbuf->b_visual_mode_eval; | 17286 str[0] = curbuf->b_visual_mode_eval; |
17272 str[1] = NUL; | 17287 str[1] = NUL; |
17273 rettv->vval.v_string = vim_strsave(str); | 17288 rettv->vval.v_string = vim_strsave(str); |
17274 | 17289 |
17275 /* A non-zero number or non-empty string argument: reset mode. */ | 17290 /* A non-zero number or non-empty string argument: reset mode. */ |
17276 if ((argvars[0].v_type == VAR_NUMBER && argvars[0].vval.v_number != 0) | 17291 if (non_zero_arg(&argvars[0])) |
17277 || (argvars[0].v_type == VAR_STRING | |
17278 && *get_tv_string(&argvars[0]) != NUL)) | |
17279 curbuf->b_visual_mode_eval = NUL; | 17292 curbuf->b_visual_mode_eval = NUL; |
17280 #else | 17293 #else |
17281 rettv->vval.v_number = 0; /* return anything, it won't work anyway */ | 17294 rettv->vval.v_number = 0; /* return anything, it won't work anyway */ |
17282 #endif | 17295 #endif |
17283 } | 17296 } |