diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-12-18 21:42:55 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-12-18 21:42:55 +0000 |
commit | d505d178858434e1afef0363a9fce4bcb1bc3d06 (patch) | |
tree | 358c5f600112605517bb4b92ab155ce2e55e7123 /src/vim9execute.c | |
parent | 731d00770d9006e7dab6a66e2ea86603ed5ef212 (diff) | |
download | vim-git-d505d178858434e1afef0363a9fce4bcb1bc3d06.tar.gz |
patch 9.0.1074: class members are not supported yetv9.0.1074
Problem: Class members are not supported yet.
Solution: Add initial support for class members.
Diffstat (limited to 'src/vim9execute.c')
-rw-r--r-- | src/vim9execute.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/vim9execute.c b/src/vim9execute.c index 1a8058a4b..cdaeb5b84 100644 --- 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 *instr, int instr_count, ufunc_T *ufunc) 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, |