Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 7 additions & 12 deletions autoload/vimlparser.vim
Original file line number Diff line number Diff line change
Expand Up @@ -3481,15 +3481,16 @@ function! s:ExprTokenizer.get_dstring() abort
return s
endfunction

function! s:ExprTokenizer.get_dict_literal_key() abort
function! s:ExprTokenizer.parse_dict_literal_key() abort
call self.reader.skip_white()
let r = self.reader
let c = r.peek()
let c = self.reader.peek()
if !s:isalnum(c) && c !=# '_' && c !=# '-'
throw s:Err(printf('unexpected character: %s', c), self.reader.getpos())
endif
let node = s:Node(s:NODE_STRING)
let s = c
call self.reader.seek_cur(1)
let node.pos = self.reader.getpos()
while s:TRUE
let c = self.reader.p(0)
if c ==# '<EOF>' || c ==# '<EOL>'
Expand All @@ -3501,7 +3502,8 @@ function! s:ExprTokenizer.get_dict_literal_key() abort
call self.reader.seek_cur(1)
let s .= c
endwhile
return s
let node.value = "'" . s . "'"
return node
endfunction

let s:ExprParser = {}
Expand Down Expand Up @@ -4145,7 +4147,7 @@ function! s:ExprParser.parse_expr9() abort
return node
endif
while 1
let key = is_litdict ? self.parse_dict_literal_key() : self.parse_expr1()
let key = is_litdict ? self.tokenizer.parse_dict_literal_key() : self.parse_expr1()
let token = self.tokenizer.get()
if token.type ==# s:TOKEN_CCLOSE
if !empty(node.value)
Expand Down Expand Up @@ -4210,13 +4212,6 @@ function! s:ExprParser.parse_expr9() abort
return node
endfunction

function! s:ExprParser.parse_dict_literal_key() abort
let node = s:Node(s:NODE_STRING)
let node.pos = self.reader.tell()
let node.value = "'" . self.tokenizer.get_dict_literal_key() . "'"
return node
endfunction

" SUBSCRIPT or CONCAT
" dict "." [0-9A-Za-z_]+ => (subscript dict key)
" str "." expr6 => (concat str expr6)
Expand Down
19 changes: 7 additions & 12 deletions js/vimlparser.js
Original file line number Diff line number Diff line change
Expand Up @@ -2807,15 +2807,16 @@ ExprTokenizer.prototype.get_dstring = function() {
return s;
}

ExprTokenizer.prototype.get_dict_literal_key = function() {
ExprTokenizer.prototype.parse_dict_literal_key = function() {
this.reader.skip_white();
var r = this.reader;
var c = r.peek();
var c = this.reader.peek();
if (!isalnum(c) && c != "_" && c != "-") {
throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
}
var node = Node(NODE_STRING);
var s = c;
this.reader.seek_cur(1);
node.pos = this.reader.getpos();
while (TRUE) {
var c = this.reader.p(0);
if (c == "<EOF>" || c == "<EOL>") {
Expand All @@ -2827,7 +2828,8 @@ ExprTokenizer.prototype.get_dict_literal_key = function() {
this.reader.seek_cur(1);
s += c;
}
return s;
node.value = "'" + s + "'";
return node;
}

function ExprParser() { this.__init__.apply(this, arguments); }
Expand Down Expand Up @@ -3533,7 +3535,7 @@ ExprParser.prototype.parse_expr9 = function() {
return node;
}
while (1) {
var key = is_litdict ? this.parse_dict_literal_key() : this.parse_expr1();
var key = is_litdict ? this.tokenizer.parse_dict_literal_key() : this.parse_expr1();
var token = this.tokenizer.get();
if (token.type == TOKEN_CCLOSE) {
if (!viml_empty(node.value)) {
Expand Down Expand Up @@ -3609,13 +3611,6 @@ ExprParser.prototype.parse_expr9 = function() {
return node;
}

ExprParser.prototype.parse_dict_literal_key = function() {
var node = Node(NODE_STRING);
node.pos = this.reader.tell();
node.value = "'" + this.tokenizer.get_dict_literal_key() + "'";
return node;
}

// SUBSCRIPT or CONCAT
// dict "." [0-9A-Za-z_]+ => (subscript dict key)
// str "." expr6 => (concat str expr6)
Expand Down
18 changes: 7 additions & 11 deletions py/vimlparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2270,14 +2270,15 @@ def get_dstring(self):
s += c
return s

def get_dict_literal_key(self):
def parse_dict_literal_key(self):
self.reader.skip_white()
r = self.reader
c = r.peek()
c = self.reader.peek()
if not isalnum(c) and c != "_" and c != "-":
raise VimLParserException(Err(viml_printf("unexpected character: %s", c), self.reader.getpos()))
node = Node(NODE_STRING)
s = c
self.reader.seek_cur(1)
node.pos = self.reader.getpos()
while TRUE:
c = self.reader.p(0)
if c == "<EOF>" or c == "<EOL>":
Expand All @@ -2286,7 +2287,8 @@ def get_dict_literal_key(self):
break
self.reader.seek_cur(1)
s += c
return s
node.value = "'" + s + "'"
return node


class ExprParser:
Expand Down Expand Up @@ -2874,7 +2876,7 @@ def parse_expr9(self):
self.tokenizer.get()
return node
while 1:
key = self.parse_dict_literal_key() if is_litdict else self.parse_expr1()
key = self.tokenizer.parse_dict_literal_key() if is_litdict else self.parse_expr1()
token = self.tokenizer.get()
if token.type == TOKEN_CCLOSE:
if not viml_empty(node.value):
Expand Down Expand Up @@ -2930,12 +2932,6 @@ def parse_expr9(self):
raise VimLParserException(Err(viml_printf("unexpected token: %s", token.value), token.pos))
return node

def parse_dict_literal_key(self):
node = Node(NODE_STRING)
node.pos = self.reader.tell()
node.value = "'" + self.tokenizer.get_dict_literal_key() + "'"
return node

# SUBSCRIPT or CONCAT
# dict "." [0-9A-Za-z_]+ => (subscript dict key)
# str "." expr6 => (concat str expr6)
Expand Down