mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-01 21:30:35 +02:00
fcl-passrc: resolver: fixed include(FuncResultSet,enum)
git-svn-id: trunk@39926 -
This commit is contained in:
parent
c9c8ff1eef
commit
903854ad82
@ -12157,7 +12157,8 @@ begin
|
||||
EnumType:=nil;
|
||||
if ([rrfReadable,rrfWritable]*ParamResolved.Flags=[rrfReadable,rrfWritable])
|
||||
and ((ParamResolved.IdentEl is TPasVariable)
|
||||
or (ParamResolved.IdentEl is TPasArgument)) then
|
||||
or (ParamResolved.IdentEl is TPasArgument)
|
||||
or (ParamResolved.IdentEl is TPasResultElement)) then
|
||||
begin
|
||||
if (ParamResolved.BaseType=btSet)
|
||||
and (ParamResolved.LoTypeEl is TPasEnumType) then
|
||||
|
@ -254,7 +254,7 @@ type
|
||||
Procedure TestCharAssignStringFail;
|
||||
Procedure TestChar_ForIn;
|
||||
|
||||
// enums
|
||||
// enums and sets
|
||||
Procedure TestEnums;
|
||||
Procedure TestEnumRangeFail;
|
||||
Procedure TestSets;
|
||||
@ -3568,9 +3568,12 @@ begin
|
||||
Add('function {#A1}FuncA: TFlags;');
|
||||
Add('begin');
|
||||
Add(' Result:=[red];');
|
||||
Add(' Include(Result,green);');
|
||||
Add(' Exclude(Result,blue);');
|
||||
Add('end;');
|
||||
Add('function {#A2}FuncA(f: TFlags): TFlags;');
|
||||
Add('begin');
|
||||
Add(' Include(f,green);');
|
||||
Add(' Result:=f;');
|
||||
Add('end;');
|
||||
Add('var');
|
||||
|
@ -4503,22 +4503,25 @@ end;
|
||||
procedure TTestModule.TestSet_AsParams;
|
||||
begin
|
||||
StartProgram(false);
|
||||
Add('type TEnum = (Red,Blue);');
|
||||
Add('type TEnums = set of TEnum;');
|
||||
Add('procedure DoIt(vG: TEnums; const vH: TEnums; var vI: TEnums);');
|
||||
Add('var vJ: TEnums;');
|
||||
Add('begin');
|
||||
Add(' vg:=vg;');
|
||||
Add(' vj:=vh;');
|
||||
Add(' vi:=vi;');
|
||||
Add(' doit(vg,vg,vg);');
|
||||
Add(' doit(vh,vh,vj);');
|
||||
Add(' doit(vi,vi,vi);');
|
||||
Add(' doit(vj,vj,vj);');
|
||||
Add('end;');
|
||||
Add('var i: TEnums;');
|
||||
Add('begin');
|
||||
Add(' doit(i,i,i);');
|
||||
Add([
|
||||
'type TEnum = (Red,Blue);',
|
||||
'type TEnums = set of TEnum;',
|
||||
'function DoIt(vG: TEnums; const vH: TEnums; var vI: TEnums): TEnums;',
|
||||
'var vJ: TEnums;',
|
||||
'begin',
|
||||
' Include(vg,red);',
|
||||
' Include(result,blue);',
|
||||
' vg:=vg;',
|
||||
' vj:=vh;',
|
||||
' vi:=vi;',
|
||||
' doit(vg,vg,vg);',
|
||||
' doit(vh,vh,vj);',
|
||||
' doit(vi,vi,vi);',
|
||||
' doit(vj,vj,vj);',
|
||||
'end;',
|
||||
'var i: TEnums;',
|
||||
'begin',
|
||||
' doit(i,i,i);']);
|
||||
ConvertProgram;
|
||||
CheckSource('TestSet_AsParams',
|
||||
LinesToStr([ // statements
|
||||
@ -4529,7 +4532,10 @@ begin
|
||||
' Blue: 1',
|
||||
'};',
|
||||
'this.DoIt = function (vG,vH,vI) {',
|
||||
' var Result = {};',
|
||||
' var vJ = {};',
|
||||
' vG = rtl.includeSet(vG, $mod.TEnum.Red);',
|
||||
' Result = rtl.includeSet(Result, $mod.TEnum.Blue);',
|
||||
' vG = rtl.refSet(vG);',
|
||||
' vJ = rtl.refSet(vH);',
|
||||
' vI.set(rtl.refSet(vI.get()));',
|
||||
@ -4558,6 +4564,7 @@ begin
|
||||
' vJ = v;',
|
||||
' }',
|
||||
' });',
|
||||
' return Result;',
|
||||
'};',
|
||||
'this.i = {};'
|
||||
]),
|
||||
|
Loading…
Reference in New Issue
Block a user