(node ast.Node)
| 214 | } |
| 215 | |
| 216 | func (c *compiler) compile(node ast.Node) { |
| 217 | c.nodes = append(c.nodes, node) |
| 218 | defer func() { |
| 219 | c.nodes = c.nodes[:len(c.nodes)-1] |
| 220 | }() |
| 221 | |
| 222 | if c.config != nil && c.config.Profile { |
| 223 | span := &Span{ |
| 224 | Name: reflect.TypeOf(node).String(), |
| 225 | Expression: node.String(), |
| 226 | } |
| 227 | if len(c.spans) > 0 { |
| 228 | prev := c.spans[len(c.spans)-1] |
| 229 | prev.Children = append(prev.Children, span) |
| 230 | } |
| 231 | c.spans = append(c.spans, span) |
| 232 | defer func() { |
| 233 | if len(c.spans) > 1 { |
| 234 | c.spans = c.spans[:len(c.spans)-1] |
| 235 | } |
| 236 | }() |
| 237 | |
| 238 | c.emit(OpProfileStart, c.addConstant(span)) |
| 239 | defer func() { |
| 240 | c.emit(OpProfileEnd, c.addConstant(span)) |
| 241 | }() |
| 242 | } |
| 243 | |
| 244 | switch n := node.(type) { |
| 245 | case *ast.NilNode: |
| 246 | c.NilNode(n) |
| 247 | case *ast.IdentifierNode: |
| 248 | c.IdentifierNode(n) |
| 249 | case *ast.IntegerNode: |
| 250 | c.IntegerNode(n) |
| 251 | case *ast.FloatNode: |
| 252 | c.FloatNode(n) |
| 253 | case *ast.BoolNode: |
| 254 | c.BoolNode(n) |
| 255 | case *ast.StringNode: |
| 256 | c.StringNode(n) |
| 257 | case *ast.BytesNode: |
| 258 | c.BytesNode(n) |
| 259 | case *ast.ConstantNode: |
| 260 | c.ConstantNode(n) |
| 261 | case *ast.UnaryNode: |
| 262 | c.UnaryNode(n) |
| 263 | case *ast.BinaryNode: |
| 264 | c.BinaryNode(n) |
| 265 | case *ast.ChainNode: |
| 266 | c.ChainNode(n) |
| 267 | case *ast.MemberNode: |
| 268 | c.MemberNode(n) |
| 269 | case *ast.SliceNode: |
| 270 | c.SliceNode(n) |
| 271 | case *ast.CallNode: |
| 272 | c.CallNode(n) |
| 273 | case *ast.BuiltinNode: |
no test coverage detected