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