fcl-passrc: fixed TAliasEnumType.Value

This commit is contained in:
mattias 2019-02-26 11:41:53 +00:00
parent deaa7c3af0
commit bb778bd45d
2 changed files with 26 additions and 20 deletions

View File

@ -9021,7 +9021,8 @@ begin
end
else if LTypeEl.ClassType=TPasEnumType then
begin
if LeftResolved.IdentEl is TPasEnumType then
if (LeftResolved.IdentEl is TPasType)
and (ResolveAliasType(TPasType(LeftResolved.IdentEl)).ClassType=TPasEnumType) then
begin
// e.g. TShiftState.ssAlt
DotScope:=PushEnumDotScope(TPasEnumType(LTypeEl));

View File

@ -3573,25 +3573,30 @@ end;
procedure TTestResolver.TestEnums;
begin
StartProgram(false);
Add('type {#TFlag}TFlag = ({#Red}Red, {#Green}Green, {#Blue}Blue);');
Add('var');
Add(' {#f}{=TFlag}f: TFlag;');
Add(' {#v}{=TFlag}v: TFlag = Green;');
Add(' {#i}i: longint;');
Add('begin');
Add(' {@f}f:={@Red}Red;');
Add(' {@f}f:={@v}v;');
Add(' if {@f}f={@Red}Red then ;');
Add(' if {@f}f={@v}v then ;');
Add(' if {@f}f>{@v}v then ;');
Add(' if {@f}f<{@v}v then ;');
Add(' if {@f}f>={@v}v then ;');
Add(' if {@f}f<={@v}v then ;');
Add(' if {@f}f<>{@v}v then ;');
Add(' if ord({@f}f)<>ord({@Red}Red) then ;');
Add(' {@f}f:={@TFlag}TFlag.{@Red}Red;');
Add(' {@f}f:={@TFlag}TFlag({@i}i);');
Add(' {@i}i:=longint({@f}f);');
Add([
'type',
' {#TFlag}TFlag = ({#Red}Red, {#Green}Green, {#Blue}Blue);',
' {#TAlias}TAlias = TFlag;',
'var',
' {#f}{=TFlag}f: TFlag;',
' {#v}{=TFlag}v: TFlag = Green;',
' {#i}i: longint;',
'begin',
' {@f}f:={@Red}Red;',
' {@f}f:={@v}v;',
' if {@f}f={@Red}Red then ;',
' if {@f}f={@v}v then ;',
' if {@f}f>{@v}v then ;',
' if {@f}f<{@v}v then ;',
' if {@f}f>={@v}v then ;',
' if {@f}f<={@v}v then ;',
' if {@f}f<>{@v}v then ;',
' if ord({@f}f)<>ord({@Red}Red) then ;',
' {@f}f:={@TFlag}TFlag.{@Red}Red;',
' {@f}f:={@TFlag}TFlag({@i}i);',
' {@i}i:=longint({@f}f);',
' {@f}f:={@TAlias}TAlias.{@Green}Green;',
'']);
ParseProgram;
end;