summaryrefslogtreecommitdiff
path: root/src/vim9execute.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-12-18 21:42:55 +0000
committerBram Moolenaar <Bram@vim.org>2022-12-18 21:42:55 +0000
commitd505d178858434e1afef0363a9fce4bcb1bc3d06 (patch)
tree358c5f600112605517bb4b92ab155ce2e55e7123 /src/vim9execute.c
parent731d00770d9006e7dab6a66e2ea86603ed5ef212 (diff)
downloadvim-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.c34
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,