Skip to content

Commit feef606

Browse files
committed
fix node exportation
1 parent 3827bd1 commit feef606

File tree

1 file changed

+41
-36
lines changed

1 file changed

+41
-36
lines changed

go/export.go

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ func (self *VimLParser) Parse(reader *StringReader, filename string) ast.Node {
1111
return newAstNode(self.parse(reader), filename)
1212
}
1313

14-
func (self *ExprParser) Parse() ast.Node {
15-
return newAstNode(self.parse(), "")
14+
func (self *ExprParser) Parse() ast.Expr {
15+
return newExprNode(self.parse(), "")
1616
}
1717

1818
// ----
@@ -65,7 +65,7 @@ func newAstNode(n *VimNode, filename string) ast.Node {
6565
Func: pos,
6666
ExArg: newExArg(*n.ea, filename),
6767
Body: newBody(*n, filename),
68-
Name: newAstNode(n.left, filename),
68+
Name: newExprNode(n.left, filename),
6969
Params: newIdents(*n, filename),
7070
Attr: attr,
7171
EndFunction: newAstNode(n.endfunction, filename).(*ast.EndFunction),
@@ -81,14 +81,14 @@ func newAstNode(n *VimNode, filename string) ast.Node {
8181
return &ast.DelFunction{
8282
DelFunc: pos,
8383
ExArg: newExArg(*n.ea, filename),
84-
Name: newAstNode(n.left, filename),
84+
Name: newExprNode(n.left, filename),
8585
}
8686

8787
case NODE_RETURN:
8888
return &ast.Return{
8989
Return: pos,
9090
ExArg: newExArg(*n.ea, filename),
91-
Result: newAstNode(n.left, filename),
91+
Result: newExprNode(n.left, filename),
9292
}
9393

9494
case NODE_EXCALL:
@@ -103,10 +103,10 @@ func newAstNode(n *VimNode, filename string) ast.Node {
103103
Let: pos,
104104
ExArg: newExArg(*n.ea, filename),
105105
Op: n.op,
106-
Left: newAstNode(n.left, filename),
106+
Left: newExprNode(n.left, filename),
107107
List: newList(*n, filename),
108-
Rest: newAstNode(n.rest, filename),
109-
Right: newAstNode(n.right, filename),
108+
Rest: newExprNode(n.rest, filename),
109+
Right: newExprNode(n.right, filename),
110110
}
111111

112112
case NODE_UNLET:
@@ -150,7 +150,7 @@ func newAstNode(n *VimNode, filename string) ast.Node {
150150
If: pos,
151151
ExArg: newExArg(*n.ea, filename),
152152
Body: newBody(*n, filename),
153-
Condition: newAstNode(n.cond, filename),
153+
Condition: newExprNode(n.cond, filename),
154154
ElseIf: elifs,
155155
Else: els,
156156
EndIf: newAstNode(n.endif, filename).(*ast.EndIf),
@@ -161,7 +161,7 @@ func newAstNode(n *VimNode, filename string) ast.Node {
161161
ElseIf: pos,
162162
ExArg: newExArg(*n.ea, filename),
163163
Body: newBody(*n, filename),
164-
Condition: newAstNode(n.cond, filename),
164+
Condition: newExprNode(n.cond, filename),
165165
}
166166

167167
case NODE_ELSE:
@@ -182,7 +182,7 @@ func newAstNode(n *VimNode, filename string) ast.Node {
182182
While: pos,
183183
ExArg: newExArg(*n.ea, filename),
184184
Body: newBody(*n, filename),
185-
Condition: newAstNode(n.cond, filename),
185+
Condition: newExprNode(n.cond, filename),
186186
EndWhile: newAstNode(n.endwhile, filename).(*ast.EndWhile),
187187
}
188188

@@ -197,10 +197,10 @@ func newAstNode(n *VimNode, filename string) ast.Node {
197197
For: pos,
198198
ExArg: newExArg(*n.ea, filename),
199199
Body: newBody(*n, filename),
200-
Left: newAstNode(n.left, filename),
200+
Left: newExprNode(n.left, filename),
201201
List: newList(*n, filename),
202-
Rest: newAstNode(n.rest, filename),
203-
Right: newAstNode(n.right, filename),
202+
Rest: newExprNode(n.rest, filename),
203+
Right: newExprNode(n.right, filename),
204204
EndFor: newAstNode(n.endfor, filename).(*ast.EndFor),
205205
}
206206

@@ -270,7 +270,7 @@ func newAstNode(n *VimNode, filename string) ast.Node {
270270
return &ast.Throw{
271271
Throw: pos,
272272
ExArg: newExArg(*n.ea, filename),
273-
Expr: newAstNode(n.left, filename),
273+
Expr: newExprNode(n.left, filename),
274274
}
275275

276276
case NODE_ECHO, NODE_ECHON, NODE_ECHOMSG, NODE_ECHOERR:
@@ -298,9 +298,9 @@ func newAstNode(n *VimNode, filename string) ast.Node {
298298
case NODE_TERNARY:
299299
return &ast.TernaryExpr{
300300
Ternary: pos,
301-
Condition: newAstNode(n.cond, filename),
302-
Left: newAstNode(n.left, filename),
303-
Right: newAstNode(n.right, filename),
301+
Condition: newExprNode(n.cond, filename),
302+
Left: newExprNode(n.left, filename),
303+
Right: newExprNode(n.right, filename),
304304
}
305305

306306
case NODE_OR, NODE_AND, NODE_EQUAL, NODE_EQUALCI, NODE_EQUALCS,
@@ -313,44 +313,44 @@ func newAstNode(n *VimNode, filename string) ast.Node {
313313
NODE_ISNOTCI, NODE_ISNOTCS, NODE_ADD, NODE_SUBTRACT, NODE_CONCAT,
314314
NODE_MULTIPLY, NODE_DIVIDE, NODE_REMAINDER:
315315
return &ast.BinaryExpr{
316-
Left: newAstNode(n.left, filename),
316+
Left: newExprNode(n.left, filename),
317317
OpPos: pos,
318318
Op: opToken(n.type_),
319-
Right: newAstNode(n.right, filename),
319+
Right: newExprNode(n.right, filename),
320320
}
321321

322322
case NODE_NOT, NODE_MINUS, NODE_PLUS:
323323
return &ast.UnaryExpr{
324324
OpPos: pos,
325325
Op: opToken(n.type_),
326-
X: newAstNode(n.left, filename),
326+
X: newExprNode(n.left, filename),
327327
}
328328

329329
case NODE_SUBSCRIPT:
330330
return &ast.SubscriptExpr{
331331
Lbrack: pos,
332-
Left: newAstNode(n.left, filename),
333-
Right: newAstNode(n.right, filename),
332+
Left: newExprNode(n.left, filename),
333+
Right: newExprNode(n.right, filename),
334334
}
335335

336336
case NODE_SLICE:
337337
return &ast.SliceExpr{
338338
Lbrack: pos,
339-
X: newAstNode(n.left, filename),
340-
Low: newAstNode(n.rlist[0], filename),
341-
High: newAstNode(n.rlist[1], filename),
339+
X: newExprNode(n.left, filename),
340+
Low: newExprNode(n.rlist[0], filename),
341+
High: newExprNode(n.rlist[1], filename),
342342
}
343343

344344
case NODE_CALL:
345345
return &ast.CallExpr{
346346
Lparen: pos,
347-
Fun: newAstNode(n.left, filename),
347+
Fun: newExprNode(n.left, filename),
348348
Args: newRlist(*n, filename),
349349
}
350350

351351
case NODE_DOT:
352352
return &ast.DotExpr{
353-
Left: newAstNode(n.left, filename),
353+
Left: newExprNode(n.left, filename),
354354
Dot: pos,
355355
Right: newAstNode(n.right, filename).(*ast.Ident),
356356
}
@@ -378,8 +378,8 @@ func newAstNode(n *VimNode, filename string) ast.Node {
378378
kvs := make([]ast.KeyValue, 0, len(entries))
379379
for _, nn := range entries {
380380
kv := nn.([]interface{})
381-
k := newAstNode(kv[0].(*VimNode), filename)
382-
v := newAstNode(kv[1].(*VimNode), filename)
381+
k := newExprNode(kv[0].(*VimNode), filename)
382+
v := newExprNode(kv[1].(*VimNode), filename)
383383
kvs = append(kvs, ast.KeyValue{Key: k, Value: v})
384384
}
385385
return &ast.Dict{
@@ -434,20 +434,25 @@ func newAstNode(n *VimNode, filename string) ast.Node {
434434
n := n.value.(*VimNode)
435435
return &ast.CurlyNameExpr{
436436
CurlyNameExpr: pos,
437-
Value: newAstNode(n, filename),
437+
Value: newExprNode(n, filename),
438438
}
439439

440440
case NODE_LAMBDA:
441441
return &ast.LambdaExpr{
442442
Lcurlybrace: pos,
443443
Params: newIdents(*n, filename),
444-
Expr: newAstNode(n.left, filename),
444+
Expr: newExprNode(n.left, filename),
445445
}
446446

447447
}
448448
panic(fmt.Errorf("Unknown node type: %v, node: %v", n.type_, n))
449449
}
450450

451+
func newExprNode(n *VimNode, filename string) ast.Expr {
452+
node, _ := newAstNode(n, filename).(ast.Expr)
453+
return node
454+
}
455+
451456
func newPos(p *pos, filename string) *ast.Pos {
452457
if p == nil {
453458
return nil
@@ -508,7 +513,7 @@ func newBody(n VimNode, filename string) []ast.Statement {
508513
}
509514
for _, node := range n.body {
510515
if node != nil { // conservative
511-
body = append(body, newAstNode(node, filename))
516+
body = append(body, newAstNode(node, filename).(ast.Statement))
512517
}
513518
}
514519
return body
@@ -534,7 +539,7 @@ func newRlist(n VimNode, filename string) []ast.Expr {
534539
}
535540
for _, node := range n.rlist {
536541
if node != nil { // conservative
537-
exprs = append(exprs, newAstNode(node, filename))
542+
exprs = append(exprs, newExprNode(node, filename))
538543
}
539544
}
540545
return exprs
@@ -547,7 +552,7 @@ func newList(n VimNode, filename string) []ast.Expr {
547552
}
548553
for _, node := range n.list {
549554
if node != nil { // conservative
550-
list = append(list, newAstNode(node, filename))
555+
list = append(list, newExprNode(node, filename))
551556
}
552557
}
553558
return list
@@ -557,7 +562,7 @@ func newValues(n VimNode, filename string) []ast.Expr {
557562
var values []ast.Expr
558563
for _, v := range n.value.([]interface{}) {
559564
n := v.(*VimNode)
560-
values = append(values, newAstNode(n, filename))
565+
values = append(values, newExprNode(n, filename))
561566
}
562567
return values
563568
}

0 commit comments

Comments
 (0)