aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-01-04 14:53:02 +0300
committerZyX <kp-pav@yandex.ru>2017-01-04 14:53:02 +0300
commitd82f5d1ba2f870ea6a29019993b3818e550338b7 (patch)
tree6fb0751931d51f35d1f28d494d2d618d630b3122
parenta934144e048e76875dc2584c249b83d2a84fa731 (diff)
downloadrneovim-d82f5d1ba2f870ea6a29019993b3818e550338b7.tar.gz
rneovim-d82f5d1ba2f870ea6a29019993b3818e550338b7.tar.bz2
rneovim-d82f5d1ba2f870ea6a29019993b3818e550338b7.zip
plugin/msgpack: Support character constants like '\0'
-rw-r--r--runtime/autoload/msgpack.vim8
-rw-r--r--test/functional/plugin/msgpack_spec.lua2
2 files changed, 8 insertions, 2 deletions
diff --git a/runtime/autoload/msgpack.vim b/runtime/autoload/msgpack.vim
index 2e2697c57f..a10ac32469 100644
--- a/runtime/autoload/msgpack.vim
+++ b/runtime/autoload/msgpack.vim
@@ -665,11 +665,15 @@ function msgpack#eval(s, special_objs) abort
call add(expr, ']}')
let s = s[1:]
elseif s[0] is# ''''
- let char = matchstr(s, '\m\C^''\zs.\ze''')
+ let char = matchstr(s, '\v\C^\''\zs%(\\\d+|.)\ze\''')
if empty(char)
throw 'char-invalid:Invalid integer character literal format: ' . s
endif
- call add(expr, char2nr(char))
+ if char[0] is# '\'
+ call add(expr, +char[1:])
+ else
+ call add(expr, char2nr(char))
+ endif
let s = s[len(char) + 2:]
else
throw 'unknown:Invalid non-space character: ' . s
diff --git a/test/functional/plugin/msgpack_spec.lua b/test/functional/plugin/msgpack_spec.lua
index c8da8e8f6c..5ba19708cf 100644
--- a/test/functional/plugin/msgpack_spec.lua
+++ b/test/functional/plugin/msgpack_spec.lua
@@ -652,6 +652,8 @@ describe('In autoload/msgpack.vim', function()
eval_eq('integer', ('a'):byte(), '\'a\'')
eval_eq('integer', 0xAB, '\'«\'')
+ eval_eq('integer', 0, '\'\\0\'')
+ eval_eq('integer', 10246567, '\'\\10246567\'')
end)
it('correctly loads constants', function()