3f55a6b5b0
Implement module imports
43 lines
860 B
Go
43 lines
860 B
Go
package ast
|
|
|
|
import "github.com/d5/tengo/compiler/source"
|
|
|
|
// ForStmt represents a for statement.
|
|
type ForStmt struct {
|
|
ForPos source.Pos
|
|
Init Stmt
|
|
Cond Expr
|
|
Post Stmt
|
|
Body *BlockStmt
|
|
}
|
|
|
|
func (s *ForStmt) stmtNode() {}
|
|
|
|
// Pos returns the position of first character belonging to the node.
|
|
func (s *ForStmt) Pos() source.Pos {
|
|
return s.ForPos
|
|
}
|
|
|
|
// End returns the position of first character immediately after the node.
|
|
func (s *ForStmt) End() source.Pos {
|
|
return s.Body.End()
|
|
}
|
|
|
|
func (s *ForStmt) String() string {
|
|
var init, cond, post string
|
|
if s.Init != nil {
|
|
init = s.Init.String()
|
|
}
|
|
if s.Cond != nil {
|
|
cond = s.Cond.String() + " "
|
|
}
|
|
if s.Post != nil {
|
|
post = s.Post.String()
|
|
}
|
|
|
|
if init != "" || post != "" {
|
|
return "for " + init + " ; " + cond + " ; " + post + s.Body.String()
|
|
}
|
|
|
|
return "for " + cond + s.Body.String()
|
|
}
|