bind expression (:=) instead of let
This commit is contained in:
77
ast/ast.go
77
ast/ast.go
@@ -47,31 +47,6 @@ func (p *Program) String() string {
|
||||
return out.String()
|
||||
}
|
||||
|
||||
// Statements
|
||||
type LetStatement struct {
|
||||
Token token.Token // the token.LET token
|
||||
Name *Identifier
|
||||
Value Expression
|
||||
}
|
||||
|
||||
func (ls *LetStatement) statementNode() {}
|
||||
func (ls *LetStatement) TokenLiteral() string { return ls.Token.Literal }
|
||||
func (ls *LetStatement) String() string {
|
||||
var out bytes.Buffer
|
||||
|
||||
out.WriteString(ls.TokenLiteral() + " ")
|
||||
out.WriteString(ls.Name.String())
|
||||
out.WriteString(" = ")
|
||||
|
||||
if ls.Value != nil {
|
||||
out.WriteString(ls.Value.String())
|
||||
}
|
||||
|
||||
out.WriteString(";")
|
||||
|
||||
return out.String()
|
||||
}
|
||||
|
||||
type ReturnStatement struct {
|
||||
Token token.Token // the 'return' token
|
||||
ReturnValue Expression
|
||||
@@ -284,23 +259,23 @@ type StringLiteral struct {
|
||||
Value string
|
||||
}
|
||||
|
||||
func (sl StringLiteral) TokenLiteral() string {
|
||||
func (sl *StringLiteral) TokenLiteral() string {
|
||||
return sl.Token.Literal
|
||||
}
|
||||
func (sl StringLiteral) String() string {
|
||||
func (sl *StringLiteral) String() string {
|
||||
return sl.Token.Literal
|
||||
}
|
||||
func (sl StringLiteral) expressionNode() {}
|
||||
func (sl *StringLiteral) expressionNode() {}
|
||||
|
||||
type ArrayLiteral struct {
|
||||
Token token.Token // the '[' token
|
||||
Elements []Expression
|
||||
}
|
||||
|
||||
func (al ArrayLiteral) TokenLiteral() string {
|
||||
func (al *ArrayLiteral) TokenLiteral() string {
|
||||
return al.Token.Literal
|
||||
}
|
||||
func (al ArrayLiteral) String() string {
|
||||
func (al *ArrayLiteral) String() string {
|
||||
var out bytes.Buffer
|
||||
|
||||
elements := []string{}
|
||||
@@ -314,7 +289,7 @@ func (al ArrayLiteral) String() string {
|
||||
|
||||
return out.String()
|
||||
}
|
||||
func (al ArrayLiteral) expressionNode() {}
|
||||
func (al *ArrayLiteral) expressionNode() {}
|
||||
|
||||
type IndexExpression struct {
|
||||
Token token.Token // The [ token
|
||||
@@ -322,11 +297,11 @@ type IndexExpression struct {
|
||||
Index Expression
|
||||
}
|
||||
|
||||
func (ie IndexExpression) TokenLiteral() string {
|
||||
func (ie *IndexExpression) TokenLiteral() string {
|
||||
return ie.Token.Literal
|
||||
}
|
||||
|
||||
func (ie IndexExpression) String() string {
|
||||
func (ie *IndexExpression) String() string {
|
||||
var out bytes.Buffer
|
||||
|
||||
out.WriteString("(")
|
||||
@@ -338,18 +313,18 @@ func (ie IndexExpression) String() string {
|
||||
return out.String()
|
||||
}
|
||||
|
||||
func (ie IndexExpression) expressionNode() {}
|
||||
func (ie *IndexExpression) expressionNode() {}
|
||||
|
||||
type HashLiteral struct {
|
||||
Token token.Token // the '{' token
|
||||
Pairs map[Expression]Expression
|
||||
}
|
||||
|
||||
func (hl HashLiteral) TokenLiteral() string {
|
||||
func (hl *HashLiteral) TokenLiteral() string {
|
||||
return hl.Token.Literal
|
||||
}
|
||||
|
||||
func (hl HashLiteral) String() string {
|
||||
func (hl *HashLiteral) String() string {
|
||||
var out bytes.Buffer
|
||||
|
||||
pairs := []string{}
|
||||
@@ -364,7 +339,7 @@ func (hl HashLiteral) String() string {
|
||||
return out.String()
|
||||
}
|
||||
|
||||
func (hl HashLiteral) expressionNode() {}
|
||||
func (hl *HashLiteral) expressionNode() {}
|
||||
|
||||
type WhileExpression struct {
|
||||
Token token.Token // The 'while' token
|
||||
@@ -389,6 +364,28 @@ func (we *WhileExpression) String() string {
|
||||
return out.String()
|
||||
}
|
||||
|
||||
// BindExpression represents an assignment expression of the form:
|
||||
// x := 1
|
||||
type BindExpression struct {
|
||||
Token token.Token // the := token
|
||||
Left Expression
|
||||
Value Expression
|
||||
}
|
||||
|
||||
func (be *BindExpression) TokenLiteral() string {
|
||||
return be.Token.Literal
|
||||
}
|
||||
func (be *BindExpression) String() string {
|
||||
var out bytes.Buffer
|
||||
|
||||
out.WriteString(be.Left.String())
|
||||
out.WriteString(be.TokenLiteral())
|
||||
out.WriteString(be.Value.String())
|
||||
|
||||
return out.String()
|
||||
}
|
||||
func (be *BindExpression) expressionNode() {}
|
||||
|
||||
// AssignmentExpression represents an assignment expression of the form:
|
||||
// x = 1 or xs[1] = 2
|
||||
type AssignmentExpression struct {
|
||||
@@ -397,10 +394,10 @@ type AssignmentExpression struct {
|
||||
Value Expression
|
||||
}
|
||||
|
||||
func (as AssignmentExpression) TokenLiteral() string {
|
||||
func (as *AssignmentExpression) TokenLiteral() string {
|
||||
return as.Token.Literal
|
||||
}
|
||||
func (as AssignmentExpression) String() string {
|
||||
func (as *AssignmentExpression) String() string {
|
||||
var out bytes.Buffer
|
||||
|
||||
out.WriteString(as.Left.String())
|
||||
@@ -409,7 +406,7 @@ func (as AssignmentExpression) String() string {
|
||||
|
||||
return out.String()
|
||||
}
|
||||
func (as AssignmentExpression) expressionNode() {}
|
||||
func (as *AssignmentExpression) expressionNode() {}
|
||||
|
||||
// Comment a comment
|
||||
type Comment struct {
|
||||
|
||||
Reference in New Issue
Block a user