Skip to content

Commit 6eb8079

Browse files
committed
Support def
1 parent cb6c018 commit 6eb8079

33 files changed

+704
-147
lines changed

autoload/vimlparser.vim

Lines changed: 203 additions & 47 deletions
Large diffs are not rendered by default.

js/jscompiler.vim

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,9 @@ endfunction
386386

387387
function s:JavascriptCompiler.compile_unlet(node)
388388
let list = map(a:node.list, 'self.compile(v:val)')
389-
call self.out('delete %s;', join(list, ', '))
389+
for v in list
390+
call self.out('%s = undefined;', v)
391+
endfor
390392
endfunction
391393

392394
function s:JavascriptCompiler.compile_lockvar(node)
@@ -719,7 +721,13 @@ function s:JavascriptCompiler.compile_subscript(node)
719721
endfunction
720722

721723
function s:JavascriptCompiler.compile_slice(node)
722-
throw 'NotImplemented: slice'
724+
let left = self.compile(a:node.left)
725+
let start = a:node.rlist[0] is s:NIL ? '0' : self.compile(a:node.rlist[0])
726+
if a:node.rlist[1] is s:NIL
727+
return printf('%s.slice(%s)', left, start)
728+
else
729+
return printf('%s.slice(%s, %s + 1)', left, start, self.compile(a:node.rlist[1]))
730+
endif
723731
endfunction
724732

725733
function s:JavascriptCompiler.compile_dot(node)

js/vimlparser.js

Lines changed: 227 additions & 56 deletions
Large diffs are not rendered by default.

py/pycompiler.vim

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,10 @@ function s:PythonCompiler.compile_subscript(node)
767767
endfunction
768768

769769
function s:PythonCompiler.compile_slice(node)
770-
throw 'NotImplemented: slice'
770+
let left = self.compile(a:node.left)
771+
let rstart = a:node.rlist[0] is s:NIL ? '' : self.compile(a:node.rlist[0])
772+
let rend = a:node.rlist[1] is s:NIL ? '' : (self.compile(a:node.rlist[1]) . ' + 1')
773+
return printf('%s[%s:%s]', left, rstart, rend)
771774
endfunction
772775

773776
function s:PythonCompiler.compile_dot(node)

py/vimlparser.py

Lines changed: 163 additions & 41 deletions
Large diffs are not rendered by default.

test/test_def.ok

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
(excmd "vim9script")
2+
(def (A))
3+
(def (HasReturnType)
4+
(return (dict (0 'a'))))
5+
(def (NoReturnType)
6+
(return))
7+
(def (HasArgs a b c))
8+
(def (AllowedArgNames firstline lastline))
9+
(def (ArgsWithLineBreak a b))
10+
(def (NoArgsWithLineBreak))
11+
(def (g:GlobalScope))

test/test_def.vim

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
vim9script
2+
3+
def A()
4+
enddef
5+
6+
def HasReturnType(): tuple<number, string>
7+
return { 0: 'a' }
8+
enddef
9+
10+
def NoReturnType()
11+
return
12+
enddef
13+
14+
def HasArgs(a: number, b: list<number>, c: tuple<string, list<number>>)
15+
enddef
16+
17+
def AllowedArgNames(firstline: number, lastline: number)
18+
enddef
19+
20+
def ArgsWithLineBreak(
21+
a: number,
22+
b: list<number>,
23+
)
24+
enddef
25+
26+
def NoArgsWithLineBreak(
27+
)
28+
enddef
29+
30+
def! g:GlobalScope()
31+
enddef
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
vimlparser: E1003: Missing return value: line 3 col 3
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
vim9script
2+
def A(): number
3+
return
4+
enddef
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
vimlparser: E1096: Returning a value in a function without a return type: line 3 col 3

0 commit comments

Comments
 (0)