]> granicus.if.org Git - vim/commitdiff
patch 9.0.1249: cannot export an abstract class v9.0.1249
authorBram Moolenaar <Bram@vim.org>
Fri, 27 Jan 2023 13:16:19 +0000 (13:16 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 27 Jan 2023 13:16:19 +0000 (13:16 +0000)
Problem:    Cannot export an abstract class. (Ernie Rael)
Solution:   Add the EX_EXPORT flag to :abstract. (closes #11884)

src/errors.h
src/ex_cmds.h
src/testdir/test_vim9_class.vim
src/version.c
src/vim9class.c

index 3b54f1d9f3d0789cbf62a517d2f3556daad7e119..336c187d6d04ca9d3c6ace2e763c6e0f092624d0 100644 (file)
@@ -3442,4 +3442,6 @@ EXTERN char e_using_super_not_in_child_class[]
        INIT(= N_("E1358: Using \"super\" not in a child class"));
 EXTERN char e_cannot_define_new_function_in_abstract_class[]
        INIT(= N_("E1359: Cannot define a \"new\" function in an abstract class"));
+EXTERN char e_invalid_command_str_expected_str[]
+       INIT(= N_("E476: Invalid command: %s, expected %s"));
 #endif
index 7e127221d7882289573cec737d7c42294ba20a91..325fee569ba721619a42dbfb5d111c52c9125b08 100644 (file)
@@ -128,7 +128,7 @@ EXCMD(CMD_aboveleft,        "aboveleft",    ex_wrongmodifier,
        EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
        ADDR_NONE),
 EXCMD(CMD_abstract,    "abstract",     ex_class,
-       EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
+       EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
        ADDR_NONE),
 EXCMD(CMD_all,         "all",          ex_all,
        EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR,
index 5edd511a3cb593fc38c7aafc51d020715a3f9db7..a496b6d7d55f75d60d0621810a40be72ccbed30d 100644 (file)
@@ -164,6 +164,24 @@ def Test_class_basic()
   v9.CheckScriptSuccess(lines)
 enddef
 
+def Test_class_interface_wrong_end()
+  var lines =<< trim END
+      vim9script
+      abstract class SomeName
+        this.member = 'text'
+      endinterface
+  END
+  v9.CheckScriptFailure(lines, 'E476: Invalid command: endinterface, expected endclass')
+
+  lines =<< trim END
+      vim9script
+      export interface AnotherName
+        this.member: string
+      endclass
+  END
+  v9.CheckScriptFailure(lines, 'E476: Invalid command: endclass, expected endinterface')
+enddef
+
 def Test_class_member_initializer()
   var lines =<< trim END
       vim9script
@@ -845,6 +863,20 @@ def Test_interface_basics()
       enddef
   END
   v9.CheckScriptSuccess(lines)
+
+  var imported =<< trim END
+      vim9script
+      export abstract class EnterExit
+          def Enter(): void
+          enddef
+          def Exit(): void
+          enddef
+      endclass
+  END
+  writefile(imported, 'XdefIntf2.vim', 'D')
+
+  lines[1] = " import './XdefIntf2.vim' as defIntf"
+  v9.CheckScriptSuccess(lines)
 enddef
 
 def Test_class_implements_interface()
index 52502b525c44139f3f9dd435e6e6f2733c1512f5..cb304edec3e21d06a472af5d871996ec5fa606fc 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1249,
 /**/
     1248,
 /**/
index 484500576ec6dd875753c1d5ac6a9f6e1fbb305c..d64e35ec012437fde1f24d0c82ace1691afebc4b 100644 (file)
@@ -423,7 +423,7 @@ early_ret:
        char *wrong_name = is_class ? "endinterface" : "endclass";
        if (checkforcmd(&p, wrong_name, is_class ? 5 : 4))
        {
-           semsg(_(e_invalid_command_str), line);
+           semsg(_(e_invalid_command_str_expected_str), line, end_name);
            break;
        }