Java Reference
In-Depth Information
function
gather
L
abels
(CaseItem
cn
)
returns
intList
if
null
then return
(
cn
.
more
=
gather
L
abels
(
cn
.
labelList
))
else
rest
← gather
L
abels
(
cn
.
more
)
return
(
append
(
gather
L
abels
(
cn
.
labelList
)
,
rest
))
end
function
gather
L
abels
( LabelList
lln
)
returns
intList
if
null
then return
(
null
)
else
lln
=
rest
← gather
L
abels
(
llnn
.
more
)
if
lln
.
caseLabel
=
null
then return
(
rest
)
else return
(
cons
(
lln
.
caseLabel
,
rest
))
end
procedure
check
F
or
D
uplicates
( intList
il
)
if
length
(
il
)
>
1
then
if
head
(
il
)
= head
(
tail
(
il
))
then
call
error
(”
Duplicatecaselabel
:”
,head
(
il
))
else
call
check
F
or
D
uplicates
(
tail
(
il
))
end
function
count
D
efaults
(CaseItem
cn
)
returns
int
if
null
then return
(0)
else return
(
cn
=
count
D
efaults
(
cn
.
labelList
)
+count
D
efaults
(
cn
.
more
))
end
function
count
D
efaults
( LabelList
lln
)
returns
int
if
null
then return
(0)
if
lln
.
isDe f ault
then return
(
1
lln
=
(
lln
.
more
)
)
+count
D
efaults
else
return
(
count
D
efaults
(
lln
.
more
))
end
Figure 9.22: Utility Semantic Methods for Switch Statements