MCPcopy
hub / github.com/expr-lang/expr / BinaryNode

Method BinaryNode

compiler/compiler.go:447–625  ·  view source on GitHub ↗
(node *ast.BinaryNode)

Source from the content-addressed store, hash-verified

445}
446
447func (c *compiler) BinaryNode(node *ast.BinaryNode) {
448 switch node.Operator {
449 case "==":
450 c.equalBinaryNode(node)
451
452 case "!=":
453 c.equalBinaryNode(node)
454 c.emit(OpNot)
455
456 case "or", "||":
457 if c.config != nil && !c.config.ShortCircuit {
458 c.compile(node.Left)
459 c.derefInNeeded(node.Left)
460 c.compile(node.Right)
461 c.derefInNeeded(node.Right)
462 c.emit(OpOr)
463 break
464 }
465 c.compile(node.Left)
466 c.derefInNeeded(node.Left)
467 end := c.emit(OpJumpIfTrue, placeholder)
468 c.emit(OpPop)
469 c.compile(node.Right)
470 c.derefInNeeded(node.Right)
471 c.patchJump(end)
472
473 case "and", "&&":
474 if c.config != nil && !c.config.ShortCircuit {
475 c.compile(node.Left)
476 c.derefInNeeded(node.Left)
477 c.compile(node.Right)
478 c.derefInNeeded(node.Right)
479 c.emit(OpAnd)
480 break
481 }
482 c.compile(node.Left)
483 c.derefInNeeded(node.Left)
484 end := c.emit(OpJumpIfFalse, placeholder)
485 c.emit(OpPop)
486 c.compile(node.Right)
487 c.derefInNeeded(node.Right)
488 c.patchJump(end)
489
490 case "<":
491 c.compile(node.Left)
492 c.derefInNeeded(node.Left)
493 c.compile(node.Right)
494 c.derefInNeeded(node.Right)
495 c.emit(OpLess)
496
497 case ">":
498 c.compile(node.Left)
499 c.derefInNeeded(node.Left)
500 c.compile(node.Right)
501 c.derefInNeeded(node.Right)
502 c.emit(OpMore)
503
504 case "<=":

Callers 1

compileMethod · 0.95

Calls 7

equalBinaryNodeMethod · 0.95
emitMethod · 0.95
compileMethod · 0.95
derefInNeededMethod · 0.95
patchJumpMethod · 0.95
addConstantMethod · 0.95
SprintfMethod · 0.80

Tested by

no test coverage detected