Skip to content

Commit b60d851

Browse files
committed
patch 8.1.1608: the evalfunc.c file is too big
Problem: The evalfunc.c file is too big. Solution: Move sign functionality to sign.c.
1 parent f9c85f5 commit b60d851

5 files changed

Lines changed: 367 additions & 373 deletions

File tree

src/evalfunc.c

Lines changed: 1 addition & 363 deletions
Original file line numberDiff line numberDiff line change
@@ -352,15 +352,6 @@ static void f_sha256(typval_T *argvars, typval_T *rettv);
352352
#endif /* FEAT_CRYPT */
353353
static void f_shellescape(typval_T *argvars, typval_T *rettv);
354354
static void f_shiftwidth(typval_T *argvars, typval_T *rettv);
355-
#ifdef FEAT_SIGNS
356-
static void f_sign_define(typval_T *argvars, typval_T *rettv);
357-
static void f_sign_getdefined(typval_T *argvars, typval_T *rettv);
358-
static void f_sign_getplaced(typval_T *argvars, typval_T *rettv);
359-
static void f_sign_jump(typval_T *argvars, typval_T *rettv);
360-
static void f_sign_place(typval_T *argvars, typval_T *rettv);
361-
static void f_sign_undefine(typval_T *argvars, typval_T *rettv);
362-
static void f_sign_unplace(typval_T *argvars, typval_T *rettv);
363-
#endif
364355
static void f_simplify(typval_T *argvars, typval_T *rettv);
365356
#ifdef FEAT_FLOAT
366357
static void f_sin(typval_T *argvars, typval_T *rettv);
@@ -1181,7 +1172,7 @@ non_zero_arg(typval_T *argvars)
11811172
* Also accepts ".", "$", etc., but that only works for the current buffer.
11821173
* Returns -1 on error.
11831174
*/
1184-
static linenr_T
1175+
linenr_T
11851176
tv_get_lnum(typval_T *argvars)
11861177
{
11871178
typval_T rettv;
@@ -11609,359 +11600,6 @@ f_shiftwidth(typval_T *argvars UNUSED, typval_T *rettv)
1160911600
rettv->vval.v_number = get_sw_value(curbuf);
1161011601
}
1161111602

11612-
#ifdef FEAT_SIGNS
11613-
/*
11614-
* "sign_define()" function
11615-
*/
11616-
static void
11617-
f_sign_define(typval_T *argvars, typval_T *rettv)
11618-
{
11619-
char_u *name;
11620-
dict_T *dict;
11621-
char_u *icon = NULL;
11622-
char_u *linehl = NULL;
11623-
char_u *text = NULL;
11624-
char_u *texthl = NULL;
11625-
11626-
rettv->vval.v_number = -1;
11627-
11628-
name = tv_get_string_chk(&argvars[0]);
11629-
if (name == NULL)
11630-
return;
11631-
11632-
if (argvars[1].v_type != VAR_UNKNOWN)
11633-
{
11634-
if (argvars[1].v_type != VAR_DICT)
11635-
{
11636-
emsg(_(e_dictreq));
11637-
return;
11638-
}
11639-
11640-
// sign attributes
11641-
dict = argvars[1].vval.v_dict;
11642-
if (dict_find(dict, (char_u *)"icon", -1) != NULL)
11643-
icon = dict_get_string(dict, (char_u *)"icon", TRUE);
11644-
if (dict_find(dict, (char_u *)"linehl", -1) != NULL)
11645-
linehl = dict_get_string(dict, (char_u *)"linehl", TRUE);
11646-
if (dict_find(dict, (char_u *)"text", -1) != NULL)
11647-
text = dict_get_string(dict, (char_u *)"text", TRUE);
11648-
if (dict_find(dict, (char_u *)"texthl", -1) != NULL)
11649-
texthl = dict_get_string(dict, (char_u *)"texthl", TRUE);
11650-
}
11651-
11652-
if (sign_define_by_name(name, icon, linehl, text, texthl) == OK)
11653-
rettv->vval.v_number = 0;
11654-
11655-
vim_free(icon);
11656-
vim_free(linehl);
11657-
vim_free(text);
11658-
vim_free(texthl);
11659-
}
11660-
11661-
/*
11662-
* "sign_getdefined()" function
11663-
*/
11664-
static void
11665-
f_sign_getdefined(typval_T *argvars, typval_T *rettv)
11666-
{
11667-
char_u *name = NULL;
11668-
11669-
if (rettv_list_alloc_id(rettv, aid_sign_getdefined) != OK)
11670-
return;
11671-
11672-
if (argvars[0].v_type != VAR_UNKNOWN)
11673-
name = tv_get_string(&argvars[0]);
11674-
11675-
sign_getlist(name, rettv->vval.v_list);
11676-
}
11677-
11678-
/*
11679-
* "sign_getplaced()" function
11680-
*/
11681-
static void
11682-
f_sign_getplaced(typval_T *argvars, typval_T *rettv)
11683-
{
11684-
buf_T *buf = NULL;
11685-
dict_T *dict;
11686-
dictitem_T *di;
11687-
linenr_T lnum = 0;
11688-
int sign_id = 0;
11689-
char_u *group = NULL;
11690-
int notanum = FALSE;
11691-
11692-
if (rettv_list_alloc_id(rettv, aid_sign_getplaced) != OK)
11693-
return;
11694-
11695-
if (argvars[0].v_type != VAR_UNKNOWN)
11696-
{
11697-
// get signs placed in the specified buffer
11698-
buf = get_buf_arg(&argvars[0]);
11699-
if (buf == NULL)
11700-
return;
11701-
11702-
if (argvars[1].v_type != VAR_UNKNOWN)
11703-
{
11704-
if (argvars[1].v_type != VAR_DICT ||
11705-
((dict = argvars[1].vval.v_dict) == NULL))
11706-
{
11707-
emsg(_(e_dictreq));
11708-
return;
11709-
}
11710-
if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL)
11711-
{
11712-
// get signs placed at this line
11713-
(void)tv_get_number_chk(&di->di_tv, &notanum);
11714-
if (notanum)
11715-
return;
11716-
lnum = tv_get_lnum(&di->di_tv);
11717-
}
11718-
if ((di = dict_find(dict, (char_u *)"id", -1)) != NULL)
11719-
{
11720-
// get sign placed with this identifier
11721-
sign_id = (int)tv_get_number_chk(&di->di_tv, &notanum);
11722-
if (notanum)
11723-
return;
11724-
}
11725-
if ((di = dict_find(dict, (char_u *)"group", -1)) != NULL)
11726-
{
11727-
group = tv_get_string_chk(&di->di_tv);
11728-
if (group == NULL)
11729-
return;
11730-
if (*group == '\0') // empty string means global group
11731-
group = NULL;
11732-
}
11733-
}
11734-
}
11735-
11736-
sign_get_placed(buf, lnum, sign_id, group, rettv->vval.v_list);
11737-
}
11738-
11739-
/*
11740-
* "sign_jump()" function
11741-
*/
11742-
static void
11743-
f_sign_jump(typval_T *argvars, typval_T *rettv)
11744-
{
11745-
int sign_id;
11746-
char_u *sign_group = NULL;
11747-
buf_T *buf;
11748-
int notanum = FALSE;
11749-
11750-
rettv->vval.v_number = -1;
11751-
11752-
// Sign identifier
11753-
sign_id = (int)tv_get_number_chk(&argvars[0], &notanum);
11754-
if (notanum)
11755-
return;
11756-
if (sign_id <= 0)
11757-
{
11758-
emsg(_(e_invarg));
11759-
return;
11760-
}
11761-
11762-
// Sign group
11763-
sign_group = tv_get_string_chk(&argvars[1]);
11764-
if (sign_group == NULL)
11765-
return;
11766-
if (sign_group[0] == '\0')
11767-
sign_group = NULL; // global sign group
11768-
else
11769-
{
11770-
sign_group = vim_strsave(sign_group);
11771-
if (sign_group == NULL)
11772-
return;
11773-
}
11774-
11775-
// Buffer to place the sign
11776-
buf = get_buf_arg(&argvars[2]);
11777-
if (buf == NULL)
11778-
goto cleanup;
11779-
11780-
rettv->vval.v_number = sign_jump(sign_id, sign_group, buf);
11781-
11782-
cleanup:
11783-
vim_free(sign_group);
11784-
}
11785-
11786-
/*
11787-
* "sign_place()" function
11788-
*/
11789-
static void
11790-
f_sign_place(typval_T *argvars, typval_T *rettv)
11791-
{
11792-
int sign_id;
11793-
char_u *group = NULL;
11794-
char_u *sign_name;
11795-
buf_T *buf;
11796-
dict_T *dict;
11797-
dictitem_T *di;
11798-
linenr_T lnum = 0;
11799-
int prio = SIGN_DEF_PRIO;
11800-
int notanum = FALSE;
11801-
11802-
rettv->vval.v_number = -1;
11803-
11804-
// Sign identifier
11805-
sign_id = (int)tv_get_number_chk(&argvars[0], &notanum);
11806-
if (notanum)
11807-
return;
11808-
if (sign_id < 0)
11809-
{
11810-
emsg(_(e_invarg));
11811-
return;
11812-
}
11813-
11814-
// Sign group
11815-
group = tv_get_string_chk(&argvars[1]);
11816-
if (group == NULL)
11817-
return;
11818-
if (group[0] == '\0')
11819-
group = NULL; // global sign group
11820-
else
11821-
{
11822-
group = vim_strsave(group);
11823-
if (group == NULL)
11824-
return;
11825-
}
11826-
11827-
// Sign name
11828-
sign_name = tv_get_string_chk(&argvars[2]);
11829-
if (sign_name == NULL)
11830-
goto cleanup;
11831-
11832-
// Buffer to place the sign
11833-
buf = get_buf_arg(&argvars[3]);
11834-
if (buf == NULL)
11835-
goto cleanup;
11836-
11837-
if (argvars[4].v_type != VAR_UNKNOWN)
11838-
{
11839-
if (argvars[4].v_type != VAR_DICT ||
11840-
((dict = argvars[4].vval.v_dict) == NULL))
11841-
{
11842-
emsg(_(e_dictreq));
11843-
goto cleanup;
11844-
}
11845-
11846-
// Line number where the sign is to be placed
11847-
if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL)
11848-
{
11849-
(void)tv_get_number_chk(&di->di_tv, &notanum);
11850-
if (notanum)
11851-
goto cleanup;
11852-
lnum = tv_get_lnum(&di->di_tv);
11853-
}
11854-
if ((di = dict_find(dict, (char_u *)"priority", -1)) != NULL)
11855-
{
11856-
// Sign priority
11857-
prio = (int)tv_get_number_chk(&di->di_tv, &notanum);
11858-
if (notanum)
11859-
goto cleanup;
11860-
}
11861-
}
11862-
11863-
if (sign_place(&sign_id, group, sign_name, buf, lnum, prio) == OK)
11864-
rettv->vval.v_number = sign_id;
11865-
11866-
cleanup:
11867-
vim_free(group);
11868-
}
11869-
11870-
/*
11871-
* "sign_undefine()" function
11872-
*/
11873-
static void
11874-
f_sign_undefine(typval_T *argvars, typval_T *rettv)
11875-
{
11876-
char_u *name;
11877-
11878-
rettv->vval.v_number = -1;
11879-
11880-
if (argvars[0].v_type == VAR_UNKNOWN)
11881-
{
11882-
// Free all the signs
11883-
free_signs();
11884-
rettv->vval.v_number = 0;
11885-
}
11886-
else
11887-
{
11888-
// Free only the specified sign
11889-
name = tv_get_string_chk(&argvars[0]);
11890-
if (name == NULL)
11891-
return;
11892-
11893-
if (sign_undefine_by_name(name) == OK)
11894-
rettv->vval.v_number = 0;
11895-
}
11896-
}
11897-
11898-
/*
11899-
* "sign_unplace()" function
11900-
*/
11901-
static void
11902-
f_sign_unplace(typval_T *argvars, typval_T *rettv)
11903-
{
11904-
dict_T *dict;
11905-
dictitem_T *di;
11906-
int sign_id = 0;
11907-
buf_T *buf = NULL;
11908-
char_u *group = NULL;
11909-
11910-
rettv->vval.v_number = -1;
11911-
11912-
if (argvars[0].v_type != VAR_STRING)
11913-
{
11914-
emsg(_(e_invarg));
11915-
return;
11916-
}
11917-
11918-
group = tv_get_string(&argvars[0]);
11919-
if (group[0] == '\0')
11920-
group = NULL; // global sign group
11921-
else
11922-
{
11923-
group = vim_strsave(group);
11924-
if (group == NULL)
11925-
return;
11926-
}
11927-
11928-
if (argvars[1].v_type != VAR_UNKNOWN)
11929-
{
11930-
if (argvars[1].v_type != VAR_DICT)
11931-
{
11932-
emsg(_(e_dictreq));
11933-
goto cleanup;
11934-
}
11935-
dict = argvars[1].vval.v_dict;
11936-
11937-
if ((di = dict_find(dict, (char_u *)"buffer", -1)) != NULL)
11938-
{
11939-
buf = get_buf_arg(&di->di_tv);
11940-
if (buf == NULL)
11941-
goto cleanup;
11942-
}
11943-
if (dict_find(dict, (char_u *)"id", -1) != NULL)
11944-
sign_id = dict_get_number(dict, (char_u *)"id");
11945-
}
11946-
11947-
if (buf == NULL)
11948-
{
11949-
// Delete the sign in all the buffers
11950-
FOR_ALL_BUFFERS(buf)
11951-
if (sign_unplace(sign_id, group, buf, 0) == OK)
11952-
rettv->vval.v_number = 0;
11953-
}
11954-
else
11955-
{
11956-
if (sign_unplace(sign_id, group, buf, 0) == OK)
11957-
rettv->vval.v_number = 0;
11958-
}
11959-
11960-
cleanup:
11961-
vim_free(group);
11962-
}
11963-
#endif
11964-
1196511603
/*
1196611604
* "simplify()" function
1196711605
*/

src/proto/evalfunc.pro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ char_u *get_function_name(expand_T *xp, int idx);
33
char_u *get_expr_name(expand_T *xp, int idx);
44
int find_internal_func(char_u *name);
55
int call_internal_func(char_u *name, int argcount, typval_T *argvars, typval_T *rettv);
6+
linenr_T tv_get_lnum(typval_T *argvars);
67
buf_T *buflist_find_by_name(char_u *name, int curtab_only);
78
buf_T *tv_get_buf(typval_T *tv, int curtab_only);
89
buf_T *get_buf_arg(typval_T *arg);

0 commit comments

Comments
 (0)