aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/msgpack.vim11
-rw-r--r--test/functional/plugin/msgpack_spec.lua22
2 files changed, 26 insertions, 7 deletions
diff --git a/runtime/autoload/msgpack.vim b/runtime/autoload/msgpack.vim
index 09c99c940d..7dd225e3d9 100644
--- a/runtime/autoload/msgpack.vim
+++ b/runtime/autoload/msgpack.vim
@@ -605,13 +605,10 @@ function msgpack#eval(s, special_objs) abort
call add(expr, dec)
endif
endif
- elseif s =~# '-\?\%(inf\|nan\)'
- if s[0] is# '-'
- call add(expr, '-')
- let s = s[1:]
- endif
- call add(expr, s:MSGPACK_SPECIAL_OBJECTS[s[0:2]])
- let s = s[3:]
+ elseif s =~# '\v^\-%(inf|nan)'
+ call add(expr, '-')
+ call add(expr, s:MSGPACK_SPECIAL_OBJECTS[s[1:3]])
+ let s = s[4:]
elseif stridx('="+', s[0]) != -1
let match = matchlist(s, '\v\C^(\=|\+\((\-?\d+)\)|)(\"%(\\.|[^\\"]+)*\")')
if empty(match)
diff --git a/test/functional/plugin/msgpack_spec.lua b/test/functional/plugin/msgpack_spec.lua
index 4b014cbc73..2ce9974812 100644
--- a/test/functional/plugin/msgpack_spec.lua
+++ b/test/functional/plugin/msgpack_spec.lua
@@ -581,6 +581,8 @@ describe('autoload/msgpack.vim', function()
eval_eq('binary', {'', 'abc', '', '', 'def'}, '"\\nabc\\n\\n\\ndef"')
eval_eq('binary', {''}, '""')
eval_eq('binary', {'"'}, '"\\""')
+ eval_eq('binary', {'py3 print(sys.version_info)'},
+ '"py3 print(sys.version_info)"')
end)
it('correctly loads strings', function()
@@ -595,6 +597,8 @@ describe('autoload/msgpack.vim', function()
eval_eq('string', {'', 'abc', '', '', 'def'}, '="\\nabc\\n\\n\\ndef"')
eval_eq('string', {''}, '=""')
eval_eq('string', {'"'}, '="\\""')
+ eval_eq('string', {'py3 print(sys.version_info)'},
+ '="py3 print(sys.version_info)"')
end)
it('correctly loads ext values', function()
@@ -625,6 +629,9 @@ describe('autoload/msgpack.vim', function()
'+(-1)"\\nabc\\n\\n\\ndef"')
eval_eq('ext', {-1, {''}}, '+(-1)""')
eval_eq('ext', {-1, {'"'}}, '+(-1)"\\""')
+
+ eval_eq('ext', {42, {'py3 print(sys.version_info)'}},
+ '+(42)"py3 print(sys.version_info)"')
end)
it('correctly loads floats', function()
@@ -676,6 +683,13 @@ describe('autoload/msgpack.vim', function()
eval_eq('map', {{{_TYPE={}, _VAL={{1, 2}}}, {_TYPE={}, _VAL={{3, 4}}}},
{1, 2}},
'{{1: 2}: {3: 4}, 1: 2}')
+
+ eval_eq('map', {{{_TYPE={}, _VAL={
+ {{_TYPE={}, _VAL={'py3 print(sys.version_info)'}},
+ 2}}},
+ {_TYPE={}, _VAL={{3, 4}}}},
+ {1, 2}},
+ '{{"py3 print(sys.version_info)": 2}: {3: 4}, 1: 2}')
end)
it('correctly loads arrays', function()
@@ -684,6 +698,9 @@ describe('autoload/msgpack.vim', function()
eval_eq('array', {{_TYPE={}, _VAL=1}}, '[TRUE]')
eval_eq('array', {{{_TYPE={}, _VAL={{1, 2}}}}, {_TYPE={}, _VAL={{3, 4}}}},
'[[{1: 2}], {3: 4}]')
+
+ eval_eq('array', {{_TYPE={}, _VAL={'py3 print(sys.version_info)'}}},
+ '["py3 print(sys.version_info)"]')
end)
it('errors out when needed', function()
@@ -711,6 +728,11 @@ describe('autoload/msgpack.vim', function()
exc_exec('call msgpack#eval("0x", {})'))
eq('name-unknown:Unknown name FOO: FOO',
exc_exec('call msgpack#eval("FOO", {})'))
+
+ eq('name-unknown:Unknown name py3: py3 print(sys.version_info)',
+ exc_exec('call msgpack#eval("py3 print(sys.version_info)", {})'))
+ eq('name-unknown:Unknown name o: o',
+ exc_exec('call msgpack#eval("-info", {})'))
end)
end)
end)