@@ -3577,7 +3577,7 @@ pub const Interpreter = struct {
35773577 .int = > | l | try out .setInt (l + rhs .int ),
35783578 .f32 = > | l | out .setF32 (l + rhs .f32 ),
35793579 .f64 = > | l | out .setF64 (l + rhs .f64 ),
3580- .dec = > | l | out .setDec (RocDec { . num = l . num + rhs .dec . num } ),
3580+ .dec = > | l | out .setDec (RocDec . add ( l , rhs .dec , roc_ops ) ),
35813581 }
35823582 out .is_initialized = true ;
35833583 return out ;
@@ -3595,7 +3595,7 @@ pub const Interpreter = struct {
35953595 .int = > | l | try out .setInt (l - rhs .int ),
35963596 .f32 = > | l | out .setF32 (l - rhs .f32 ),
35973597 .f64 = > | l | out .setF64 (l - rhs .f64 ),
3598- .dec = > | l | out .setDec (RocDec { . num = l . num - rhs .dec . num } ),
3598+ .dec = > | l | out .setDec (RocDec . sub ( l , rhs .dec , roc_ops ) ),
35993599 }
36003600 out .is_initialized = true ;
36013601 return out ;
@@ -3613,7 +3613,7 @@ pub const Interpreter = struct {
36133613 .int = > | l | try out .setInt (l * rhs .int ),
36143614 .f32 = > | l | out .setF32 (l * rhs .f32 ),
36153615 .f64 = > | l | out .setF64 (l * rhs .f64 ),
3616- .dec = > | l | out .setDec (RocDec { . num = @divTrunc ( l . num * rhs .dec . num , RocDec . one_point_zero_i128 ) } ),
3616+ .dec = > | l | out .setDec (RocDec . mul ( l , rhs .dec , roc_ops ) ),
36173617 }
36183618 out .is_initialized = true ;
36193619 return out ;
@@ -3642,8 +3642,7 @@ pub const Interpreter = struct {
36423642 },
36433643 .dec = > | l | {
36443644 if (rhs .dec .num == 0 ) return error .DivisionByZero ;
3645- const scaled_lhs = l .num * RocDec .one_point_zero_i128 ;
3646- out .setDec (RocDec { .num = @divTrunc (scaled_lhs , rhs .dec .num ) });
3645+ out .setDec (RocDec .div (l , rhs .dec , roc_ops ));
36473646 },
36483647 }
36493648 out .is_initialized = true ;
@@ -3672,9 +3671,9 @@ pub const Interpreter = struct {
36723671 out .setF64 (@trunc (l / rhs .f64 ));
36733672 },
36743673 .dec = > | l | {
3674+ // For Dec, div and div_trunc are the same since it's already integer-like
36753675 if (rhs .dec .num == 0 ) return error .DivisionByZero ;
3676- const scaled_lhs = l .num * RocDec .one_point_zero_i128 ;
3677- out .setDec (RocDec { .num = @divTrunc (scaled_lhs , rhs .dec .num ) });
3676+ out .setDec (RocDec .div (l , rhs .dec , roc_ops ));
36783677 },
36793678 }
36803679 out .is_initialized = true ;
@@ -3704,7 +3703,7 @@ pub const Interpreter = struct {
37043703 },
37053704 .dec = > | l | {
37063705 if (rhs .dec .num == 0 ) return error .DivisionByZero ;
3707- out .setDec (RocDec { . num = @ rem (l . num , rhs .dec . num ) } );
3706+ out .setDec (RocDec . rem (l , rhs .dec , roc_ops ) );
37083707 },
37093708 }
37103709 out .is_initialized = true ;
@@ -4717,22 +4716,22 @@ pub const Interpreter = struct {
47174716 result_layout : Layout ,
47184717 lhs : StackValue ,
47194718 rhs : StackValue ,
4719+ roc_ops : * RocOps ,
47204720 ) ! StackValue {
47214721 const lhs_dec = try self .stackValueToDecimal (lhs );
47224722 const rhs_dec = try self .stackValueToDecimal (rhs );
47234723
47244724 const result_dec : RocDec = switch (op ) {
4725- .add = > RocDec { . num = lhs_dec . num + rhs_dec . num } ,
4726- .sub = > RocDec { . num = lhs_dec . num - rhs_dec . num } ,
4727- .mul = > RocDec { . num = @divTrunc (lhs_dec . num * rhs_dec . num , RocDec . one_point_zero_i128 ) } ,
4725+ .add = > RocDec . add ( lhs_dec , rhs_dec , roc_ops ) ,
4726+ .sub = > RocDec . sub ( lhs_dec , rhs_dec , roc_ops ) ,
4727+ .mul = > RocDec . mul (lhs_dec , rhs_dec , roc_ops ) ,
47284728 .div , .div_trunc = > blk : {
47294729 if (rhs_dec .num == 0 ) return error .DivisionByZero ;
4730- const scaled_lhs = lhs_dec .num * RocDec .one_point_zero_i128 ;
4731- break :blk RocDec { .num = @divTrunc (scaled_lhs , rhs_dec .num ) };
4730+ break :blk RocDec .div (lhs_dec , rhs_dec , roc_ops );
47324731 },
47334732 .rem = > blk : {
47344733 if (rhs_dec .num == 0 ) return error .DivisionByZero ;
4735- break :blk RocDec { . num = @ rem (lhs_dec . num , rhs_dec . num ) } ;
4734+ break :blk RocDec . rem (lhs_dec , rhs_dec , roc_ops ) ;
47364735 },
47374736 else = > @panic ("evalDecBinop: unhandled decimal operation" ),
47384737 };
0 commit comments