From 903854ad8228697c46ac3c18fa7a76800d63152b Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Sat, 13 Oct 2018 20:40:23 +0000 Subject: [PATCH] fcl-passrc: resolver: fixed include(FuncResultSet,enum) git-svn-id: trunk@39926 - --- packages/fcl-passrc/src/pasresolver.pp | 3 +- packages/fcl-passrc/tests/tcresolver.pas | 5 ++- packages/pastojs/tests/tcmodules.pas | 39 ++++++++++++++---------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index c4251ddff8..1c8b4e2c46 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -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 diff --git a/packages/fcl-passrc/tests/tcresolver.pas b/packages/fcl-passrc/tests/tcresolver.pas index 8bfb22cb03..d7e3591bd8 100644 --- a/packages/fcl-passrc/tests/tcresolver.pas +++ b/packages/fcl-passrc/tests/tcresolver.pas @@ -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'); diff --git a/packages/pastojs/tests/tcmodules.pas b/packages/pastojs/tests/tcmodules.pas index 3aee0056da..fe6fded5b3 100644 --- a/packages/pastojs/tests/tcmodules.pas +++ b/packages/pastojs/tests/tcmodules.pas @@ -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 = {};' ]),