()
| 128 | } |
| 129 | |
| 130 | func (self *_parser) parseTryStatement() ast.Statement { |
| 131 | |
| 132 | node := &ast.TryStatement{ |
| 133 | Try: self.expect(token.TRY), |
| 134 | Body: self.parseBlockStatement(), |
| 135 | } |
| 136 | |
| 137 | if self.token == token.CATCH { |
| 138 | catch := self.idx |
| 139 | self.next() |
| 140 | var parameter ast.BindingTarget |
| 141 | if self.token == token.LEFT_PARENTHESIS { |
| 142 | self.next() |
| 143 | parameter = self.parseBindingTarget() |
| 144 | self.expect(token.RIGHT_PARENTHESIS) |
| 145 | } |
| 146 | node.Catch = &ast.CatchStatement{ |
| 147 | Catch: catch, |
| 148 | Parameter: parameter, |
| 149 | Body: self.parseBlockStatement(), |
| 150 | } |
| 151 | } |
| 152 | |
| 153 | if self.token == token.FINALLY { |
| 154 | self.next() |
| 155 | node.Finally = self.parseBlockStatement() |
| 156 | } |
| 157 | |
| 158 | if node.Catch == nil && node.Finally == nil { |
| 159 | self.error(node.Try, "Missing catch or finally after try") |
| 160 | return &ast.BadStatement{From: node.Try, To: node.Body.Idx1()} |
| 161 | } |
| 162 | |
| 163 | return node |
| 164 | } |
| 165 | |
| 166 | func (self *_parser) parseFunctionParameterList() *ast.ParameterList { |
| 167 | opening := self.expect(token.LEFT_PARENTHESIS) |
no test coverage detected