diff options
-rw-r--r-- | runtime/autoload/msgpack.vim | 11 | ||||
-rw-r--r-- | test/functional/plugin/msgpack_spec.lua | 22 |
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) |