in internal/compile/compile.go [1600:1645]
func (fcomp *fcomp) binop(pos syntax.Position, op syntax.Token) {
// TODO(adonovan): simplify by assuming syntax and compiler constants align.
fcomp.setPos(pos)
switch op {
// arithmetic
case syntax.PLUS:
fcomp.emit(PLUS)
case syntax.MINUS:
fcomp.emit(MINUS)
case syntax.STAR:
fcomp.emit(STAR)
case syntax.SLASH:
fcomp.emit(SLASH)
case syntax.SLASHSLASH:
fcomp.emit(SLASHSLASH)
case syntax.PERCENT:
fcomp.emit(PERCENT)
case syntax.AMP:
fcomp.emit(AMP)
case syntax.PIPE:
fcomp.emit(PIPE)
case syntax.CIRCUMFLEX:
fcomp.emit(CIRCUMFLEX)
case syntax.LTLT:
fcomp.emit(LTLT)
case syntax.GTGT:
fcomp.emit(GTGT)
case syntax.IN:
fcomp.emit(IN)
case syntax.NOT_IN:
fcomp.emit(IN)
fcomp.emit(NOT)
// comparisons
case syntax.EQL,
syntax.NEQ,
syntax.GT,
syntax.LT,
syntax.LE,
syntax.GE:
fcomp.emit(Opcode(op-syntax.EQL) + EQL)
default:
log.Panicf("%s: unexpected binary op: %s", pos, op)
}
}