|
@@ -37,6 +37,8 @@ interface
|
|
nod : tnodetype;
|
|
nod : tnodetype;
|
|
inr : tinlinenumber;
|
|
inr : tinlinenumber;
|
|
op_overloading_supported : boolean;
|
|
op_overloading_supported : boolean;
|
|
|
|
+ minargs : longint;
|
|
|
|
+ maxargs : longint;
|
|
end;
|
|
end;
|
|
|
|
|
|
Ttok2opRec=record
|
|
Ttok2opRec=record
|
|
@@ -111,33 +113,33 @@ interface
|
|
const
|
|
const
|
|
tok2nodes=27;
|
|
tok2nodes=27;
|
|
tok2node:array[1..tok2nodes] of ttok2noderec=(
|
|
tok2node:array[1..tok2nodes] of ttok2noderec=(
|
|
- (tok:_PLUS ;nod:addn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_MINUS ;nod:subn;inr:in_none;op_overloading_supported:true), { binary and unary overloading supported }
|
|
|
|
- (tok:_STAR ;nod:muln;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_SLASH ;nod:slashn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_EQ ;nod:equaln;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_GT ;nod:gtn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_LT ;nod:ltn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_GTE ;nod:gten;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_LTE ;nod:lten;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_SYMDIF ;nod:symdifn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_STARSTAR ;nod:starstarn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_AS ;nod:asn;inr:in_none;op_overloading_supported:false), { binary overloading NOT supported }
|
|
|
|
- (tok:_OP_IN ;nod:inn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_IS ;nod:isn;inr:in_none;op_overloading_supported:false), { binary overloading NOT supported }
|
|
|
|
- (tok:_OP_OR ;nod:orn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_AND ;nod:andn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_DIV ;nod:divn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_NOT ;nod:notn;inr:in_none;op_overloading_supported:true), { unary overloading supported }
|
|
|
|
- (tok:_OP_MOD ;nod:modn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_SHL ;nod:shln;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_SHR ;nod:shrn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_XOR ;nod:xorn;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_ASSIGNMENT ;nod:assignn;inr:in_none;op_overloading_supported:true), { unary overloading supported }
|
|
|
|
- (tok:_OP_EXPLICIT;nod:assignn;inr:in_none;op_overloading_supported:true), { unary overloading supported }
|
|
|
|
- (tok:_NE ;nod:unequaln;inr:in_none;op_overloading_supported:true), { binary overloading supported }
|
|
|
|
- (tok:_OP_INC ;nod:inlinen;inr:in_inc_x;op_overloading_supported:true), { unary overloading supported }
|
|
|
|
- (tok:_OP_DEC ;nod:inlinen;inr:in_dec_x;op_overloading_supported:true) { unary overloading supported }
|
|
|
|
|
|
+ (tok:_PLUS ;nod:addn;inr:in_none;op_overloading_supported:true;minargs:1;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_MINUS ;nod:subn;inr:in_none;op_overloading_supported:true;minargs:1;maxargs:2), { binary and unary overloading supported }
|
|
|
|
+ (tok:_STAR ;nod:muln;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_SLASH ;nod:slashn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_EQ ;nod:equaln;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_GT ;nod:gtn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_LT ;nod:ltn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_GTE ;nod:gten;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_LTE ;nod:lten;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_SYMDIF ;nod:symdifn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_STARSTAR ;nod:starstarn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_AS ;nod:asn;inr:in_none;op_overloading_supported:false;minargs:0;maxargs:0), { binary overloading NOT supported }
|
|
|
|
+ (tok:_OP_IN ;nod:inn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_IS ;nod:isn;inr:in_none;op_overloading_supported:false;minargs:0;maxargs:0), { binary overloading NOT supported }
|
|
|
|
+ (tok:_OP_OR ;nod:orn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_AND ;nod:andn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_DIV ;nod:divn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_NOT ;nod:notn;inr:in_none;op_overloading_supported:true;minargs:1;maxargs:1), { unary overloading supported }
|
|
|
|
+ (tok:_OP_MOD ;nod:modn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_SHL ;nod:shln;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_SHR ;nod:shrn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_XOR ;nod:xorn;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_ASSIGNMENT ;nod:assignn;inr:in_none;op_overloading_supported:true;minargs:1;maxargs:1), { unary overloading supported }
|
|
|
|
+ (tok:_OP_EXPLICIT;nod:assignn;inr:in_none;op_overloading_supported:true;minargs:1;maxargs:1), { unary overloading supported }
|
|
|
|
+ (tok:_NE ;nod:unequaln;inr:in_none;op_overloading_supported:true;minargs:2;maxargs:2), { binary overloading supported }
|
|
|
|
+ (tok:_OP_INC ;nod:inlinen;inr:in_inc_x;op_overloading_supported:true;minargs:1;maxargs:1), { unary overloading supported }
|
|
|
|
+ (tok:_OP_DEC ;nod:inlinen;inr:in_dec_x;op_overloading_supported:true;minargs:1;maxargs:1) { unary overloading supported }
|
|
);
|
|
);
|
|
|
|
|
|
tok2ops=4;
|
|
tok2ops=4;
|
|
@@ -625,7 +627,11 @@ implementation
|
|
while count > 0 do
|
|
while count > 0 do
|
|
begin
|
|
begin
|
|
parasym:=tparavarsym(pf.parast.SymList[count-1]);
|
|
parasym:=tparavarsym(pf.parast.SymList[count-1]);
|
|
- if is_boolean(parasym.vardef) then
|
|
|
|
|
|
+ if parasym.typ<>paravarsym then
|
|
|
|
+ begin
|
|
|
|
+ dec(count);
|
|
|
|
+ end
|
|
|
|
+ else if is_boolean(parasym.vardef) then
|
|
begin
|
|
begin
|
|
if parasym.name='RANGECHECK' then
|
|
if parasym.name='RANGECHECK' then
|
|
begin
|
|
begin
|
|
@@ -697,6 +703,8 @@ implementation
|
|
begin
|
|
begin
|
|
result:=
|
|
result:=
|
|
tok2node[i].op_overloading_supported and
|
|
tok2node[i].op_overloading_supported and
|
|
|
|
+ (tok2node[i].minargs<=1) and
|
|
|
|
+ (tok2node[i].maxargs>=1) and
|
|
isunaryoperatoroverloadable(tok2node[i].nod,tok2node[i].inr,ld);
|
|
isunaryoperatoroverloadable(tok2node[i].nod,tok2node[i].inr,ld);
|
|
break;
|
|
break;
|
|
end;
|
|
end;
|
|
@@ -713,6 +721,8 @@ implementation
|
|
rd:=tparavarsym(pf.parast.SymList[1]).vardef;
|
|
rd:=tparavarsym(pf.parast.SymList[1]).vardef;
|
|
result:=
|
|
result:=
|
|
tok2node[i].op_overloading_supported and
|
|
tok2node[i].op_overloading_supported and
|
|
|
|
+ (tok2node[i].minargs<=2) and
|
|
|
|
+ (tok2node[i].maxargs>=2) and
|
|
isbinaryoperatoroverloadable(tok2node[i].nod,ld,nothingn,rd,nothingn);
|
|
isbinaryoperatoroverloadable(tok2node[i].nod,ld,nothingn,rd,nothingn);
|
|
break;
|
|
break;
|
|
end;
|
|
end;
|