Mercurial > vim
comparison src/evalfunc.c @ 17744:4a3dca734d36 v8.1.1869
patch 8.1.1869: code for the argument list is spread out
commit https://github.com/vim/vim/commit/4ad62155a1015751a6645aaecd94b02c94c8934b
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Aug 17 14:38:55 2019 +0200
patch 8.1.1869: code for the argument list is spread out
Problem: Code for the argument list is spread out.
Solution: Put argument list code in arglist.c. (Yegappan Lakshmanan,
closes #4819)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 17 Aug 2019 14:45:04 +0200 |
parents | 1726c2db81bf |
children | a7afcea6f40a |
comparison
equal
deleted
inserted
replaced
17743:4ca7a477f326 | 17744:4a3dca734d36 |
---|---|
33 #endif | 33 #endif |
34 static void f_add(typval_T *argvars, typval_T *rettv); | 34 static void f_add(typval_T *argvars, typval_T *rettv); |
35 static void f_and(typval_T *argvars, typval_T *rettv); | 35 static void f_and(typval_T *argvars, typval_T *rettv); |
36 static void f_append(typval_T *argvars, typval_T *rettv); | 36 static void f_append(typval_T *argvars, typval_T *rettv); |
37 static void f_appendbufline(typval_T *argvars, typval_T *rettv); | 37 static void f_appendbufline(typval_T *argvars, typval_T *rettv); |
38 static void f_argc(typval_T *argvars, typval_T *rettv); | |
39 static void f_argidx(typval_T *argvars, typval_T *rettv); | |
40 static void f_arglistid(typval_T *argvars, typval_T *rettv); | |
41 static void f_argv(typval_T *argvars, typval_T *rettv); | |
42 #ifdef FEAT_FLOAT | 38 #ifdef FEAT_FLOAT |
43 static void f_asin(typval_T *argvars, typval_T *rettv); | 39 static void f_asin(typval_T *argvars, typval_T *rettv); |
44 static void f_atan(typval_T *argvars, typval_T *rettv); | 40 static void f_atan(typval_T *argvars, typval_T *rettv); |
45 static void f_atan2(typval_T *argvars, typval_T *rettv); | 41 static void f_atan2(typval_T *argvars, typval_T *rettv); |
46 #endif | 42 #endif |
1494 lnum = tv_get_lnum_buf(&argvars[1], buf); | 1490 lnum = tv_get_lnum_buf(&argvars[1], buf); |
1495 set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv); | 1491 set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv); |
1496 } | 1492 } |
1497 } | 1493 } |
1498 | 1494 |
1499 /* | |
1500 * "argc([window id])" function | |
1501 */ | |
1502 static void | |
1503 f_argc(typval_T *argvars, typval_T *rettv) | |
1504 { | |
1505 win_T *wp; | |
1506 | |
1507 if (argvars[0].v_type == VAR_UNKNOWN) | |
1508 // use the current window | |
1509 rettv->vval.v_number = ARGCOUNT; | |
1510 else if (argvars[0].v_type == VAR_NUMBER | |
1511 && tv_get_number(&argvars[0]) == -1) | |
1512 // use the global argument list | |
1513 rettv->vval.v_number = GARGCOUNT; | |
1514 else | |
1515 { | |
1516 // use the argument list of the specified window | |
1517 wp = find_win_by_nr_or_id(&argvars[0]); | |
1518 if (wp != NULL) | |
1519 rettv->vval.v_number = WARGCOUNT(wp); | |
1520 else | |
1521 rettv->vval.v_number = -1; | |
1522 } | |
1523 } | |
1524 | |
1525 /* | |
1526 * "argidx()" function | |
1527 */ | |
1528 static void | |
1529 f_argidx(typval_T *argvars UNUSED, typval_T *rettv) | |
1530 { | |
1531 rettv->vval.v_number = curwin->w_arg_idx; | |
1532 } | |
1533 | |
1534 /* | |
1535 * "arglistid()" function | |
1536 */ | |
1537 static void | |
1538 f_arglistid(typval_T *argvars, typval_T *rettv) | |
1539 { | |
1540 win_T *wp; | |
1541 | |
1542 rettv->vval.v_number = -1; | |
1543 wp = find_tabwin(&argvars[0], &argvars[1], NULL); | |
1544 if (wp != NULL) | |
1545 rettv->vval.v_number = wp->w_alist->id; | |
1546 } | |
1547 | |
1548 /* | |
1549 * Get the argument list for a given window | |
1550 */ | |
1551 static void | |
1552 get_arglist_as_rettv(aentry_T *arglist, int argcount, typval_T *rettv) | |
1553 { | |
1554 int idx; | |
1555 | |
1556 if (rettv_list_alloc(rettv) == OK && arglist != NULL) | |
1557 for (idx = 0; idx < argcount; ++idx) | |
1558 list_append_string(rettv->vval.v_list, | |
1559 alist_name(&arglist[idx]), -1); | |
1560 } | |
1561 | |
1562 /* | |
1563 * "argv(nr)" function | |
1564 */ | |
1565 static void | |
1566 f_argv(typval_T *argvars, typval_T *rettv) | |
1567 { | |
1568 int idx; | |
1569 aentry_T *arglist = NULL; | |
1570 int argcount = -1; | |
1571 | |
1572 if (argvars[0].v_type != VAR_UNKNOWN) | |
1573 { | |
1574 if (argvars[1].v_type == VAR_UNKNOWN) | |
1575 { | |
1576 arglist = ARGLIST; | |
1577 argcount = ARGCOUNT; | |
1578 } | |
1579 else if (argvars[1].v_type == VAR_NUMBER | |
1580 && tv_get_number(&argvars[1]) == -1) | |
1581 { | |
1582 arglist = GARGLIST; | |
1583 argcount = GARGCOUNT; | |
1584 } | |
1585 else | |
1586 { | |
1587 win_T *wp = find_win_by_nr_or_id(&argvars[1]); | |
1588 | |
1589 if (wp != NULL) | |
1590 { | |
1591 /* Use the argument list of the specified window */ | |
1592 arglist = WARGLIST(wp); | |
1593 argcount = WARGCOUNT(wp); | |
1594 } | |
1595 } | |
1596 | |
1597 rettv->v_type = VAR_STRING; | |
1598 rettv->vval.v_string = NULL; | |
1599 idx = tv_get_number_chk(&argvars[0], NULL); | |
1600 if (arglist != NULL && idx >= 0 && idx < argcount) | |
1601 rettv->vval.v_string = vim_strsave(alist_name(&arglist[idx])); | |
1602 else if (idx == -1) | |
1603 get_arglist_as_rettv(arglist, argcount, rettv); | |
1604 } | |
1605 else | |
1606 get_arglist_as_rettv(ARGLIST, ARGCOUNT, rettv); | |
1607 } | |
1608 | |
1609 #ifdef FEAT_FLOAT | 1495 #ifdef FEAT_FLOAT |
1610 /* | 1496 /* |
1611 * "asin()" function | 1497 * "asin()" function |
1612 */ | 1498 */ |
1613 static void | 1499 static void |