Mercurial > vim
comparison src/if_mzsch.c @ 26441:65ab0b035dd8 v8.2.3751
patch 8.2.3751: cannot assign a lambda to an option that takes a function
Commit: https://github.com/vim/vim/commit/6409553b6e3b4de4e1d72b8ee5445595214581ff
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Mon Dec 6 11:03:55 2021 +0000
patch 8.2.3751: cannot assign a lambda to an option that takes a function
Problem: Cannot assign a lambda to an option that takes a function.
Solution: Automatically convert the lambda to a string. (Yegappan
Lakshmanan, closes #9286)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 06 Dec 2021 12:15:04 +0100 |
parents | 038eb6d9003a |
children | 06a137af96f8 |
comparison
equal
deleted
inserted
replaced
26440:f6f5f604c17c | 26441:65ab0b035dd8 |
---|---|
1713 long value; | 1713 long value; |
1714 char *strval; | 1714 char *strval; |
1715 getoption_T rc; | 1715 getoption_T rc; |
1716 Scheme_Object *rval = NULL; | 1716 Scheme_Object *rval = NULL; |
1717 Scheme_Object *name = NULL; | 1717 Scheme_Object *name = NULL; |
1718 int opt_flags = 0; | 1718 int scope = 0; |
1719 buf_T *save_curb = curbuf; | 1719 buf_T *save_curb = curbuf; |
1720 win_T *save_curw = curwin; | 1720 win_T *save_curw = curwin; |
1721 | 1721 |
1722 MZ_GC_DECL_REG(2); | 1722 MZ_GC_DECL_REG(2); |
1723 MZ_GC_VAR_IN_REG(0, rval); | 1723 MZ_GC_VAR_IN_REG(0, rval); |
1734 M_global = scheme_intern_symbol("global"); | 1734 M_global = scheme_intern_symbol("global"); |
1735 MZ_GC_CHECK(); | 1735 MZ_GC_CHECK(); |
1736 } | 1736 } |
1737 | 1737 |
1738 if (argv[1] == M_global) | 1738 if (argv[1] == M_global) |
1739 opt_flags = OPT_GLOBAL; | 1739 scope = OPT_GLOBAL; |
1740 else if (SCHEME_VIMBUFFERP(argv[1])) | 1740 else if (SCHEME_VIMBUFFERP(argv[1])) |
1741 { | 1741 { |
1742 curbuf = get_valid_buffer(argv[1]); | 1742 curbuf = get_valid_buffer(argv[1]); |
1743 opt_flags = OPT_LOCAL; | 1743 scope = OPT_LOCAL; |
1744 } | 1744 } |
1745 else if (SCHEME_VIMWINDOWP(argv[1])) | 1745 else if (SCHEME_VIMWINDOWP(argv[1])) |
1746 { | 1746 { |
1747 win_T *win = get_valid_window(argv[1]); | 1747 win_T *win = get_valid_window(argv[1]); |
1748 | 1748 |
1749 curwin = win; | 1749 curwin = win; |
1750 curbuf = win->w_buffer; | 1750 curbuf = win->w_buffer; |
1751 opt_flags = OPT_LOCAL; | 1751 scope = OPT_LOCAL; |
1752 } | 1752 } |
1753 else | 1753 else |
1754 scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); | 1754 scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); |
1755 } | 1755 } |
1756 | 1756 |
1757 rc = get_option_value(BYTE_STRING_VALUE(name), &value, (char_u **)&strval, | 1757 rc = get_option_value(BYTE_STRING_VALUE(name), &value, (char_u **)&strval, |
1758 opt_flags); | 1758 NULL, scope); |
1759 curbuf = save_curb; | 1759 curbuf = save_curb; |
1760 curwin = save_curw; | 1760 curwin = save_curw; |
1761 | 1761 |
1762 switch (rc) | 1762 switch (rc) |
1763 { | 1763 { |
1791 */ | 1791 */ |
1792 static Scheme_Object * | 1792 static Scheme_Object * |
1793 set_option(void *data, int argc, Scheme_Object **argv) | 1793 set_option(void *data, int argc, Scheme_Object **argv) |
1794 { | 1794 { |
1795 char_u *command = NULL; | 1795 char_u *command = NULL; |
1796 int opt_flags = 0; | 1796 int scope = 0; |
1797 buf_T *save_curb = curbuf; | 1797 buf_T *save_curb = curbuf; |
1798 win_T *save_curw = curwin; | 1798 win_T *save_curw = curwin; |
1799 Vim_Prim *prim = (Vim_Prim *)data; | 1799 Vim_Prim *prim = (Vim_Prim *)data; |
1800 Scheme_Object *cmd = NULL; | 1800 Scheme_Object *cmd = NULL; |
1801 | 1801 |
1812 M_global = scheme_intern_symbol("global"); | 1812 M_global = scheme_intern_symbol("global"); |
1813 MZ_GC_CHECK(); | 1813 MZ_GC_CHECK(); |
1814 } | 1814 } |
1815 | 1815 |
1816 if (argv[1] == M_global) | 1816 if (argv[1] == M_global) |
1817 opt_flags = OPT_GLOBAL; | 1817 scope = OPT_GLOBAL; |
1818 else if (SCHEME_VIMBUFFERP(argv[1])) | 1818 else if (SCHEME_VIMBUFFERP(argv[1])) |
1819 { | 1819 { |
1820 curbuf = get_valid_buffer(argv[1]); | 1820 curbuf = get_valid_buffer(argv[1]); |
1821 opt_flags = OPT_LOCAL; | 1821 scope = OPT_LOCAL; |
1822 } | 1822 } |
1823 else if (SCHEME_VIMWINDOWP(argv[1])) | 1823 else if (SCHEME_VIMWINDOWP(argv[1])) |
1824 { | 1824 { |
1825 win_T *win = get_valid_window(argv[1]); | 1825 win_T *win = get_valid_window(argv[1]); |
1826 curwin = win; | 1826 curwin = win; |
1827 curbuf = win->w_buffer; | 1827 curbuf = win->w_buffer; |
1828 opt_flags = OPT_LOCAL; | 1828 scope = OPT_LOCAL; |
1829 } | 1829 } |
1830 else | 1830 else |
1831 scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); | 1831 scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); |
1832 } | 1832 } |
1833 | 1833 |
1834 // do_set can modify cmd, make copy | 1834 // do_set can modify cmd, make copy |
1835 command = vim_strsave(BYTE_STRING_VALUE(cmd)); | 1835 command = vim_strsave(BYTE_STRING_VALUE(cmd)); |
1836 MZ_GC_UNREG(); | 1836 MZ_GC_UNREG(); |
1837 do_set(command, opt_flags); | 1837 do_set(command, scope); |
1838 vim_free(command); | 1838 vim_free(command); |
1839 update_screen(NOT_VALID); | 1839 update_screen(NOT_VALID); |
1840 curbuf = save_curb; | 1840 curbuf = save_curb; |
1841 curwin = save_curw; | 1841 curwin = save_curw; |
1842 raise_if_error(); | 1842 raise_if_error(); |