int OP double を double で演算するパッチ

HSP では int OP double が int で演算され、 たとえば 100 * 0.9 で 0 が返ってきたりするのが HSP の不満ポイントの一つなんですが。
int OP double を double で演算するパッチを作ってみました。

Index: hsp3code.cpp
===================================================================
--- hsp3code.cpp	(リビジョン 99)
+++ hsp3code.cpp	(作業コピー)
@@ -258,6 +258,15 @@
 		}
 	}
 
+	// int OP double は double で演算する 
+	double dval;
+	ptr = STM_GETPTR(stm1);
+	if ( tflag == HSPVAR_FLAG_INT && stm2->type == HSPVAR_FLAG_DOUBLE ) {
+		tflag = HSPVAR_FLAG_DOUBLE;
+		dval = (double)*(int *)ptr;
+		ptr = (char *)&dval;
+	}
+	
 	mpval = HspVarCoreGetPVal( tflag );
 	varproc = HspVarCoreGetProc( tflag );
 
@@ -268,7 +277,7 @@
 		HspVarCoreClearTemp( mpval, tflag );					// 最小サイズのメモリを確保
 	}
 
-	varproc->Set( mpval, (PDAT *)mpval->pt, STM_GETPTR(stm1) );	// テンポラリ変数に初期値を設定
+	varproc->Set( mpval, (PDAT *)mpval->pt, ptr );	// テンポラリ変数に初期値を設定
 
 	ptr = STM_GETPTR(stm2);
 	if ( tflag != stm2->type ) {								// 型が一致しない場合は変換

サンプル

#define test(%1) mes "(%1 ) = " + (%1)

test 1 + 1
test 1.0 + 1
test 1 + 1.0

test 1 == 1.0
test 1.0 == 1

test 1.2 == 1
test 1 == 1.2

test 1.2 <= 1
test 1 >= 1.2

test 100 * 0.9
従来の結果
( 1 + 1 ) = 2
( 1.0 + 1 ) = 2.000000
( 1 + 1.0 ) = 2
( 1 == 1.0 ) = 1
( 1.0 == 1 ) = 1
( 1.2 == 1 ) = 0
( 1 == 1.2 ) = 1
( 1.2 <= 1 ) = 0
( 1 >= 1.2 ) = 1
( 100 * 0.9 ) = 0
このパッチを当てて実行した結果
( 1 + 1 ) = 2
( 1.0 + 1 ) = 2.000000
( 1 + 1.0 ) = 2.000000
( 1 == 1.0 ) = 1
( 1.0 == 1 ) = 1
( 1.2 == 1 ) = 0
( 1 == 1.2 ) = 0
( 1.2 <= 1 ) = 0
( 1 >= 1.2 ) = 0
( 100 * 0.9 ) = 90.000000

追記

MLに送りましたが、互換性の問題で取り込みは出来ないそうですー。