iduoでは自由に演算子を定義できます。
演算子の実行関数は次のように定義します。
procedure Operation(aLeft, aRight: TVar; var aReturn: TVar);
aLeft, aRightは演算子の左右にある値を指します。
aReturnは演算結果です。
例:
// 乗算演算子の定義
procedure _power(aLeft, aRight: TVar; var aReturn: TVar);
var
b: int64;
i, p: integer;
begin
b := GetVarValue(aLeft, 0);
p := GetVarValue(aRight, 0);
for i :=0 to p-1 do b := b * b;
SetVar(aReturn, b);
end;
次にこの演算子をiduoに登録します。
iduoConstsユニットにある
Operatorsという演算子リストのEntryOperatorメソッドを呼び出して登録します。
procedure EntryOperator(Name: string; Proc: TOperationProc; Argtype: integer; Level: integer; otype: integer);
Name: 演算子の識別子(@や+など)
Proc: 実際に演算を実行する手続き
Argtype: 結合規則
-
AT_BOTH_LR: 左右の値を結合、左から右に演算
AT_BOTH_RL: 左右の値を結合、右から左に演算
AT_RIGHT_RL: 右の値を結合、右から左に演算
AT_LEFT_LR: 左の値を結合、左から右に演算
Level: 演算順序。若いほど優先されます。0が最優先でOPERATOR_LEVEL_MAXが一番最後に演算されます。
otype: 演算子のタイプ
-
OT_Normal: 演算後、結合する。
OT_Subst: 演算後、左の変数に代入し、結合する。
OT_Inc: インクリメント・デクリメント演算子。(※Argtype、Levelは無視される。)
例:
// 演算子を登録する
Operators.EntryOperator('pow', _power, AT_BOTH_LR, 0);
※iduoMountユニットに主要な演算子が定義されているので、参考にしてみてください。