diff src/vim9.h @ 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 9b13b3a63bc0
line wrap: on
line diff
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -36,6 +36,8 @@ typedef enum {
     ISN_GET_OBJ_MEMBER, // object member, index is isn_arg.number
     ISN_STORE_THIS, // store value in "this" object member, index is
 		    // isn_arg.number
+    ISN_LOAD_CLASSMEMBER,  // load class member, using classmember_T
+    ISN_STORE_CLASSMEMBER,  // store in class member, using classmember_T
 
     // get and set variables
     ISN_LOAD,	    // push local variable isn_arg.number
@@ -476,6 +478,12 @@ typedef struct {
     class_T	*construct_class;   // class the object is created from
 } construct_T;
 
+// arguments to ISN_STORE_CLASSMEMBER and ISN_LOAD_CLASSMEMBER
+typedef struct {
+    class_T	*cm_class;
+    int		cm_idx;
+} classmember_T;
+
 /*
  * Instruction
  */
@@ -528,6 +536,7 @@ struct isn_S {
 	deferins_T	    defer;
 	echowin_T	    echowin;
 	construct_T	    construct;
+	classmember_T	    classmember;
     } isn_arg;
 };
 
@@ -538,7 +547,9 @@ struct dfunc_S {
     ufunc_T	*df_ufunc;	    // struct containing most stuff
     int		df_refcount;	    // how many ufunc_T point to this dfunc_T
     int		df_idx;		    // index in def_functions
-    int		df_deleted;	    // if TRUE function was deleted
+    char	df_deleted;	    // if TRUE function was deleted
+    char	df_delete_busy;	    // TRUE when in
+				    // delete_def_function_contents()
     int		df_script_seq;	    // Value of sctx_T sc_seq when the function
 				    // was compiled.
     char_u	*df_name;	    // name used for error messages
@@ -735,6 +746,7 @@ typedef enum {
     dest_window,
     dest_tab,
     dest_vimvar,
+    dest_class_member,
     dest_script,
     dest_reg,
     dest_expr,
@@ -766,6 +778,10 @@ typedef struct {
     lvar_T	    lhs_local_lvar; // used for existing local destination
     lvar_T	    lhs_arg_lvar;   // used for argument destination
     lvar_T	    *lhs_lvar;	    // points to destination lvar
+
+    class_T	    *lhs_class;		    // for dest_class_member
+    int		    lhs_classmember_idx;    // for dest_class_member
+
     int		    lhs_scriptvar_sid;
     int		    lhs_scriptvar_idx;