diff options
Diffstat (limited to 'src/vim9class.c')
-rw-r--r-- | src/vim9class.c | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/vim9class.c b/src/vim9class.c new file mode 100644 index 0000000000..b2307cb1b7 --- /dev/null +++ b/src/vim9class.c @@ -0,0 +1,110 @@ +/* vi:set ts=8 sts=4 sw=4 noet: + * + * VIM - Vi IMproved by Bram Moolenaar + * + * Do ":help uganda" in Vim to read copying and usage conditions. + * Do ":help credits" in Vim to see a list of people who contributed. + * See README.txt for an overview of the Vim source code. + */ + +/* + * vim9class.c: Vim9 script class support + */ + +#define USING_FLOAT_STUFF +#include "vim.h" + +#if defined(FEAT_EVAL) || defined(PROTO) + +// When not generating protos this is included in proto.h +#ifdef PROTO +# include "vim9.h" +#endif + +/* + * Handle ":class" and ":abstract class" up to ":endclass". + */ + void +ex_class(exarg_T *eap) +{ + int is_abstract = eap->cmdidx == CMD_abstract; + + char_u *arg = eap->arg; + if (is_abstract) + { + if (STRNCMP(arg, "class", 5) != 0 || !VIM_ISWHITE(arg[5])) + { + semsg(_(e_invalid_argument_str), arg); + return; + } + arg = skipwhite(arg + 5); + } + + if (!ASCII_ISUPPER(*arg)) + { + semsg(_(e_class_name_must_start_with_uppercase_letter_str), arg); + return; + } + + // TODO: + // generics: <Tkey, Tentry> + // extends SomeClass + // implements SomeInterface + // specifies SomeInterface + + + // TODO: handle until "endclass" is found: + // object and class members (public, read access, private): + // public this.varname + // public static varname + // this.varname + // static varname + // this._varname + // static _varname + // + // constructors: + // def new() + // enddef + // def newOther() + // enddef + // + // methods (object, class, generics): + // def someMethod() + // enddef + // static def someMethod() + // enddef + // def <Tval> someMethod() + // enddef + // static def <Tval> someMethod() + // enddef +} + +/* + * Handle ":interface" up to ":endinterface". + */ + void +ex_interface(exarg_T *eap UNUSED) +{ + // TODO +} + +/* + * Handle ":enum" up to ":endenum". + */ + void +ex_enum(exarg_T *eap UNUSED) +{ + // TODO +} + +/* + * Handle ":type". + */ + void +ex_type(exarg_T *eap UNUSED) +{ + // TODO +} + + +#endif // FEAT_EVAL |