mirror of
https://github.com/robertkrimen/otto
synced 2025-10-05 19:19:10 +08:00
Added FunctionStatement
This commit is contained in:
parent
53221230c2
commit
3b2178bf55
|
@ -277,6 +277,10 @@ type (
|
|||
Body Statement
|
||||
}
|
||||
|
||||
FunctionStatement struct {
|
||||
Function *FunctionLiteral
|
||||
}
|
||||
|
||||
IfStatement struct {
|
||||
If file.Idx
|
||||
Test Expression
|
||||
|
@ -345,6 +349,7 @@ func (*EmptyStatement) _statementNode() {}
|
|||
func (*ExpressionStatement) _statementNode() {}
|
||||
func (*ForInStatement) _statementNode() {}
|
||||
func (*ForStatement) _statementNode() {}
|
||||
func (*FunctionStatement) _statementNode() {}
|
||||
func (*IfStatement) _statementNode() {}
|
||||
func (*LabelledStatement) _statementNode() {}
|
||||
func (*ReturnStatement) _statementNode() {}
|
||||
|
@ -430,6 +435,7 @@ func (self *EmptyStatement) Idx0() file.Idx { return self.Semicolon }
|
|||
func (self *ExpressionStatement) Idx0() file.Idx { return self.Expression.Idx0() }
|
||||
func (self *ForInStatement) Idx0() file.Idx { return self.For }
|
||||
func (self *ForStatement) Idx0() file.Idx { return self.For }
|
||||
func (self *FunctionStatement) Idx0() file.Idx { return self.Function.Idx0() }
|
||||
func (self *IfStatement) Idx0() file.Idx { return self.If }
|
||||
func (self *LabelledStatement) Idx0() file.Idx { return self.Label.Idx0() }
|
||||
func (self *Program) Idx0() file.Idx { return self.Body[0].Idx0() }
|
||||
|
@ -489,6 +495,7 @@ func (self *EmptyStatement) Idx1() file.Idx { return self.Semicolon + 1 }
|
|||
func (self *ExpressionStatement) Idx1() file.Idx { return self.Expression.Idx1() }
|
||||
func (self *ForInStatement) Idx1() file.Idx { return self.Body.Idx1() }
|
||||
func (self *ForStatement) Idx1() file.Idx { return self.Body.Idx1() }
|
||||
func (self *FunctionStatement) Idx1() file.Idx { return self.Function.Idx1() }
|
||||
func (self *IfStatement) Idx1() file.Idx {
|
||||
if self.Alternate != nil {
|
||||
return self.Alternate.Idx1()
|
||||
|
|
|
@ -271,6 +271,9 @@ func (cmpl *_compiler) parseStatement(in ast.Statement) _nodeStatement {
|
|||
}
|
||||
return out
|
||||
|
||||
case *ast.FunctionStatement:
|
||||
return emptyStatement
|
||||
|
||||
case *ast.IfStatement:
|
||||
return &_nodeIfStatement{
|
||||
test: cmpl.parseExpression(in.Test),
|
||||
|
|
|
@ -79,9 +79,7 @@ func (self *_parser) parseStatement() ast.Statement {
|
|||
case token.VAR:
|
||||
return self.parseVariableStatement()
|
||||
case token.FUNCTION:
|
||||
self.parseFunction(true)
|
||||
// FIXME
|
||||
return &ast.EmptyStatement{}
|
||||
return self.parseFunctionStatement()
|
||||
case token.SWITCH:
|
||||
return self.parseSwitchStatement()
|
||||
case token.RETURN:
|
||||
|
@ -231,6 +229,14 @@ func (self *_parser) parseParameterList() (list []string) {
|
|||
return
|
||||
}
|
||||
|
||||
func (self *_parser) parseFunctionStatement() *ast.FunctionStatement {
|
||||
function := &ast.FunctionStatement{
|
||||
Function: self.parseFunction(true),
|
||||
}
|
||||
|
||||
return function
|
||||
}
|
||||
|
||||
func (self *_parser) parseFunction(declaration bool) *ast.FunctionLiteral {
|
||||
|
||||
node := &ast.FunctionLiteral{
|
||||
|
|
Loading…
Reference in New Issue
Block a user