patch 9.1.0694: matchparen is slow on a long line

Problem:  The matchparen plugin is slow on a long line.
Solution: Don't use a regexp to get char at and before cursor.
          (zeertzjq)

Example:

```vim
  call setline(1, repeat(' foobar', 100000))
  runtime plugin/matchparen.vim
  normal! $hhhhhhhh
```

closes: #15568

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_matchparen.vim b/src/testdir/test_matchparen.vim
index 70aa38f..49d3510 100644
--- a/src/testdir/test_matchparen.vim
+++ b/src/testdir/test_matchparen.vim
@@ -108,5 +108,35 @@
   call StopVimInTerminal(buf)
 endfunc
 
+" Test that matchparen works with multibyte chars in 'matchpairs'
+func Test_matchparen_mbyte()
+  CheckScreendump
+
+  let lines =<< trim END
+    source $VIMRUNTIME/plugin/matchparen.vim
+    call setline(1, ['aaaaaaaa(', 'bbbb)cc'])
+    set matchpairs+=(:)
+  END
+
+  call writefile(lines, 'XmatchparenMbyte', 'D')
+  let buf = RunVimInTerminal('-S XmatchparenMbyte', #{rows: 10})
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_1', {})
+  call term_sendkeys(buf, "$")
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_2', {})
+  call term_sendkeys(buf, "j")
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_3', {})
+  call term_sendkeys(buf, "2h")
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_4', {})
+  call term_sendkeys(buf, "0")
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_5', {})
+  call term_sendkeys(buf, "kA")
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_6', {})
+  call term_sendkeys(buf, "\<Down>")
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_7', {})
+  call term_sendkeys(buf, "\<C-W>")
+  call VerifyScreenDump(buf, 'Test_matchparen_mbyte_8', {})
+
+  call StopVimInTerminal(buf)
+endfunc
 
 " vim: shiftwidth=2 sts=2 expandtab