* in case of an enum without a type name (e.g., "type xx = set of (ea,eb)"),

set the external name of the underlying class type to the internal name
    instead of to an (invalid) empty string

git-svn-id: branches/jvmbackend@19555 -
This commit is contained in:
Jonas Maebe 2011-10-28 21:19:12 +00:00
parent 2d7e674168
commit cfca607b9b
3 changed files with 45 additions and 2 deletions

1
.gitattributes vendored
View File

@ -9804,6 +9804,7 @@ tests/test/jvm/trange2.pp svneol=native#text/plain
tests/test/jvm/trange3.pp svneol=native#text/plain
tests/test/jvm/tset1.pp svneol=native#text/plain
tests/test/jvm/tset3.pp svneol=native#text/plain
tests/test/jvm/tset7.pp svneol=native#text/plain
tests/test/jvm/tstr.pp svneol=native#text/plain
tests/test/jvm/tstring1.pp svneol=native#text/plain
tests/test/jvm/tstring9.pp svneol=native#text/plain

View File

@ -314,8 +314,11 @@ implementation
enumclass.symtable.insert(temptypesym);
{ but the name of the class as far as the JVM is concerned will match
the enum's original name (the enum type itself won't be output in
any class file, so no conflict there) }
if not islocal then
any class file, so no conflict there)
name can be empty in case of declaration such as "set of (ea,eb)" }
if not islocal and
(name <> '') then
enumclass.objextname:=stringdup(name)
else
{ for local types, use a unique name to prevent conflicts (since such

39
tests/test/jvm/tset7.pp Normal file
View File

@ -0,0 +1,39 @@
program tset7;
{ test for subsetreg sets }
{$packset 1}
type
ta = 0..7;
tr = record
b: byte;
a: set of ta;
w: word;
end;
procedure test(r: tr);
var
b: ta;
begin
b := 6;
if (r.b<>101) or
(r.w<>$abcd) or
(5 in r.a) or
(b in r.a) or
not(7 in r.a) or
([1..3] * r.a <> [2..3]) then
halt(1);
end;
var
r: tr;
inlineenumdefset: set of (inline1,inline2);
begin
r.b:=101;
r.w:=$abcd;
r.a:=[2..3];
include(r.a,7);
test(r);
end.