mirror of
https://github.com/macvim-dev/macvim.git
synced 2026-06-11 15:37:29 +02:00
patch 9.2.0084: Vim9: isn_get_calltype() can be improved
Problem: Vim9: isn_get_calltype() can be improved
Solution: Refactor isn_get_calltype for readability
(Yegappan Lakshmanan).
related: #19519
closes: #19529
Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
a4186316ba
commit
689083a748
@@ -734,6 +734,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
84,
|
||||
/**/
|
||||
83,
|
||||
/**/
|
||||
|
||||
+22
-7
@@ -1910,8 +1910,11 @@ generate_BLOBAPPEND(cctx_T *cctx)
|
||||
}
|
||||
|
||||
/*
|
||||
* get the instruction type for a function call: ISN_METHODCALL, ISN_DCALL, or
|
||||
* ISN_UCALL.
|
||||
* Get the instruction type for a function call:
|
||||
* ISN_METHODCALL - object method call via interface
|
||||
* ISN_DCALL - compiled def function call
|
||||
* ISN_UCALL - uncompiled function, or
|
||||
* compiled script-local function called from a lambda
|
||||
*/
|
||||
static isntype_T
|
||||
isn_get_calltype(
|
||||
@@ -1919,11 +1922,23 @@ isn_get_calltype(
|
||||
ufunc_T *ufunc,
|
||||
class_T *cl)
|
||||
{
|
||||
return cl != NULL ? ISN_METHODCALL
|
||||
: (ufunc->uf_def_status != UF_NOT_COMPILED
|
||||
&& ((cctx->ctx_ufunc->uf_flags & FC_LAMBDA) == 0
|
||||
|| ufunc->uf_name[0] != K_SPECIAL))
|
||||
? ISN_DCALL : ISN_UCALL;
|
||||
if (cl != NULL)
|
||||
return ISN_METHODCALL;
|
||||
|
||||
if (ufunc->uf_def_status == UF_NOT_COMPILED)
|
||||
return ISN_UCALL;
|
||||
|
||||
// function invoked from a lambda
|
||||
if (cctx->ctx_ufunc->uf_flags & FC_LAMBDA)
|
||||
{
|
||||
// Script-local funcs in a lambda may be redefined by re-sourcing;
|
||||
// resolve by name at runtime. Patched to ISN_DCALL on next call once
|
||||
// recompiled.
|
||||
if (ufunc->uf_name[0] == K_SPECIAL)
|
||||
return ISN_UCALL;
|
||||
}
|
||||
|
||||
return ISN_DCALL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user