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();