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 }