diff options
author | ZyX <kp-pav@yandex.ru> | 2017-01-04 14:53:02 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-01-04 14:53:02 +0300 |
commit | d82f5d1ba2f870ea6a29019993b3818e550338b7 (patch) | |
tree | 6fb0751931d51f35d1f28d494d2d618d630b3122 | |
parent | a934144e048e76875dc2584c249b83d2a84fa731 (diff) | |
download | rneovim-d82f5d1ba2f870ea6a29019993b3818e550338b7.tar.gz rneovim-d82f5d1ba2f870ea6a29019993b3818e550338b7.tar.bz2 rneovim-d82f5d1ba2f870ea6a29019993b3818e550338b7.zip |
plugin/msgpack: Support character constants like '\0'
-rw-r--r-- | runtime/autoload/msgpack.vim | 8 | ||||
-rw-r--r-- | test/functional/plugin/msgpack_spec.lua | 2 |
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() |