Skip to content

Commit 2111a27

Browse files
authored
Merge pull request #156 from blueyed/dict-lit-pos
parse_dict_literal_key: use getpos for pos
2 parents 9cc29ee + 3a40dd9 commit 2111a27

File tree

3 files changed

+21
-35
lines changed

3 files changed

+21
-35
lines changed

autoload/vimlparser.vim

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3481,15 +3481,16 @@ function! s:ExprTokenizer.get_dstring() abort
34813481
return s
34823482
endfunction
34833483

3484-
function! s:ExprTokenizer.get_dict_literal_key() abort
3484+
function! s:ExprTokenizer.parse_dict_literal_key() abort
34853485
call self.reader.skip_white()
3486-
let r = self.reader
3487-
let c = r.peek()
3486+
let c = self.reader.peek()
34883487
if !s:isalnum(c) && c !=# '_' && c !=# '-'
34893488
throw s:Err(printf('unexpected character: %s', c), self.reader.getpos())
34903489
endif
3490+
let node = s:Node(s:NODE_STRING)
34913491
let s = c
34923492
call self.reader.seek_cur(1)
3493+
let node.pos = self.reader.getpos()
34933494
while s:TRUE
34943495
let c = self.reader.p(0)
34953496
if c ==# '<EOF>' || c ==# '<EOL>'
@@ -3501,7 +3502,8 @@ function! s:ExprTokenizer.get_dict_literal_key() abort
35013502
call self.reader.seek_cur(1)
35023503
let s .= c
35033504
endwhile
3504-
return s
3505+
let node.value = "'" . s . "'"
3506+
return node
35053507
endfunction
35063508

35073509
let s:ExprParser = {}
@@ -4145,7 +4147,7 @@ function! s:ExprParser.parse_expr9() abort
41454147
return node
41464148
endif
41474149
while 1
4148-
let key = is_litdict ? self.parse_dict_literal_key() : self.parse_expr1()
4150+
let key = is_litdict ? self.tokenizer.parse_dict_literal_key() : self.parse_expr1()
41494151
let token = self.tokenizer.get()
41504152
if token.type ==# s:TOKEN_CCLOSE
41514153
if !empty(node.value)
@@ -4210,13 +4212,6 @@ function! s:ExprParser.parse_expr9() abort
42104212
return node
42114213
endfunction
42124214

4213-
function! s:ExprParser.parse_dict_literal_key() abort
4214-
let node = s:Node(s:NODE_STRING)
4215-
let node.pos = self.reader.tell()
4216-
let node.value = "'" . self.tokenizer.get_dict_literal_key() . "'"
4217-
return node
4218-
endfunction
4219-
42204215
" SUBSCRIPT or CONCAT
42214216
" dict "." [0-9A-Za-z_]+ => (subscript dict key)
42224217
" str "." expr6 => (concat str expr6)

js/vimlparser.js

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2807,15 +2807,16 @@ ExprTokenizer.prototype.get_dstring = function() {
28072807
return s;
28082808
}
28092809

2810-
ExprTokenizer.prototype.get_dict_literal_key = function() {
2810+
ExprTokenizer.prototype.parse_dict_literal_key = function() {
28112811
this.reader.skip_white();
2812-
var r = this.reader;
2813-
var c = r.peek();
2812+
var c = this.reader.peek();
28142813
if (!isalnum(c) && c != "_" && c != "-") {
28152814
throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
28162815
}
2816+
var node = Node(NODE_STRING);
28172817
var s = c;
28182818
this.reader.seek_cur(1);
2819+
node.pos = this.reader.getpos();
28192820
while (TRUE) {
28202821
var c = this.reader.p(0);
28212822
if (c == "<EOF>" || c == "<EOL>") {
@@ -2827,7 +2828,8 @@ ExprTokenizer.prototype.get_dict_literal_key = function() {
28272828
this.reader.seek_cur(1);
28282829
s += c;
28292830
}
2830-
return s;
2831+
node.value = "'" + s + "'";
2832+
return node;
28312833
}
28322834

28332835
function ExprParser() { this.__init__.apply(this, arguments); }
@@ -3533,7 +3535,7 @@ ExprParser.prototype.parse_expr9 = function() {
35333535
return node;
35343536
}
35353537
while (1) {
3536-
var key = is_litdict ? this.parse_dict_literal_key() : this.parse_expr1();
3538+
var key = is_litdict ? this.tokenizer.parse_dict_literal_key() : this.parse_expr1();
35373539
var token = this.tokenizer.get();
35383540
if (token.type == TOKEN_CCLOSE) {
35393541
if (!viml_empty(node.value)) {
@@ -3609,13 +3611,6 @@ ExprParser.prototype.parse_expr9 = function() {
36093611
return node;
36103612
}
36113613

3612-
ExprParser.prototype.parse_dict_literal_key = function() {
3613-
var node = Node(NODE_STRING);
3614-
node.pos = this.reader.tell();
3615-
node.value = "'" + this.tokenizer.get_dict_literal_key() + "'";
3616-
return node;
3617-
}
3618-
36193614
// SUBSCRIPT or CONCAT
36203615
// dict "." [0-9A-Za-z_]+ => (subscript dict key)
36213616
// str "." expr6 => (concat str expr6)

py/vimlparser.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2270,14 +2270,15 @@ def get_dstring(self):
22702270
s += c
22712271
return s
22722272

2273-
def get_dict_literal_key(self):
2273+
def parse_dict_literal_key(self):
22742274
self.reader.skip_white()
2275-
r = self.reader
2276-
c = r.peek()
2275+
c = self.reader.peek()
22772276
if not isalnum(c) and c != "_" and c != "-":
22782277
raise VimLParserException(Err(viml_printf("unexpected character: %s", c), self.reader.getpos()))
2278+
node = Node(NODE_STRING)
22792279
s = c
22802280
self.reader.seek_cur(1)
2281+
node.pos = self.reader.getpos()
22812282
while TRUE:
22822283
c = self.reader.p(0)
22832284
if c == "<EOF>" or c == "<EOL>":
@@ -2286,7 +2287,8 @@ def get_dict_literal_key(self):
22862287
break
22872288
self.reader.seek_cur(1)
22882289
s += c
2289-
return s
2290+
node.value = "'" + s + "'"
2291+
return node
22902292

22912293

22922294
class ExprParser:
@@ -2874,7 +2876,7 @@ def parse_expr9(self):
28742876
self.tokenizer.get()
28752877
return node
28762878
while 1:
2877-
key = self.parse_dict_literal_key() if is_litdict else self.parse_expr1()
2879+
key = self.tokenizer.parse_dict_literal_key() if is_litdict else self.parse_expr1()
28782880
token = self.tokenizer.get()
28792881
if token.type == TOKEN_CCLOSE:
28802882
if not viml_empty(node.value):
@@ -2930,12 +2932,6 @@ def parse_expr9(self):
29302932
raise VimLParserException(Err(viml_printf("unexpected token: %s", token.value), token.pos))
29312933
return node
29322934

2933-
def parse_dict_literal_key(self):
2934-
node = Node(NODE_STRING)
2935-
node.pos = self.reader.tell()
2936-
node.value = "'" + self.tokenizer.get_dict_literal_key() + "'"
2937-
return node
2938-
29392935
# SUBSCRIPT or CONCAT
29402936
# dict "." [0-9A-Za-z_]+ => (subscript dict key)
29412937
# str "." expr6 => (concat str expr6)

0 commit comments

Comments
 (0)