@@ -137,6 +137,7 @@ let s:NODE_REG = 89
137137let s: NODE_CURLYNAMEPART = 90
138138let s: NODE_CURLYNAMEEXPR = 91
139139let s: NODE_LAMBDA = 92
140+ let s: NODE_BLOB = 93
140141
141142let s: TOKEN_EOF = 1
142143let s: TOKEN_EOL = 2
@@ -203,6 +204,7 @@ let s:TOKEN_BACKTICK = 62
203204let s: TOKEN_DOTDOTDOT = 63
204205let s: TOKEN_SHARP = 64
205206let s: TOKEN_ARROW = 65
207+ let s: TOKEN_BLOB = 66
206208
207209let s: MAX_FUNC_ARGS = 20
208210
@@ -2580,6 +2582,10 @@ function! s:ExprTokenizer.get2()
25802582 let s = r .getn (3 )
25812583 let s .= r .read_bdigit ()
25822584 return self .token (s: TOKEN_NUMBER , s , pos)
2585+ elseif c == # ' 0' && (r .p (1 ) == # ' Z' || r .p (1 ) == # ' z' ) && r .p (2 ) !=# ' .'
2586+ let s = r .getn (3 )
2587+ let s .= r .read_blob ()
2588+ return self .token (s: TOKEN_BLOB , s , pos)
25832589 elseif s: isdigit (c )
25842590 let s = r .read_digit ()
25852591 if r .p (0 ) == # ' .' && s: isdigit (r .p (1 ))
@@ -3374,6 +3380,10 @@ function! s:ExprParser.parse_expr9()
33743380 let node = s: Node (s: NODE_NUMBER )
33753381 let node.pos = token.pos
33763382 let node.value = token.value
3383+ elseif token.type == s: TOKEN_BLOB
3384+ let node = s: Node (s: NODE_BLOB )
3385+ let node.pos = token.pos
3386+ let node.value = token.value
33773387 elseif token.type == s: TOKEN_DQUOTE
33783388 call self .reader.seek_set (pos)
33793389 let node = s: Node (s: NODE_STRING )
@@ -3941,6 +3951,18 @@ function! s:StringReader.read_odigit()
39413951 return r
39423952endfunction
39433953
3954+ function ! s: StringReader .read_blob ()
3955+ let r = ' '
3956+ while 1
3957+ let c = self .peekn (1 )
3958+ if ! s: isxdigit (c ) && c != ' .'
3959+ break
3960+ endif
3961+ let r .= self .getn (1 )
3962+ endwhile
3963+ return r
3964+ endfunction
3965+
39443966function ! s: StringReader .read_xdigit ()
39453967 let r = ' '
39463968 while s: isxdigit (self .peekn (1 ))
@@ -4213,6 +4235,8 @@ function! s:Compiler.compile(node)
42134235 return self .compile_call (a: node )
42144236 elseif a: node .type == s: NODE_NUMBER
42154237 return self .compile_number (a: node )
4238+ elseif a: node .type == s: NODE_BLOB
4239+ return self .compile_blob (a: node )
42164240 elseif a: node .type == s: NODE_STRING
42174241 return self .compile_string (a: node )
42184242 elseif a: node .type == s: NODE_LIST
@@ -4643,6 +4667,10 @@ function! s:Compiler.compile_number(node)
46434667 return a: node .value
46444668endfunction
46454669
4670+ function ! s: Compiler .compile_blob (node)
4671+ return a: node .value
4672+ endfunction
4673+
46464674function ! s: Compiler .compile_string (node)
46474675 return a: node .value
46484676endfunction
0 commit comments