Mercurial > vim
diff src/vim9execute.c @ 31483:1bebc2093e6b v9.0.1074
patch 9.0.1074: class members are not supported yet
Commit: https://github.com/vim/vim/commit/d505d178858434e1afef0363a9fce4bcb1bc3d06
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Dec 18 21:42:55 2022 +0000
patch 9.0.1074: class members are not supported yet
Problem: Class members are not supported yet.
Solution: Add initial support for class members.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 18 Dec 2022 22:45:04 +0100 |
parents | e572ff386670 |
children | 065e4ccf5e10 |
line wrap: on
line diff
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -3817,6 +3817,27 @@ exec_instructions(ectx_T *ectx) goto on_error; break; + case ISN_LOAD_CLASSMEMBER: + { + if (GA_GROW_FAILS(&ectx->ec_stack, 1)) + goto theend; + classmember_T *cm = &iptr->isn_arg.classmember; + *STACK_TV_BOT(0) = + cm->cm_class->class_members_tv[cm->cm_idx]; + ++ectx->ec_stack.ga_len; + } + break; + + case ISN_STORE_CLASSMEMBER: + { + classmember_T *cm = &iptr->isn_arg.classmember; + tv = &cm->cm_class->class_members_tv[cm->cm_idx]; + clear_tv(tv); + *tv = *STACK_TV_BOT(-1); + --ectx->ec_stack.ga_len; + } + break; + // Load or store variable or argument from outer scope. case ISN_LOADOUTER: case ISN_STOREOUTER: @@ -6403,6 +6424,19 @@ list_instructions(char *pfx, isn_T *inst smsg("%s%4d STORERANGE", pfx, current); break; + case ISN_LOAD_CLASSMEMBER: + case ISN_STORE_CLASSMEMBER: + { + class_T *cl = iptr->isn_arg.classmember.cm_class; + int idx = iptr->isn_arg.classmember.cm_idx; + ocmember_T *ocm = &cl->class_class_members[idx]; + smsg("%s%4d %s CLASSMEMBER %s.%s", pfx, current, + iptr->isn_type == ISN_LOAD_CLASSMEMBER + ? "LOAD" : "STORE", + cl->class_name, ocm->ocm_name); + } + break; + // constants case ISN_PUSHNR: smsg("%s%4d PUSHNR %lld", pfx, current,