Greater than and Less Than
This commit is contained in:
15
vm/vm.go
15
vm/vm.go
@@ -83,11 +83,14 @@ func (vm *VM) Run() error {
|
||||
|
||||
if vm.Debug {
|
||||
log.Printf(
|
||||
"%-20s %-20s\n",
|
||||
strings.Split(ins[ip:].String(), "\n")[0],
|
||||
"%-25s %-20s\n",
|
||||
fmt.Sprintf(
|
||||
"%04d %s", ip,
|
||||
strings.Split(ins[ip:].String(), "\n")[0][4:],
|
||||
),
|
||||
fmt.Sprintf(
|
||||
"[ip=%02d fp=%02d, sp=%02d]",
|
||||
ip, vm.sp, vm.framesIndex-1,
|
||||
ip, vm.framesIndex-1, vm.sp,
|
||||
),
|
||||
)
|
||||
}
|
||||
@@ -130,7 +133,7 @@ func (vm *VM) Run() error {
|
||||
return err
|
||||
}
|
||||
|
||||
case code.OpEqual, code.OpNotEqual, code.OpGreaterThan:
|
||||
case code.OpEqual, code.OpNotEqual, code.OpGreaterThan, code.OpGreaterThanEqual:
|
||||
err := vm.executeComparison(op)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -512,6 +515,8 @@ func (vm *VM) executeIntegerComparison(op code.Opcode, left, right object.Object
|
||||
return vm.push(nativeBoolToBooleanObject(rightValue != leftValue))
|
||||
case code.OpGreaterThan:
|
||||
return vm.push(nativeBoolToBooleanObject(leftValue > rightValue))
|
||||
case code.OpGreaterThanEqual:
|
||||
return vm.push(nativeBoolToBooleanObject(leftValue >= rightValue))
|
||||
default:
|
||||
return fmt.Errorf("unknown operator: %d", op)
|
||||
}
|
||||
@@ -628,6 +633,8 @@ func (vm *VM) executeStringComparison(op code.Opcode, left, right object.Object)
|
||||
return vm.push(nativeBoolToBooleanObject(rightValue != leftValue))
|
||||
case code.OpGreaterThan:
|
||||
return vm.push(nativeBoolToBooleanObject(leftValue > rightValue))
|
||||
case code.OpGreaterThanEqual:
|
||||
return vm.push(nativeBoolToBooleanObject(leftValue >= rightValue))
|
||||
default:
|
||||
return fmt.Errorf("unknown operator: %d", op)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user