To: vim_dev@googlegroups.com Subject: Patch 8.2.0340 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0340 Problem: Vim9: function and partial types not tested. Solution: Support more for partial, add tests. Files: src/vim9.h, src/vim9compile.c, src/vim9execute.c, src/testdir/test_vim9_script.vim *** ../vim-8.2.0339/src/vim9.h 2020-02-29 23:23:44.484659204 +0100 --- src/vim9.h 2020-03-01 14:59:49.381576778 +0100 *************** *** 215,220 **** --- 215,221 ---- #endif channel_T *channel; job_T *job; + partial_T *partial; jump_T jump; forloop_T forloop; try_T try; *** ../vim-8.2.0339/src/vim9compile.c 2020-03-01 14:04:42.224689018 +0100 --- src/vim9compile.c 2020-03-01 15:01:59.453119645 +0100 *************** *** 706,711 **** --- 706,728 ---- } /* + * Generate an ISN_PUSHPARTIAL instruction with partial "part". + * Consumes "name". + */ + static int + generate_PUSHPARTIAL(cctx_T *cctx, partial_T *part) + { + isn_T *isn; + + if ((isn = generate_instr_type(cctx, ISN_PUSHPARTIAL, + &t_partial_any)) == NULL) + return FAIL; + isn->isn_arg.partial = part; + + return OK; + } + + /* * Generate an ISN_STORE instruction. */ static int *************** *** 3605,3612 **** generate_PUSHFUNC(cctx, NULL); break; case VAR_PARTIAL: ! // generate_PUSHPARTIAL(cctx, NULL); ! emsg("Partial type not supported yet"); break; case VAR_LIST: generate_NEWLIST(cctx, 0); --- 3622,3628 ---- generate_PUSHFUNC(cctx, NULL); break; case VAR_PARTIAL: ! generate_PUSHPARTIAL(cctx, NULL); break; case VAR_LIST: generate_NEWLIST(cctx, 0); *************** *** 5228,5234 **** break; case ISN_PUSHPARTIAL: ! // TODO break; case ISN_PUSHJOB: --- 5244,5250 ---- break; case ISN_PUSHPARTIAL: ! partial_unref(isn->isn_arg.partial); break; case ISN_PUSHJOB: *** ../vim-8.2.0339/src/vim9execute.c 2020-02-29 23:23:44.484659204 +0100 --- src/vim9execute.c 2020-03-01 15:31:12.490999220 +0100 *************** *** 873,882 **** break; case ISN_PUSHFUNC: tv->v_type = VAR_FUNC; ! tv->vval.v_string = vim_strsave(iptr->isn_arg.string); break; case ISN_PUSHPARTIAL: ! tv->v_type = VAR_UNKNOWN; break; case ISN_PUSHCHANNEL: #ifdef FEAT_JOB_CHANNEL --- 873,889 ---- break; case ISN_PUSHFUNC: tv->v_type = VAR_FUNC; ! if (iptr->isn_arg.string == NULL) ! tv->vval.v_string = NULL; ! else ! tv->vval.v_string = ! vim_strsave(iptr->isn_arg.string); break; case ISN_PUSHPARTIAL: ! tv->v_type = VAR_PARTIAL; ! tv->vval.v_partial = iptr->isn_arg.partial; ! if (tv->vval.v_partial != NULL) ! ++tv->vval.v_partial->pt_refcount; break; case ISN_PUSHCHANNEL: #ifdef FEAT_JOB_CHANNEL *************** *** 1874,1884 **** } break; case ISN_PUSHFUNC: ! smsg("%4d PUSHFUNC \"%s\"", current, iptr->isn_arg.string); break; case ISN_PUSHPARTIAL: ! // TODO ! smsg("%4d PUSHPARTIAL", current); break; case ISN_PUSHCHANNEL: #ifdef FEAT_JOB_CHANNEL --- 1881,1900 ---- } break; case ISN_PUSHFUNC: ! { ! char *name = (char *)iptr->isn_arg.string; ! ! smsg("%4d PUSHFUNC \"%s\"", current, ! name == NULL ? "[none]" : name); ! } break; case ISN_PUSHPARTIAL: ! { ! partial_T *part = iptr->isn_arg.partial; ! ! smsg("%4d PUSHPARTIAL \"%s\"", current, ! part == NULL ? "[none]" : (char *)partial_name(part)); ! } break; case ISN_PUSHCHANNEL: #ifdef FEAT_JOB_CHANNEL *** ../vim-8.2.0339/src/testdir/test_vim9_script.vim 2020-03-01 14:04:42.224689018 +0100 --- src/testdir/test_vim9_script.vim 2020-03-01 14:53:31.735115244 +0100 *************** *** 60,66 **** if has('float') let float1: float = 3.4 endif ! let party: partial = funcref('Test_syntax') g:newvar = 'new' assert_equal('new', g:newvar) --- 60,69 ---- if has('float') let float1: float = 3.4 endif ! let funky1: func ! let funky2: func = function('len') ! let party1: partial ! let party2: partial = funcref('Test_syntax') g:newvar = 'new' assert_equal('new', g:newvar) *** ../vim-8.2.0339/src/version.c 2020-03-01 14:04:42.224689018 +0100 --- src/version.c 2020-03-01 15:00:57.001335676 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 340, /**/ -- Drink wet cement and get really stoned. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///