@@ -84,6 +84,9 @@ var pat_vim2js = {
8484 "^[a-z]$" : "^[a-z]$" ,
8585 "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$" ,
8686 "^[0-7]$" : "^[0-7]$" ,
87+ "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$" ,
88+ "^\\.[0-9A-Fa-f]$" : "^\\.[0-9A-Fa-f]$" ,
89+ "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$" ,
8790}
8891
8992function viml_add ( lst , item ) {
@@ -327,6 +330,7 @@ var NODE_REG = 89;
327330var NODE_CURLYNAMEPART = 90 ;
328331var NODE_CURLYNAMEEXPR = 91 ;
329332var NODE_LAMBDA = 92 ;
333+ var NODE_BLOB = 93 ;
330334var TOKEN_EOF = 1 ;
331335var TOKEN_EOL = 2 ;
332336var TOKEN_SPACE = 3 ;
@@ -392,6 +396,7 @@ var TOKEN_BACKTICK = 62;
392396var TOKEN_DOTDOTDOT = 63 ;
393397var TOKEN_SHARP = 64 ;
394398var TOKEN_ARROW = 65 ;
399+ var TOKEN_BLOB = 66 ;
395400var MAX_FUNC_ARGS = 20 ;
396401function isalpha ( c ) {
397402 return viml_eqregh ( c , "^[A-Za-z]$" ) ;
@@ -2329,6 +2334,11 @@ ExprTokenizer.prototype.get2 = function() {
23292334 s += r . read_bdigit ( ) ;
23302335 return this . token ( TOKEN_NUMBER , s , pos ) ;
23312336 }
2337+ else if ( c == "0" && ( r . p ( 1 ) == "Z" || r . p ( 1 ) == "z" ) && r . p ( 2 ) != "." ) {
2338+ var s = r . getn ( 2 ) ;
2339+ s += r . read_blob ( ) ;
2340+ return this . token ( TOKEN_BLOB , s , pos ) ;
2341+ }
23322342 else if ( isdigit ( c ) ) {
23332343 var s = r . read_digit ( ) ;
23342344 if ( r . p ( 0 ) == "." && isdigit ( r . p ( 1 ) ) ) {
@@ -3236,6 +3246,11 @@ ExprParser.prototype.parse_expr9 = function() {
32363246 node . pos = token . pos ;
32373247 node . value = token . value ;
32383248 }
3249+ else if ( token . type == TOKEN_BLOB ) {
3250+ var node = Node ( NODE_BLOB ) ;
3251+ node . pos = token . pos ;
3252+ node . value = token . value ;
3253+ }
32393254 else if ( token . type == TOKEN_DQUOTE ) {
32403255 this . reader . seek_set ( pos ) ;
32413256 var node = Node ( NODE_STRING ) ;
@@ -3846,6 +3861,26 @@ StringReader.prototype.read_odigit = function() {
38463861 return r ;
38473862}
38483863
3864+ StringReader . prototype . read_blob = function ( ) {
3865+ var r = "" ;
3866+ while ( 1 ) {
3867+ var s = this . peekn ( 2 ) ;
3868+ if ( viml_eqregh ( s , "^[0-9A-Fa-f][0-9A-Fa-f]$" ) ) {
3869+ r += this . getn ( 2 ) ;
3870+ }
3871+ else if ( viml_eqregh ( s , "^\\.[0-9A-Fa-f]$" ) ) {
3872+ r += this . getn ( 1 ) ;
3873+ }
3874+ else if ( viml_eqregh ( s , "^[0-9A-Fa-f][^0-9A-Fa-f]$" ) ) {
3875+ throw Err ( "E973: Blob literal should have an even number of hex characters:" + s , this . getpos ( ) ) ;
3876+ }
3877+ else {
3878+ break ;
3879+ }
3880+ }
3881+ return r ;
3882+ }
3883+
38493884StringReader . prototype . read_xdigit = function ( ) {
38503885 var r = "" ;
38513886 while ( isxdigit ( this . peekn ( 1 ) ) ) {
@@ -4185,6 +4220,9 @@ Compiler.prototype.compile = function(node) {
41854220 else if ( node . type == NODE_NUMBER ) {
41864221 return this . compile_number ( node ) ;
41874222 }
4223+ else if ( node . type == NODE_BLOB ) {
4224+ return this . compile_blob ( node ) ;
4225+ }
41884226 else if ( node . type == NODE_STRING ) {
41894227 return this . compile_string ( node ) ;
41904228 }
@@ -4640,6 +4678,10 @@ Compiler.prototype.compile_number = function(node) {
46404678 return node . value ;
46414679}
46424680
4681+ Compiler . prototype . compile_blob = function ( node ) {
4682+ return node . value ;
4683+ }
4684+
46434685Compiler . prototype . compile_string = function ( node ) {
46444686 return node . value ;
46454687}
0 commit comments