blob: c6024074b2ad6495d78ba421e18e157484101a0a [file] [log] [blame]
%!PS-Adobe-2.0
%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
%%Title: manual.dvi
%%Pages: 31
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%DocumentFonts: Palatino-Roman Palatino-Bold Courier Palatino-Italic
%%+ Helvetica Helvetica-Oblique Courier-Bold
%%DocumentPaperSizes: a4
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: /usr/bin/dvips manual.dvi
%DVIPSParameters: dpi=600, compressed
%DVIPSSource: TeX output 2001.10.08:1345
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
(LaserWriter 16/600)]{A length product length le{A length product exch 0
exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
%%EndProcSet
%%BeginProcSet: 8r.enc
% @@psencodingfile@{
% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
% version = "0.6",
% date = "22 June 1996",
% filename = "8r.enc",
% email = "kb@@mail.tug.org",
% address = "135 Center Hill Rd. // Plymouth, MA 02360",
% codetable = "ISO/ASCII",
% checksum = "119 662 4424",
% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
% @}
%
% Idea is to have all the characters normally included in Type 1 fonts
% available for typesetting. This is effectively the characters in Adobe
% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
%
% Character code assignments were made as follows:
%
% (1) the Windows ANSI characters are almost all in their Windows ANSI
% positions, because some Windows users cannot easily reencode the
% fonts, and it makes no difference on other systems. The only Windows
% ANSI characters not available are those that make no sense for
% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
% (173). quotesingle and grave are moved just because it's such an
% irritation not having them in TeX positions.
%
% (2) Remaining characters are assigned arbitrarily to the lower part
% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
%
% (3) Y&Y Lucida Bright includes some extra text characters; in the
% hopes that other PostScript fonts, perhaps created for public
% consumption, will include them, they are included starting at 0x12.
%
% (4) Remaining positions left undefined are for use in (hopefully)
% upward-compatible revisions, if someday more characters are generally
% available.
%
% (5) hyphen appears twice for compatibility with both ASCII and Windows.
%
/TeXBase1Encoding [
% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
/.notdef /dotaccent /fi /fl
/fraction /hungarumlaut /Lslash /lslash
/ogonek /ring /.notdef
/breve /minus /.notdef
% These are the only two remaining unencoded characters, so may as
% well include them.
/Zcaron /zcaron
% 0x10
/caron /dotlessi
% (unusual TeX characters available in, e.g., Lucida Bright)
/dotlessj /ff /ffi /ffl
/.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef
% very contentious; it's so painful not having quoteleft and quoteright
% at 96 and 145 that we move the things normally found there down to here.
/grave /quotesingle
% 0x20 (ASCII begins)
/space /exclam /quotedbl /numbersign
/dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
% 0x30
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
% 0x40
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
% 0x50
/P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
% 0x60
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
% 0x70
/p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde
/.notdef % rubout; ASCII ends
% 0x80
/.notdef /.notdef /quotesinglbase /florin
/quotedblbase /ellipsis /dagger /daggerdbl
/circumflex /perthousand /Scaron /guilsinglleft
/OE /.notdef /.notdef /.notdef
% 0x90
/.notdef /.notdef /.notdef /quotedblleft
/quotedblright /bullet /endash /emdash
/tilde /trademark /scaron /guilsinglright
/oe /.notdef /.notdef /Ydieresis
% 0xA0
/.notdef % nobreakspace
/exclamdown /cent /sterling
/currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft
/logicalnot
/hyphen % Y&Y (also at 45); Windows' softhyphen
/registered
/macron
% 0xD0
/degree /plusminus /twosuperior /threesuperior
/acute /mu /paragraph /periodcentered
/cedilla /onesuperior /ordmasculine /guillemotright
/onequarter /onehalf /threequarters /questiondown
% 0xC0
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
% 0xD0
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /germandbls
% 0xE0
/agrave /aacute /acircumflex /atilde
/adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis
/igrave /iacute /icircumflex /idieresis
% 0xF0
/eth /ntilde /ograve /oacute
/ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex
/udieresis /yacute /thorn /ydieresis
] def
%%EndProcSet
%%BeginProcSet: texps.pro
%!
TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub
dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict
end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{
dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1
roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def
dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}
if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}
def end
%%EndProcSet
%%BeginProcSet: special.pro
%!
TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
{userdict/md get type/dicttype eq{userdict begin md length 10 add md
maxlength ge{/md md dup length 20 add dict copy def}if end md begin
/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
save N userdict maxlength dict begin/magscale true def normalscale
currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
begin/SpecialSave save N gsave normalscale currentpoint TR
@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
1 startangle endangle arc savematrix setmatrix}N end
%%EndProcSet
TeXDict begin 39158280 55380996 1000 600 600 (manual.dvi)
@start /Fa 145[60 60 3[60 3[60 3[60 97[{TeXBase1Encoding ReEncodeFont}5
99.6264 /Courier-Bold rf
%DVIPSBitmapFont: Fb cmr8 8 1
/Fb 1 44 df<EC0380B3A4B812FCA3C7D80380C7FCB3A42E2F7CA737>43
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fc cmr10 10.95 1
/Fc 1 62 df<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167B
A147>61 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fd cmsy10 10.95 1
/Fd 1 55 df<176017F01601A2EE03E0A2EE07C0A2EE0F80A2EE1F00A2163EA25EA25EA2
4B5AA24B5AA24B5AA24B5AA24BC7FCA2153EA25DA25DA24A5AA24A5AA24A5AA24A5AA24A
C8FCA2143EA25CA25CA2495AA2495AA2495AA2495AA249C9FCA2133EA25BA25BA2485AA2
485AA2485AA2485AA248CAFCA2123EA25AA25AA25A12602C5473C000>54
D E
%EndDVIPSBitmapFont
/Fe 179[51 6[61 1[66 61 66[{TeXBase1Encoding ReEncodeFont}4
90.9091 /Helvetica rf /Ff 103[55 26[55 55 55 55 55 55
55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
55 55 55 55 55 55 55 1[55 1[55 3[55 55 55 55 55 55 55
55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 1[55
55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
55 55 55 55 55 55 55 2[55 55 55 33[{TeXBase1Encoding ReEncodeFont}86
90.9091 /Courier rf /Fg 107[50 25[50 55 50 83 55 61 33
44 39 1[61 55 61 89 33 61 33 33 61 55 39 50 61 44 61
50 12[66 61 2[61 83 1[100 61 2[39 83 83 55 61 83 72 1[78
6[25 1[50 50 50 50 50 50 50 50 2[25 33 5[28 35[61 61
2[{TeXBase1Encoding ReEncodeFont}54 99.6264 /Palatino-Bold
rf /Fh 134[60 60 60 60 60 60 60 60 60 60 60 60 60 60
60 60 60 60 60 60 60 60 60 60 60 3[60 1[60 3[60 60 2[60
60 1[60 60 60 60 60 2[60 60 1[60 60 1[60 60 60 5[60 8[60
1[60 60 60 60 60 2[60 60 5[60 34[{TeXBase1Encoding ReEncodeFont}53
99.6264 /Courier rf /Fi 135[50 50 50 1[50 50 50 1[50
50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 38[50 10[50
50 46[{TeXBase1Encoding ReEncodeFont}25 83.022 /Courier
rf /Fj 135[43 1[47 50 27 35 33 1[50 45 48 73 24 1[19
24 48 46 1[40 51 37 46 42 12[51 18[65 18[21 28 21 44[{
TeXBase1Encoding ReEncodeFont}25 83.022 /Palatino-Roman
rf /Fk 205[29 29 49[{TeXBase1Encoding ReEncodeFont}2
58.1154 /Palatino-Roman rf /Fm 134[66 60 100 66 73 40
53 47 1[73 66 73 106 40 73 40 40 73 1[47 60 73 53 1[60
9[120 2[80 1[86 1[73 2[120 2[47 1[100 100 3[86 80 93
10[60 60 60 60 60 60 2[30 43[73 2[{TeXBase1Encoding ReEncodeFont}41
119.552 /Palatino-Bold rf /Fn 205[33 33 49[{
TeXBase1Encoding ReEncodeFont}2 66.4176 /Palatino-Roman
rf /Fo 179[55 6[66 1[72 66 66[{TeXBase1Encoding ReEncodeFont}4
99.6264 /Helvetica rf /Fp 134[50 2[50 55 33 39 39 1[50
44 55 1[28 2[28 50 50 1[39 50 41 46 44 97[{
TeXBase1Encoding ReEncodeFont}18 99.6264 /Palatino-Italic
rf /Fq 107[50 50 24[50 55 51 83 56 60 32 42 39 56 60
54 58 88 29 55 23 29 58 55 33 48 61 44 55 50 3[33 1[33
66 66 1[100 72 78 61 52 67 1[60 78 83 94 61 72 33 34
83 76 55 61 77 71 61 78 6[25 50 50 50 50 50 50 50 50
50 50 1[25 33 25 2[33 33 28 1[84 33[61 60 2[{
TeXBase1Encoding ReEncodeFont}74 99.6264 /Palatino-Roman
rf /Fr 135[72 1[80 88 48 64 56 1[88 80 88 128 48 2[48
88 1[56 72 88 64 1[72 10[112 1[96 1[104 1[88 2[143 88
1[56 56 1[120 1[88 1[104 96 112 12[72 72 72 72 49[{
TeXBase1Encoding ReEncodeFont}35 143.462 /Palatino-Bold
rf /Fs 134[45 45 66 45 51 30 35 35 1[45 40 51 71 25 40
25 25 45 45 25 35 45 37 42 40 8[66 1[66 71 56 51 61 1[56
71 71 86 51 1[30 30 2[51 56 71 61 1[66 6[23 45 45 45
9[30 5[25 35[50 48 2[{TeXBase1Encoding ReEncodeFont}50
90.9091 /Palatino-Italic rf /Ft 87[30 17[45 1[45 45 24[45
51 47 76 51 55 30 39 36 51 55 50 53 80 26 51 21 26 53
51 30 44 56 40 50 45 3[30 1[30 61 61 61 91 66 71 56 48
61 1[55 71 76 86 56 66 30 31 76 69 51 56 70 64 56 71
5[23 23 45 45 45 45 45 45 45 45 45 45 55 23 30 23 2[30
30 25 35[55 55 2[{TeXBase1Encoding ReEncodeFont}78 90.9091
/Palatino-Roman rf /Fu 139[39 1[47 2[65 9[57 1[53 66
18[94 22[60 5[60 60 60 3[30 44[{TeXBase1Encoding ReEncodeFont}12
119.552 /Palatino-Roman rf /Fv 138[72 1[72 72 3[72 72
72 72 1[72 72 2[72 72 1[72 72 32[72 17[72 46[{
TeXBase1Encoding ReEncodeFont}15 119.552 /Courier rf
/Fw 138[87 1[61 57 4[127 1[80 2[83 6[72 19[136 8[111
68[{TeXBase1Encoding ReEncodeFont}9 143.462 /Palatino-Roman
rf /Fx 139[30 40 35 2[51 56 4[30 3[45 1[40 56 45 10[71
20[71 15[45 45 1[23 46[{TeXBase1Encoding ReEncodeFont}15
90.9091 /Palatino-Bold rf /Fy 134[96 3[104 56 73 68 1[103
94 100 152 50 2[50 1[96 1[82 105 76 95 86 20[105 6[105
133 122 105 24[57 57 40[{TeXBase1Encoding ReEncodeFont}24
172.188 /Palatino-Roman rf end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%BeginPaperSize: a4
a4
%%EndPaperSize
%%EndSetup
%%Page: 1 1
1 0 bop 429 814 a Fy(Byte)44 b(Code)g(Engineering)g(Library)g(\(BCEL\))
749 1021 y(Description)h(and)f(usage)f(manual)1685 1229
y Fx(V)-10 b(ersion)23 b(1.0)1452 1528 y Fw(Markus)35
b(Dahm)1159 1826 y Fv(markus.dahm@berlin.de)1507 2066
y Fu(October)c(8,)f(2001)1738 2421 y Fx(Abstract)380
2581 y Ft(Extensions)k(and)i(impr)n(ovements)f(of)h(the)g(pr)n
(ogramming)g(language)g(Java)h(and)f(its)g(r)n(e-)244
2693 y(lated)26 b(execution)e(envir)n(onment)i(\(Java)i(V)-5
b(irtual)26 b(Machine,)h(JVM\))g(ar)n(e)f(the)f(subject)g(of)h(a)h(lar)
n(ge)244 2806 y(number)f(of)h(r)n(esear)n(ch)f(pr)n(ojects)g(and)g(pr)n
(oposals.)39 b(Ther)n(e)25 b(ar)n(e)i(pr)n(ojects,)f(for)h(instance,)g
(to)f(add)244 2919 y(parameterized)17 b(types)e(to)i(Java,)j(to)d
(implement)g(\223Aspect-Oriented)f(Pr)n(ogramming\224,)j(to)d(per)n(-)
244 3032 y(form)23 b(sophisticated)e(static)i(analysis,)f(and)h(to)f
(impr)n(ove)h(the)f(r)o(un-time)h(performance.)380 3145
y(Since)c(Java)i(classes)d(ar)n(e)i(compiled)f(into)f(portable)h
(binary)h(class)f(\002les)g(\(called)h Fs(byte)g(code)p
Ft(\),)h(it)244 3258 y(is)e(the)f(most)g(convenient)g(and)h
(platform-independent)e(way)i(to)f(implement)h(these)e(impr)n(ove-)244
3371 y(ments)k(not)g(by)h(writing)g(a)g(new)f(compiler)i(or)e(changing)
h(the)f(JVM,)h(but)g(by)g(transforming)f(the)244 3484
y(byte)j(code.)33 b(These)23 b(transformations)h(can)h(either)f(be)h
(performed)e(after)h(compile-time,)i(or)e(at)244 3597
y(load-time.)44 b(Many)28 b(pr)n(ogrammers)f(ar)n(e)h(doing)f(this)h
(by)g(implementing)g(their)f(own)g(special-)244 3710
y(ized)32 b(byte)e(code)h(manipulation)i(tools,)f(which)h(ar)n(e,)g
(however)-7 b(,)33 b(r)n(estricted)d(in)i(the)f(range)g(of)244
3823 y(their)22 b(r)n(e-usability)-10 b(.)380 3935 y(T)i(o)27
b(deal)h(with)g(the)f(necessary)f(class)i(\002le)g(transformations,)g
(we)f(intr)n(oduce)g(an)h(API)f(that)244 4048 y(helps)22
b(developers)e(to)i(conveniently)g(implement)h(their)f
(transformations.)0 4392 y Fr(1)143 b(Introduction)0
4620 y Fq(The)32 b(Java)g(language)g([GJS96])h(has)f(become)g(very)h
(popular)f(and)g(many)g(r)n(esear)n(ch)h(pr)n(ojects)h(deal)0
4741 y(with)28 b(further)g(impr)n(ovements)h(of)e(the)h(language)f(or)h
(its)g(r)o(un-time)g(behavior)-7 b(.)38 b(The)27 b(possibility)i(to)0
4861 y(extend)e(a)f(language)h(with)g(new)f(concepts)i(is)f(sur)n(ely)g
(a)g(desirable)f(featur)n(e,)h(but)h(implementation)0
4981 y(issues)37 b(should)h(be)e(hidden)h(fr)n(om)g(the)g(user)-7
b(.)67 b(Fortunately)-11 b(,)42 b(the)37 b(concepts)h(of)f(the)g(Java)g
(V)-5 b(irtual)0 5102 y(Machine)23 b(permit)g(the)g(user)n(-transpar)n
(ent)i(implementation)f(of)f(such)h(extensions)g(with)f(r)n(elatively)0
5222 y(little)j(ef)n(fort.)146 5342 y(Because)20 b(the)h(tar)n(get)h
(language)f(of)g(Java)f(is)h(an)f(interpr)n(eted)h(language)g(with)g(a)
f(small)h(and)f(easy-)0 5463 y(to-understand)i(set)f(of)g(instr)o
(uctions)i(\(the)e Fp(byte)f(code)p Fq(\),)h(developers)g(can)g
(implement)f(and)g(test)h(their)1888 5712 y(1)p eop
%%Page: 2 2
2 1 bop 0 407 a Fq(concepts)32 b(in)g(a)f(very)h(elegant)f(way)-11
b(.)50 b(One)32 b(can)f(write)h(a)f(plug-in)h(r)n(eplacement)f(for)i
(the)e(system's)0 527 y(class)38 b(loader)g(which)g(is)g(r)n
(esponsible)h(for)g(dynamically)f(loading)g(class)g(\002les)h(at)f(r)o
(un-time)g(and)0 648 y(passing)30 b(the)h(byte)f(code)g(to)h(the)f(V)-5
b(irtual)31 b(Machine)e(\(see)h(section)h(4.1\).)46 b(Class)30
b(loaders)g(may)g(thus)0 768 y(be)f(used)f(to)i(inter)n(cept)g(the)f
(loading)g(pr)n(ocess)h(and)f(transform)i(classes)e(befor)n(e)g(they)h
(get)f(actually)0 888 y(executed)c(by)h(the)g(JVM)f([LB98].)31
b(While)25 b(the)g(original)h(class)g(\002les)g(always)f(r)n(emain)g
(unalter)n(ed,)h(the)0 1009 y(behavior)32 b(of)g(the)f(class)h(loader)f
(may)g(be)g(r)n(econ\002gur)n(ed)i(for)f(every)g(execution)g(or)g
(instr)o(umented)0 1129 y(dynamically)-11 b(.)146 1249
y(The)34 b Fo(BCEL)40 b Fq(API)33 b(\(Byte)i(Code)f(Engineering)h
(Library\),)i(formerly)f(known)f(as)f(JavaClass,)j(is)0
1370 y(a)h(toolkit)i(for)e(the)g(static)h(analysis)g(and)e(dynamic)h
(cr)n(eation)h(or)g(transformation)h(of)f(Java)e(class)0
1490 y(\002les.)70 b(It)37 b(enables)h(developers)g(to)g(implement)g
(the)g(desir)n(ed)g(featur)n(es)g(on)g(a)g(high)g(level)g(of)g(ab-)0
1611 y(straction)30 b(without)g(handling)f(all)f(the)g(internal)h
(details)f(of)h(the)g(Java)f(class)h(\002le)g(format)g(and)f(thus)0
1731 y(r)n(e-inventing)e(the)f(wheel)f(every)h(time.)31
b Fo(BCEL)e Fq(is)24 b(written)i(entir)n(ely)g(in)e(Java)h(and)f(fr)n
(eely)h(available)0 1851 y(under)g(the)g(terms)h(of)f(the)g(Apache)f
(License.)1752 1815 y Fn(1)146 1972 y Fq(This)33 b(paper)f(is)g(str)o
(uctur)n(ed)i(as)f(follows:)46 b(W)-9 b(e)31 b(give)i(a)f(brief)g
(description)i(of)e(the)h(Java)f(V)-5 b(irtual)0 2092
y(Machine)40 b(and)f(the)h(class)g(\002le)g(format)h(in)f(section)h(2.)
75 b(Section)41 b(3)e(intr)n(oduces)j(the)d Fo(BCEL)46
b Fq(API.)0 2213 y(Section)28 b(4)e(describes)h(some)g(typical)g
(application)g(ar)n(eas)g(and)f(example)g(pr)n(ojects.)38
b(The)26 b(appendix)0 2333 y(contains)k(code)f(examples)g(that)h(ar)n
(e)f(to)h(long)f(to)h(be)f(pr)n(esented)g(in)g(the)g(main)g(part)h(of)f
(this)h(paper)-7 b(.)0 2453 y(All)24 b(examples)h(ar)n(e)g(included)g
(in)g(the)g(down-loadable)g(distribution.)0 2749 y Fm(1.1)119
b(Related)29 b(work)0 2939 y Fq(Ther)n(e)37 b(ar)n(e)g(a)g(number)g(of)
g(pr)n(oposals)i(and)d(class)i(libraries)f(that)h(have)f(some)g
(similarities)g(with)2 3059 y(B)t(C)t(E)t(L)r(:)28 b(The)e(JOIE)f
([CCK98)o(])h(toolkit)h(can)f(be)f(used)g(to)h(instr)o(ument)h(class)f
(loaders)g(with)g(dynamic)0 3180 y(behavior)-7 b(.)73
b(Similarly)-11 b(,)43 b(\223Binary)c(Component)h(Adaptation\224)e
([KH98])i(allows)f(components)h(to)0 3300 y(be)30 b(adapted)g(and)h
(evolved)g(on-the-\003y)-11 b(.)48 b(Han)30 b(Lee's)g(\223Byte-code)i
(Instr)o(umenting)g(T)-9 b(ool\224)31 b([LZ98])0 3421
y(allows)20 b(the)g(user)g(to)g(insert)g(calls)g(to)g(analysis)g
(methods)g(anywher)n(e)g(in)g(the)f(byte)h(code.)30 b(The)19
b(Jasmin)0 3541 y(language)i([MD97])g(can)f(be)h(used)f(to)i
(hand-write)f(or)g(generate)g(pseudo-assembler)g(code.)30
b(D-Java)0 3661 y([Sil98])25 b(and)g(JCF)g([Y)-9 b(ou98])25
b(ar)n(e)g(class)h(viewing)f(tools.)146 3782 y(In)f(contrast)h(to)g
(these)f(pr)n(ojects,)h Fo(BCEL)j Fq(is)c(intended)f(to)i(be)e(a)h
(general)g(purpose)g(tool)h(for)g(\223byte)0 3902 y(code)31
b(engineering\224.)48 b(It)30 b(gives)h(full)g(contr)n(ol)i(to)e(the)g
(developer)f(on)h(a)g(high)g(level)f(of)h(abstraction)0
4022 y(and)25 b(is)g(not)g(r)n(estricted)i(to)f(any)f(particular)h
(application)f(ar)n(ea.)0 4363 y Fr(2)143 b(The)35 b(Java)g(V)-8
b(irtual)34 b(Machine)0 4590 y Fq(Readers)f(alr)n(eady)h(familiar)g
(with)g(the)g(Java)g(V)-5 b(irtual)34 b(Machine)g(and)f(the)h(Java)g
(class)g(\002le)g(format)0 4711 y(may)25 b(want)g(to)h(skip)g(this)f
(section)h(and)f(pr)n(oceed)g(with)g(section)h(3.)146
4831 y(Pr)n(ograms)34 b(written)g(in)e(the)g(Java)h(language)f(ar)n(e)h
(compiled)f(into)h(a)f(portable)h(binary)g(format)0 4951
y(called)27 b Fp(byte)g(code)p Fq(.)38 b(Every)27 b(class)h(is)g(r)n
(epr)n(esented)g(by)f(a)h(single)f(class)h(\002le)f(containing)i(class)
f(r)n(elated)0 5072 y(data)g(and)f(byte)i(code)f(instr)o(uctions.)42
b(These)27 b(\002les)h(ar)n(e)g(loaded)f(dynamically)i(into)f(an)g
(interpr)n(eter)0 5192 y(\(Java)d(V)-5 b(irtual)25 b(Machine,)g(JVM\))g
(and)g(executed.)p 0 5271 1530 4 v 116 5333 a Fk(1)149
5363 y Fj(The)c(distribution)g(is)g(available)e(at)h
Fi(http://jakarta.apache.org/bcel/)p Fj(,)14 b(including)21
b(several)f(code)g(ex-)0 5463 y(amples)h(and)f(javadoc)g(manuals.)1888
5712 y Fq(2)p eop
%%Page: 3 3
3 2 bop 146 407 a Fq(Figur)n(e)21 b(1)f(illustrates)i(the)e(pr)n
(ocedur)n(e)h(of)g(compiling)f(and)g(executing)h(a)f(Java)g(class:)29
b(The)20 b(sour)n(ce)0 527 y(\002le)f(\()p Fh(HelloWorld.java)p
Fq(\))d(is)j(compiled)g(into)h(a)e(Java)i(class)f(\002le)g(\()p
Fh(HelloWorld.class)p Fq(\),)e(loaded)0 648 y(by)32 b(the)f(byte)h
(code)g(interpr)n(eter)g(and)f(executed.)51 b(In)30 b(or)n(der)j(to)f
(implement)f(additional)g(featur)n(es,)0 768 y(r)n(esear)n(chers)k(may)
e(want)h(to)g(transform)h(class)f(\002les)g(\(drawn)f(with)h(bold)g
(lines\))f(befor)n(e)h(they)g(get)0 888 y(actually)26
b(executed.)31 b(This)25 b(application)g(ar)n(ea)g(is)g(one)g(of)h(the)
f(main)f(issues)i(of)f(this)h(article.)0 2794 y @beginspecial
0 @llx 0 @lly 439 @urx 199 @ury 4590 @rwi @setspecial
%%BeginDocument: eps/jvm.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: jvm.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Thu Nov 19 11:55:18 1998
%%For: dahm@che (Markus Dahm,,,,,)
%%Orientation: Portrait
%%BoundingBox: 0 0 439 199
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
-17.0 217.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
10 setmiterlimit
n -1000 4612 m -1000 -1000 l 8588 -1000 l 8588 4612 l cp clip
0.06000 0.06000 sc
/Courier ff 285.00 scf sf
6600 1575 m
gs 1 -1 sc (java) col0 sh gr
/Courier ff 285.00 scf sf
2550 1575 m
gs 1 -1 sc (javac) col0 sh gr
/Courier-Bold ff 150.00 scf sf
4290 1155 m
gs 1 -1 sc (08 1a 42 ...) col0 sh gr
/Courier-Bold ff 150.00 scf sf
4290 990 m
gs 1 -1 sc (ca fe ba be) col0 sh gr
% Polyline
7.500 slw
n 6405 1200 m 6300 1200 6300 1695 105 arcto 4 {pop} repeat
6300 1800 7395 1800 105 arcto 4 {pop} repeat
7500 1800 7500 1305 105 arcto 4 {pop} repeat
7500 1200 6405 1200 105 arcto 4 {pop} repeat
cp gs col0 s gr
% Polyline
n 2505 1200 m 2400 1200 2400 1695 105 arcto 4 {pop} repeat
2400 1800 3495 1800 105 arcto 4 {pop} repeat
3600 1800 3600 1305 105 arcto 4 {pop} repeat
3600 1200 2505 1200 105 arcto 4 {pop} repeat
cp gs col0 s gr
% Polyline
30.000 slw
gs clippath
2280 1470 m 2400 1500 l 2280 1530 l 2445 1530 l 2445 1470 l cp
clip
n 1800 1500 m 2400 1500 l gs col0 s gr gr
% arrowhead
7.500 slw
n 2280 1470 m 2400 1500 l 2280 1530 l 2280 1500 l 2280 1470 l cp gs 0.00 setgray ef gr col0 s
% Polyline
30.000 slw
gs clippath
4080 1470 m 4200 1500 l 4080 1530 l 4245 1530 l 4245 1470 l cp
clip
n 3600 1500 m 4200 1500 l gs col0 s gr gr
% arrowhead
7.500 slw
n 4080 1470 m 4200 1500 l 4080 1530 l 4080 1500 l 4080 1470 l cp gs 0.00 setgray ef gr col0 s
% Polyline
30.000 slw
gs clippath
6180 1470 m 6300 1500 l 6180 1530 l 6345 1530 l 6345 1470 l cp
clip
n 5700 1500 m 6300 1500 l gs col0 s gr gr
% arrowhead
7.500 slw
n 6180 1470 m 6300 1500 l 6180 1530 l 6180 1500 l 6180 1470 l cp gs 0.00 setgray ef gr col0 s
% Polyline
30.000 slw
n 5415 615 m 5415 915 l 5715 915 l gs col0 s gr
% Polyline
n 4215 615 m 4215 2415 l 5715 2415 l 5715 915 l 5415 615 l 4215 615 l cp gs col0 s gr
% Polyline
gs clippath
7006 1136 m 6900 1200 l 6964 1094 l 6847 1211 l 6889 1253 l cp
clip
n 7500 600 m 6900 1200 l gs col0 s gr gr
% arrowhead
7.500 slw
n 7006 1136 m 6900 1200 l 6964 1094 l 6985 1115 l 7006 1136 l cp gs 0.00 setgray ef gr col0 s
% Polyline
30.000 slw
gs clippath
6630 1080 m 6600 1200 l 6570 1080 l 6570 1245 l 6630 1245 l cp
clip
n 6600 1200 m 6600 600 l gs col0 s gr gr
% arrowhead
7.500 slw
n 6630 1080 m 6600 1200 l 6570 1080 l 6600 1080 l 6630 1080 l cp gs 0.00 setgray ef gr col0 s
% Polyline
n 300 3000 m 3600 3000 l 3600 3600 l 300 3600 l cp gs 0.90 setgray ef gr gs col0 s gr
% Polyline
n 4200 3000 m 7500 3000 l 7500 3600 l 4200 3600 l cp gs 0.90 setgray ef gr gs col0 s gr
% Polyline
n 1500 600 m 1500 900 l 1800 900 l gs col0 s gr
% Polyline
n 300 600 m 300 2400 l 1800 2400 l 1800 900 l 1500 600 l 300 600 l cp gs col0 s gr
/Helvetica ff 180.00 scf sf
6450 450 m
gs 1 -1 sc (Other classes) col0 sh gr
/Courier ff 150.00 scf sf
375 975 m
gs 1 -1 sc (public class) col0 sh gr
/Courier ff 150.00 scf sf
375 1140 m
gs 1 -1 sc (HelloWorld {) col0 sh gr
/Courier ff 150.00 scf sf
375 1305 m
gs 1 -1 sc ( ...) col0 sh gr
/Courier ff 150.00 scf sf
375 1635 m
gs 1 -1 sc ( void hello\(\) {) col0 sh gr
/Courier ff 150.00 scf sf
375 1800 m
gs 1 -1 sc ( ...) col0 sh gr
/Courier ff 150.00 scf sf
375 1965 m
gs 1 -1 sc ( }) col0 sh gr
/Courier ff 150.00 scf sf
375 2130 m
gs 1 -1 sc (}) col0 sh gr
/Helvetica ff 180.00 scf sf
4275 2625 m
gs 1 -1 sc (HelloWorld.class) col0 sh gr
/Helvetica-Bold ff 300.00 scf sf
900 3375 m
gs 1 -1 sc (Java language) col0 sh gr
/Helvetica-Bold ff 300.00 scf sf
4350 3375 m
gs 1 -1 sc (Java Virtual Machine) col0 sh gr
/Helvetica ff 180.00 scf sf
375 2625 m
gs 1 -1 sc (HelloWorld.java) col-1 sh gr
$F2psEnd
rs
%%EndDocument
@endspecial 781 2998 a(Figur)n(e)g(1:)31 b(Compilation)25
b(and)g(execution)h(of)f(Java)g(classes)146 3370 y(Note)e(that)g(the)f
(use)h(of)g(the)f(general)g(term)h(\223Java\224)f(implies)g(two)h
(meanings:)30 b(on)23 b(the)f(one)g(hand,)0 3491 y(Java)i(as)f(a)g(pr)n
(ogramming)i(language)f(is)g(meant,)f(on)h(the)g(other)g(hand,)f(the)h
(Java)g(V)-5 b(irtual)23 b(Machine,)0 3611 y(which)k(is)g(not)g
(necessarily)h(tar)n(geted)g(by)f(the)g(Java)f(language)h(exclusively)
-11 b(,)28 b(but)g(may)e(be)h(used)g(by)0 3731 y(other)j(languages)f
(as)g(well)f(\(e.g.)43 b(Eif)n(fel)29 b([CCZ97],)g(or)h(Ada)e([T)-9
b(af96]\).)42 b(W)-9 b(e)28 b(assume)h(the)g(r)n(eader)g(to)0
3852 y(be)g(familiar)h(with)g(the)f(Java)h(language)g(and)f(to)h(have)f
(a)h(general)f(understanding)h(of)g(the)g(V)-5 b(irtual)0
3972 y(Machine.)0 4320 y Fm(2.1)119 b(Java)29 b(class)h(\002le)g
(format)0 4525 y Fq(Giving)g(a)f(full)g(overview)h(of)g(the)f(design)g
(issues)h(of)f(the)h(Java)f(class)h(\002le)f(format)h(and)f(the)g
(associ-)0 4645 y(ated)h(byte)g(code)g(instr)o(uctions)j(is)d(beyond)g
(the)g(scope)h(of)f(this)h(paper)-7 b(.)45 b(W)-9 b(e)29
b(will)h(just)h(give)f(a)g(brief)0 4766 y(intr)n(oduction)36
b(covering)e(the)g(details)f(that)i(ar)n(e)e(necessary)h(for)g
(understanding)g(the)g(r)n(est)g(of)g(this)0 4886 y(paper)-7
b(.)39 b(The)28 b(format)h(of)f(class)h(\002les)f(and)f(the)h(byte)h
(code)f(instr)o(uction)i(set)f(ar)n(e)f(described)g(in)f(mor)n(e)0
5007 y(detail)k(in)f(the)h(\223Java)g(V)-5 b(irtual)31
b(Machine)g(Speci\002cation\224)h([L)-9 b(Y97])2542 4970
y Fn(2)2579 5007 y Fq(,)32 b(and)f(in)f([MD97].)49 b(Especially)-11
b(,)0 5127 y(we)23 b(will)g(not)h(deal)e(with)i(the)f(security)h
(constraints)h(that)f(the)f(Java)g(V)-5 b(irtual)24 b(Machine)f(has)g
(to)g(check)0 5247 y(at)i(r)o(un-time,)h(i.e.)k(the)25
b(byte)h(code)f(veri\002er)-7 b(.)p 0 5371 1530 4 v 116
5433 a Fk(2)149 5463 y Fj(Also)21 b(available)f(online)i(at)e
Fi(http://www.javasoft.com/docs/books/)o(vmspe)o(c/inde)o(x.htm)o(l)
1888 5712 y Fq(3)p eop
%%Page: 4 4
4 3 bop 146 407 a Fq(Figur)n(e)40 b(2)e(shows)i(a)e(simpli\002ed)h
(example)f(of)h(the)g(contents)h(of)f(a)g(Java)f(class)i(\002le:)58
b(It)38 b(starts)0 527 y(with)c(a)f(header)g(containing)h(a)f
(\223magic)h(number)7 b(\224)33 b(\()p Fh(0xCAFEBABE)p
Fq(\))f(and)h(the)g(version)h(number)-7 b(,)0 648 y(followed)33
b(by)f(the)g Fp(constant)h(pool)p Fq(,)g(which)g(can)e(be)h(r)n(oughly)
i(thought)g(of)e(as)g(the)g(text)h(segment)f(of)0 768
y(an)j(executable,)j(the)e Fp(access)e(rights)g Fq(of)i(the)g(class)g
(encoded)f(by)h(a)f(bit)h(mask,)i(a)d(list)h(of)g(interfaces)0
888 y(implemented)19 b(by)h(the)f(class,)i(lists)f(containing)h(the)f
(\002elds)f(and)g(methods)h(of)g(the)g(class,)h(and)e(\002nally)0
1009 y(the)35 b Fp(class)f(attributes)p Fq(,)j(e.g.)60
b(the)35 b Fh(SourceFile)d Fq(attribute)37 b(telling)e(the)g(name)f(of)
h(the)g(sour)n(ce)h(\002le.)0 1129 y(Attributes)28 b(ar)n(e)f(a)g(way)g
(of)g(putting)h(additional,)g(e.g.)36 b(user)n(-de\002ned,)28
b(information)g(into)g(class)f(\002le)0 1249 y(data)e(str)o(uctur)n
(es.)34 b(For)26 b(example,)f(a)g(custom)h(class)g(loader)f(may)h
(evaluate)f(such)g(attribute)i(data)e(in)0 1370 y(or)n(der)h(to)f
(perform)h(its)f(transformations.)33 b(The)25 b(JVM)g(speci\002cation)h
(declar)n(es)f(that)g(unknown,)g(i.e.)0 1490 y(user)n(-de\002ned)g
(attributes)i(must)e(be)g(ignor)n(ed)h(by)f(any)g(V)-5
b(irtual)25 b(Machine)g(implementation.)0 5123 y @beginspecial
0 @llx 0 @lly 520 @urx 460 @ury 4590 @rwi @setspecial
%%BeginDocument: eps/classfile.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: classfile.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Mon Nov 30 16:01:26 1998
%%For: dahm@che (Markus Dahm,,,,,)
%%Orientation: Portrait
%%BoundingBox: 0 0 520 460
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
-17.0 540.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
10 setmiterlimit
n -1000 10000 m -1000 -1000 l 9937 -1000 l 9937 10000 l cp clip
0.06000 0.06000 sc
% Polyline
7.500 slw
n 2999 6599 m 2400 6599 l 2400 6749 l 2999 6749 l cp gs col0 s gr
% Polyline
n 2400 6749 m 2999 6749 l 2999 6899 l 2400 6899 l cp gs col0 s gr
% Polyline
n 2999 6899 m 2400 6899 l 2400 7049 l 2999 7049 l cp gs col0 s gr
% Polyline
n 2400 7049 m 2999 7049 l 2999 7200 l 2400 7200 l cp gs col0 s gr
% Polyline
n 2400 7200 m 2999 7200 l 2999 7349 l 2400 7349 l cp gs col0 s gr
% Polyline
30.000 slw
[15 45] 45 sd
n 2699 7424 m 2699 7724 l gs col0 s gr [] 0 sd
% Polyline
7.500 slw
n 299 6449 m 3299 6449 l 3299 7949 l 299 7949 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
599 6824 m
gs 1 -1 sc (Methods) col0 sh gr
% Polyline
n 2999 5099 m 2400 5099 l 2400 5249 l 2999 5249 l cp gs col0 s gr
% Polyline
n 2400 5249 m 2999 5249 l 2999 5399 l 2400 5399 l cp gs col0 s gr
% Polyline
n 2999 5399 m 2400 5399 l 2400 5549 l 2999 5549 l cp gs col0 s gr
% Polyline
n 2400 5549 m 2999 5549 l 2999 5699 l 2400 5699 l cp gs col0 s gr
% Polyline
n 2400 5699 m 2999 5699 l 2999 5849 l 2400 5849 l cp gs col0 s gr
% Polyline
30.000 slw
[15 45] 45 sd
n 2699 5924 m 2699 6224 l gs col0 s gr [] 0 sd
% Polyline
7.500 slw
n 299 4949 m 3299 4949 l 3299 6449 l 299 6449 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
599 5399 m
gs 1 -1 sc (Fields) col0 sh gr
% Polyline
n 299 4199 m 3299 4199 l 3299 4949 l 299 4949 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
599 4649 m
gs 1 -1 sc (Implemented interfaces) col0 sh gr
% Polyline
n 299 3449 m 3299 3449 l 3299 4199 l 299 4199 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
599 3899 m
gs 1 -1 sc (Access rights) col0 sh gr
% Polyline
n 299 1349 m 3299 1349 l 3299 2099 l 299 2099 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
599 1799 m
gs 1 -1 sc (Header) col0 sh gr
% Polyline
n 2999 2249 m 2400 2249 l 2400 2400 l 2999 2400 l cp gs col0 s gr
% Polyline
n 2400 2400 m 2999 2400 l 2999 2549 l 2400 2549 l cp gs col0 s gr
% Polyline
n 2999 2549 m 2400 2549 l 2400 2699 l 2999 2699 l cp gs col0 s gr
% Polyline
n 2400 2699 m 2999 2699 l 2999 2849 l 2400 2849 l cp gs col0 s gr
% Polyline
n 2400 2849 m 2999 2849 l 2999 2999 l 2400 2999 l cp gs col0 s gr
% Polyline
30.000 slw
[15 45] 45 sd
n 2699 3074 m 2699 3374 l gs col0 s gr [] 0 sd
% Polyline
7.500 slw
n 299 2099 m 3299 2099 l 3299 3449 l 299 3449 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
599 2549 m
gs 1 -1 sc (Constant pool) col0 sh gr
% Polyline
n 299 7949 m 3299 7949 l 3299 8699 l 299 8699 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
599 8400 m
gs 1 -1 sc (Class attributes) col0 sh gr
% Polyline
n 4800 2999 m 7499 2999 l 7499 4349 l 4800 4349 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
5099 3299 m
gs 1 -1 sc (ConstantFieldref) col0 sh gr
/Helvetica ff 210.00 scf sf
5099 3600 m
gs 1 -1 sc ("aVariable") col0 sh gr
/Helvetica ff 210.00 scf sf
5099 3884 m
gs 1 -1 sc ("[Ljava/lang/Object;") col0 sh gr
/Helvetica ff 210.00 scf sf
5099 4199 m
gs 1 -1 sc ("HelloWorld") col0 sh gr
% Polyline
n 5024 2624 m 7124 2624 l 7124 2924 l 5024 2924 l cp gs col0 s gr
/Helvetica ff 210.00 scf sf
5099 2849 m
gs 1 -1 sc ("java/io/PrintStream") col0 sh gr
% Polyline
n 4800 1649 m 7499 1649 l 7499 2999 l 4800 2999 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
5099 1949 m
gs 1 -1 sc (ConstantMethodRef) col0 sh gr
/Helvetica ff 210.00 scf sf
5099 2249 m
gs 1 -1 sc ("println") col0 sh gr
/Helvetica ff 210.00 scf sf
5099 2534 m
gs 1 -1 sc ("\(Ljava/lang/String;\)V") col0 sh gr
% Polyline
n 4800 4349 m 7499 4349 l 7499 5099 l 4800 5099 l cp gs col0 s gr
/Helvetica-Bold ff 210.00 scf sf
5099 4649 m
gs 1 -1 sc (ConstantClass) col0 sh gr
/Helvetica ff 210.00 scf sf
5099 4949 m
gs 1 -1 sc ("java/io/PrintStream") col0 sh gr
% Polyline
n 4080 6500 m 3975 6500 3975 7770 105 arcto 4 {pop} repeat
3975 7875 8820 7875 105 arcto 4 {pop} repeat
8925 7875 8925 6605 105 arcto 4 {pop} repeat
8925 6500 4080 6500 105 arcto 4 {pop} repeat
cp gs 0.00 setgray ef gr gs col0 s gr
% Polyline
n 3855 6725 m 3750 6725 3750 7995 105 arcto 4 {pop} repeat
3750 8100 8595 8100 105 arcto 4 {pop} repeat
8700 8100 8700 6830 105 arcto 4 {pop} repeat
8700 6725 3855 6725 105 arcto 4 {pop} repeat
cp gs col7 1.00 shd ef gr gs col0 s gr
% Polyline
30.000 slw
[15 45] 45 sd
n 6150 7800 m 6150 7950 l gs col0 s gr [] 0 sd
% Polyline
7.500 slw
n 5550 7200 m 7200 7200 l 7200 7425 l 5550 7425 l cp gs col0 s gr
% Polyline
n 5550 7500 m 8625 7500 l 8625 7725 l 5550 7725 l cp gs col0 s gr
/Courier-Bold ff 180.00 scf sf
4050 7050 m
gs 1 -1 sc (getstatic java.lang.System.out) col0 sh gr
/Courier-Bold ff 180.00 scf sf
4050 7650 m
gs 1 -1 sc (invokevirtual java.io.PrintStream.println) col0 sh gr
/Courier-Bold ff 180.00 scf sf
4050 7350 m
gs 1 -1 sc (ldc "Hello, world") col0 sh gr
% Polyline
[15 45] 45 sd
n 2400 2249 m 4800 1649 l gs col0 s gr [] 0 sd
% Polyline
[15 45] 45 sd
n 2400 2849 m 4800 5849 l gs col0 s gr [] 0 sd
% Polyline
gs clippath
4693 3661 m 4800 3600 l 4734 3705 l 4832 3611 l 4790 3568 l cp
clip
n 2999 5324 m 4800 3600 l gs col0 s gr gr
% arrowhead
n 4693 3661 m 4800 3600 l 4734 3705 l 4713 3683 l 4693 3661 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
3669 7107 m 3750 7200 l 3635 7156 l 3745 7233 l 3779 7184 l cp
clip
n 2999 6674 m 3750 7200 l gs col0 s gr gr
% arrowhead
n 3669 7107 m 3750 7200 l 3635 7156 l 3652 7131 l 3669 7107 l cp gs 0.00 setgray ef gr col0 s
% Polyline
n 5099 1649 m 5099 1349 l 7799 1349 l 7799 5549 l 7499 5549 l 7499 1649 l
5099 1649 l cp gs 0.00 setgray ef gr gs col0 s gr
% Polyline
[15 45] 45 sd
n 2999 2849 m 4800 4049 l gs col0 s gr [] 0 sd
% Polyline
[15 45] 45 sd
n 2999 2249 m 4800 2024 l gs col0 s gr [] 0 sd
% Polyline
gs clippath
7609 2533 m 7500 2475 l 7624 2475 l 7493 2442 l 7478 2500 l cp
clip
n 7800 2550 m 7500 2475 l gs col7 s gr gr
% arrowhead
n 7609 2533 m 7500 2475 l 7624 2475 l 7616 2504 l 7609 2533 l cp gs col7 1.00 shd ef gr col7 s
% Polyline
n 4800 5099 m 7499 5099 l 7499 5849 l 4800 5849 l cp gs col0 s gr
% Polyline
n 7800 7500 m 7801 7499 l 7804 7496 l 7809 7491 l 7816 7483 l 7826 7472 l
7840 7457 l 7856 7440 l 7875 7419 l 7897 7395 l 7921 7368 l
7946 7340 l 7973 7310 l 7999 7279 l 8026 7247 l 8052 7216 l
8078 7184 l 8102 7152 l 8125 7121 l 8147 7090 l 8167 7059 l
8186 7029 l 8203 6998 l 8220 6966 l 8235 6934 l 8250 6900 l
8261 6873 l 8272 6845 l 8282 6816 l 8292 6786 l 8303 6756 l
8313 6724 l 8323 6692 l 8333 6659 l 8343 6626 l 8353 6592 l
8363 6557 l 8373 6522 l 8382 6487 l 8392 6451 l 8402 6415 l
8412 6379 l 8421 6342 l 8431 6305 l 8440 6268 l 8449 6231 l
8458 6194 l 8467 6157 l 8476 6120 l 8484 6082 l 8492 6045 l
8500 6007 l 8508 5969 l 8515 5932 l 8522 5894 l 8528 5856 l
8535 5817 l 8540 5778 l 8545 5739 l 8550 5700 l 8554 5664 l
8557 5628 l 8560 5591 l 8563 5554 l 8565 5517 l 8567 5479 l
8568 5440 l 8570 5401 l 8571 5362 l 8572 5322 l 8572 5281 l
8573 5241 l 8573 5200 l 8573 5159 l 8573 5117 l 8573 5076 l
8572 5034 l 8572 4992 l 8571 4950 l 8570 4908 l 8570 4866 l
8569 4824 l 8568 4783 l 8567 4741 l 8566 4700 l 8565 4659 l
8564 4619 l 8563 4578 l 8562 4538 l 8561 4499 l 8560 4460 l
8559 4421 l 8558 4383 l 8557 4346 l 8555 4309 l 8554 4272 l
8552 4236 l 8550 4200 l 8548 4161 l 8545 4121 l 8542 4083 l
8540 4044 l 8537 4006 l 8534 3968 l 8531 3930 l 8528 3892 l
8526 3854 l 8523 3815 l 8520 3777 l 8517 3739 l 8515 3702 l
8512 3664 l 8509 3626 l 8506 3588 l 8503 3551 l 8500 3514 l
8497 3477 l 8493 3440 l 8490 3404 l 8486 3368 l 8481 3333 l
8477 3298 l 8471 3264 l 8466 3231 l 8460 3199 l 8453 3167 l
8446 3136 l 8438 3107 l 8430 3078 l 8421 3051 l 8411 3025 l
8400 3000 l 8385 2969 l 8368 2941 l 8349 2913 l 8328 2887 l
8305 2862 l 8279 2838 l 8251 2814 l 8220 2790 l 8187 2767 l
8153 2744 l 8117 2721 l 8080 2699 l 8043 2678 l 8006 2657 l
7970 2638 l 7937 2620 l 7907 2604 l 7879 2590 l 7856 2578 l
7837 2568 l 7823 2561 l 7812 2556 l 7805 2553 l 7802 2551 l
7800 2550 l gs col0 s gr
% Polyline
gs clippath
4723 4703 m 4800 4800 l 4687 4750 l 4794 4833 l 4830 4785 l cp
clip
n 5025 2775 m 5024 2776 l 5020 2779 l 5015 2784 l 5006 2792 l 4993 2804 l
4977 2818 l 4957 2836 l 4934 2857 l 4908 2881 l 4879 2907 l
4849 2935 l 4818 2964 l 4786 2994 l 4754 3023 l 4723 3053 l
4693 3082 l 4664 3110 l 4637 3137 l 4612 3163 l 4589 3188 l
4568 3212 l 4549 3235 l 4531 3257 l 4515 3278 l 4500 3300 l
4485 3324 l 4471 3347 l 4457 3371 l 4444 3396 l 4432 3420 l
4419 3445 l 4408 3470 l 4396 3495 l 4385 3520 l 4374 3546 l
4363 3571 l 4352 3596 l 4342 3622 l 4332 3647 l 4323 3673 l
4314 3698 l 4306 3724 l 4299 3749 l 4292 3775 l 4286 3800 l
4281 3825 l 4278 3850 l 4276 3875 l 4275 3900 l 4276 3925 l
4278 3950 l 4282 3975 l 4287 4001 l 4293 4027 l 4301 4053 l
4309 4080 l 4319 4106 l 4329 4133 l 4340 4160 l 4351 4187 l
4363 4214 l 4375 4241 l 4387 4268 l 4399 4294 l 4411 4320 l
4423 4345 l 4434 4370 l 4446 4394 l 4457 4417 l 4468 4439 l
4478 4460 l 4489 4481 l 4500 4500 l 4513 4522 l 4528 4543 l
4543 4563 l 4559 4583 l 4578 4603 l 4597 4623 l 4618 4643 l
4640 4664 l 4663 4685 l 4686 4705 l 4709 4724 l 4730 4742 l
4749 4758 l 4765 4772 l 4778 4783 l 4800 4800 l gs col0 s gr gr
% arrowhead
n 4723 4703 m 4800 4800 l 4687 4750 l 4705 4727 l 4723 4703 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
7591 5782 m 7499 5699 l 7619 5728 l 7500 5665 l 7472 5719 l cp
clip
n 7200 7275 m 7203 7274 l 7208 7271 l 7219 7265 l 7235 7257 l 7256 7246 l
7282 7233 l 7312 7217 l 7346 7200 l 7381 7182 l 7417 7163 l
7453 7144 l 7487 7126 l 7520 7109 l 7551 7092 l 7580 7076 l
7607 7061 l 7631 7048 l 7654 7034 l 7676 7022 l 7696 7010 l
7714 6998 l 7733 6986 l 7750 6975 l 7770 6961 l 7790 6947 l
7810 6933 l 7829 6918 l 7847 6903 l 7866 6887 l 7883 6871 l
7901 6855 l 7917 6837 l 7933 6820 l 7947 6802 l 7961 6784 l
7973 6766 l 7984 6748 l 7994 6729 l 8003 6711 l 8010 6693 l
8016 6675 l 8021 6656 l 8025 6638 l 8028 6618 l 8030 6598 l
8031 6578 l 8031 6556 l 8030 6534 l 8029 6511 l 8026 6487 l
8023 6462 l 8019 6438 l 8015 6412 l 8009 6387 l 8004 6362 l
7997 6338 l 7991 6314 l 7984 6291 l 7977 6269 l 7971 6247 l
7964 6226 l 7957 6207 l 7950 6187 l 7942 6167 l 7934 6146 l
7926 6126 l 7918 6106 l 7909 6086 l 7900 6066 l 7891 6046 l
7881 6027 l 7871 6008 l 7861 5990 l 7850 5972 l 7840 5956 l
7829 5940 l 7818 5925 l 7807 5911 l 7797 5898 l 7785 5886 l
7774 5874 l 7762 5863 l 7750 5852 l 7737 5841 l 7722 5830 l
7707 5819 l 7689 5807 l 7670 5795 l 7648 5782 l 7625 5769 l
7602 5755 l 7578 5742 l 7555 5729 l 7535 5718 l 7499 5699 l gs col0 s gr gr
% arrowhead
n 7591 5782 m 7499 5699 l 7619 5728 l 7605 5755 l 7591 5782 l cp gs 0.00 setgray ef gr col0 s
/Helvetica ff 210.00 scf sf
975 9000 m
gs 1 -1 sc (HelloWorld.class) col0 sh gr
/Helvetica ff 210.00 scf sf
5099 5699 m
gs 1 -1 sc ("Hello, world") col0 sh gr
/Helvetica-Bold ff 210.00 scf sf
5099 5399 m
gs 1 -1 sc (ConstantString) col0 sh gr
$F2psEnd
rs
%%EndDocument
@endspecial 1252 5327 a(Figur)n(e)h(2:)31 b(Java)25
b(class)g(\002le)g(format)1888 5712 y(4)p eop
%%Page: 5 5
5 4 bop 146 407 a Fq(Because)20 b(all)f(of)h(the)g(information)h
(needed)d(to)i(dynamically)g(r)n(esolve)h(the)f(symbolic)g(r)n(efer)n
(ences)0 527 y(to)32 b(classes,)h(\002elds)e(and)g(methods)h(at)f(r)o
(un-time)h(is)f(coded)h(with)f(string)i(constants,)h(the)d(constant)0
648 y(pool)40 b(contains)g(in)g(fact)g(the)f(lar)n(gest)i(portion)f(of)
g(an)f(average)h(class)f(\002le,)k(appr)n(oximately)e(60\045)0
768 y([AP98)o(].)31 b(The)25 b(byte)h(code)f(instr)o(uctions)i
(themselves)f(just)g(make)e(up)h(12\045.)146 893 y(The)43
b(right)g(upper)g(box)g(shows)h(a)e(\223zoomed\224)h(excerpt)g(of)g
(the)g(constant)h(pool,)j(while)c(the)0 1014 y(r)n(ounded)37
b(box)g(below)f(depicts)h(some)g(instr)o(uctions)i(that)e(ar)n(e)f
(contained)h(within)g(a)f(method)g(of)0 1134 y(the)e(example)f(class.)
56 b(These)34 b(instr)o(uctions)i(r)n(epr)n(esent)e(the)f
(straightforwar)n(d)k(translation)e(of)f(the)0 1254 y(well-known)26
b(statement:)179 1522 y Fh(System.out.println\("Hello,)54
b(world"\);)146 1784 y Fq(The)22 b(\002rst)h(instr)o(uction)h(loads)e
(the)g(contents)h(of)f(the)g(\002eld)g Fh(out)f Fq(of)h(class)h
Fh(java.lang.System)0 1904 y Fq(onto)30 b(the)g(operand)f(stack.)44
b(This)29 b(is)h(an)e(instance)i(of)f(the)h(class)f Fh
(java.io.PrintStream)p Fq(.)39 b(The)0 2025 y Fh(ldc)25
b Fq(\(\223Load)g(constant\224\))i(pushes)f(a)f(r)n(efer)n(ence)h(to)g
(the)g(string)h(\224Hello)e(world\224)h(on)g(the)g(stack.)33
b(The)0 2145 y(next)28 b(instr)o(uction)j(invokes)e(the)f(instance)g
(method)g Fh(println)f Fq(which)h(takes)g(both)h(values)f(as)g(pa-)0
2265 y(rameters)36 b(\(Instance)g(methods)g(always)h(implicitly)f(take)
g(an)g(instance)g(r)n(efer)n(ence)g(as)f(their)i(\002rst)0
2386 y(ar)n(gument\).)146 2511 y(Instr)o(uctions,)24
b(other)d(data)g(str)o(uctur)n(es)i(within)e(the)g(class)g(\002le)f
(and)h(constants)h(themselves)f(may)0 2632 y(r)n(efer)33
b(to)g(constants)h(in)f(the)f(constant)i(pool.)54 b(Such)33
b(r)n(efer)n(ences)g(ar)n(e)g(implemented)f(via)g(\002xed)h(in-)0
2752 y(dexes)h(encoded)g(dir)n(ectly)i(into)f(the)f(instr)o(uctions.)62
b(This)34 b(is)g(illustrated)i(for)f(some)f(items)h(of)g(the)0
2872 y(\002gur)n(e)26 b(emphasized)e(with)h(a)g(surr)n(ounding)i(box.)
146 2998 y(For)h(example,)f(the)h Fh(invokevirtual)c
Fq(instr)o(uction)29 b(r)n(efers)f(to)g(a)f Fh(MethodRef)e
Fq(constant)j(that)0 3118 y(contains)34 b(information)h(about)f(the)g
(name)f(of)h(the)f(called)g(method,)j(the)d(signatur)n(e)i(\(i.e.)56
b(the)33 b(en-)0 3238 y(coded)38 b(ar)n(gument)h(and)f(r)n(eturn)h
(types\),)j(and)c(to)h(which)f(class)h(the)f(method)h(belongs.)71
b(In)37 b(fact,)0 3359 y(as)c(emphasized)f(by)h(the)g(boxed)g(value,)i
(the)e Fh(MethodRef)d Fq(constant)35 b(itself)e(just)h(r)n(efers)f(to)h
(other)0 3479 y(entries)23 b(holding)f(the)h(r)n(eal)f(data,)g(e.g.)30
b(it)23 b(r)n(efers)g(to)g(a)f Fh(ConstantClass)d Fq(entry)k
(containing)g(a)f(sym-)0 3599 y(bolic)36 b(r)n(efer)n(ence)h(to)f(the)g
(class)g Fh(java.io.PrintStream)p Fq(.)60 b(T)-9 b(o)36
b(keep)f(the)h(class)g(\002le)g(compact,)0 3720 y(such)29
b(constants)i(ar)n(e)e(typically)h(shar)n(ed)f(by)g(dif)n(fer)n(ent)h
(instr)o(uctions.)45 b(Similarly)-11 b(,)30 b(a)f(\002eld)f(is)h(r)n
(epr)n(e-)0 3840 y(sented)23 b(by)g(a)f Fh(Fieldref)f
Fq(constant)k(that)e(includes)g(information)h(about)g(the)f(name,)f
(the)h(type)g(and)0 3961 y(the)i(containing)h(class)g(of)f(the)g
(\002eld.)146 4086 y(The)37 b(constant)i(pool)f(basically)g(holds)f
(the)h(following)g(types)g(of)g(constants:)57 b(Refer)n(ences)37
b(to)0 4206 y(methods,)25 b(\002elds)g(and)g(classes,)g(strings,)i
(integers,)f(\003oats,)f(longs,)h(and)e(doubles.)0 4540
y Fm(2.2)119 b(Byte)30 b(code)g(instruction)f(set)0 4741
y Fq(The)f(JVM)h(is)f(a)g(stack-oriented)i(interpr)n(eter)g(that)f(cr)n
(eates)g(a)f(local)g(stack)i(frame)e(of)h(\002xed)f(size)g(for)0
4861 y(every)21 b(method)f(invocation.)31 b(The)19 b(size)h(of)h(the)f
(local)h(stack)g(has)f(to)h(be)f(computed)g(by)h(the)f(compiler)-7
b(.)0 4981 y(V)e(alues)21 b(may)h(also)g(be)f(stor)n(ed)i
(intermediately)f(in)f(a)h(frame)f(ar)n(ea)h(containing)g
Fp(local)f(variables)g Fq(which)0 5102 y(can)28 b(be)g(used)g(like)h(a)
f(set)h(of)f(r)n(egisters.)43 b(These)28 b(local)g(variables)h(ar)n(e)f
(number)n(ed)h(fr)n(om)g(0)f(to)h(65535,)0 5222 y(i.e.)60
b(you)36 b(have)e(a)h(maximum)g(of)g(65536)f(of)h(local)g(variables.)61
b(The)34 b(stack)i(frames)f(of)g(caller)g(and)0 5342
y(callee)25 b(method)i(ar)n(e)f(overlapping,)h(i.e.)34
b(the)26 b(caller)g(pushes)g(ar)n(guments)h(onto)h(the)e(operand)g
(stack)0 5463 y(and)f(the)g(called)f(method)i(r)n(eceives)f(them)g(in)g
(local)g(variables.)1888 5712 y(5)p eop
%%Page: 6 6
6 5 bop 146 407 a Fq(The)32 b(byte)g(code)g(instr)o(uction)j(set)d
(curr)n(ently)i(consists)f(of)g(212)e(instr)o(uctions,)36
b(44)31 b(opcodes)i(ar)n(e)0 527 y(marked)g(as)g(r)n(eserved)g(and)g
(may)g(be)f(used)h(for)h(futur)n(e)g(extensions)g(or)g(intermediate)f
(optimiza-)0 648 y(tions)22 b(within)f(the)g(V)-5 b(irtual)21
b(Machine.)29 b(The)21 b(instr)o(uction)i(set)e(can)g(be)g(r)n(oughly)h
(gr)n(ouped)g(as)f(follows:)0 893 y Fg(Stack)k(operations:)49
b Fq(Constants)26 b(can)e(be)h(pushed)f(onto)i(the)f(stack)g(either)g
(by)g(loading)g(them)g(fr)n(om)244 1013 y(the)f(constant)h(pool)f(with)
h(the)e Fh(ldc)g Fq(instr)o(uction)j(or)f(with)f(special)g
(\223short-cut\224)h(instr)o(uctions)244 1134 y(wher)n(e)37
b(the)g(operand)f(is)h(encoded)g(into)g(the)g(instr)o(uctions,)43
b(e.g.)66 b Fh(iconst)p 3211 1134 30 4 v 34 w(0)37 b
Fq(or)g Fh(bipush)244 1254 y Fq(\(push)25 b(byte)h(value\).)0
1469 y Fg(Arithmetic)e(operations:)50 b Fq(The)36 b(instr)o(uction)k
(set)d(of)h(the)f(Java)h(V)-5 b(irtual)37 b(Machine)g(distinguishes)244
1590 y(its)24 b(operand)e(types)i(using)g(dif)n(fer)n(ent)g(instr)o
(uctions)h(to)f(operate)f(on)h(values)f(of)g(speci\002c)h(type.)244
1710 y(Arithmetic)32 b(operations)g(starting)i(with)d
Fh(i)p Fq(,)i(for)f(example,)h(denote)e(an)g(integer)h(operation.)244
1831 y(E.g.,)k Fh(iadd)e Fq(that)h(adds)f(two)h(integers)g(and)f
(pushes)g(the)g(r)n(esult)i(back)e(on)h(the)f(stack.)60
b(The)244 1951 y(Java)23 b(types)h Fh(boolean)p Fq(,)d
Fh(byte)p Fq(,)i Fh(short)p Fq(,)f(and)g Fh(char)g Fq(ar)n(e)h(handled)
f(as)h(integers)h(by)g(the)f(JVM.)0 2166 y Fg(Control)j(\003ow:)49
b Fq(Ther)n(e)40 b(ar)n(e)g(branch)h(instr)o(uctions)i(like)d
Fh(goto)g Fq(and)g Fh(if)p 2836 2166 V 35 w(icmpeq)p
Fq(,)j(which)d(com-)244 2287 y(par)n(es)32 b(two)h(integers)g(for)h
(equality)-11 b(.)52 b(Ther)n(e)33 b(is)f(also)h(a)f
Fh(jsr)f Fq(\(jump)i(sub-r)n(outine\))h(and)e Fh(ret)244
2407 y Fq(pair)26 b(of)i(instr)o(uctions)h(that)e(is)g(used)f(to)h
(implement)g(the)f Fh(finally)f Fq(clause)i(of)g Fh(try-catch)244
2528 y Fq(blocks.)32 b(Exceptions)26 b(may)f(be)g(thr)n(own)h(with)g
(the)f Fh(athrow)e Fq(instr)o(uction.)244 2696 y(Branch)30
b(tar)n(gets)i(ar)n(e)f(coded)f(as)h(of)n(fsets)h(fr)n(om)f(the)g(curr)
n(ent)g(byte)g(code)g(position,)i(i.e.)46 b(with)244
2816 y(an)25 b(integer)g(number)-7 b(.)0 3031 y Fg(Load)25
b(and)f(store)i(operations)49 b Fq(for)31 b(local)h(variables)f(like)f
Fh(iload)g Fq(and)g Fh(istore)p Fq(.)47 b(Ther)n(e)31
b(ar)n(e)g(also)244 3152 y(array)26 b(operations)g(like)f
Fh(iastore)e Fq(which)i(stor)n(es)i(an)d(integer)i(value)f(into)g(an)g
(array)-11 b(.)0 3367 y Fg(Field)25 b(access:)50 b Fq(The)24
b(value)g(of)h(an)f(instance)h(\002eld)f(may)g(be)g(r)n(etrieved)i
(with)e Fh(getfield)f Fq(and)h(writ-)244 3488 y(ten)d(with)g
Fh(putfield)p Fq(.)28 b(For)22 b(static)g(\002elds,)g(ther)n(e)g(ar)n
(e)f Fh(getstatic)e Fq(and)h Fh(putstatic)f Fq(coun-)244
3608 y(terparts.)0 3824 y Fg(Method)25 b(invocation:)50
b Fq(Methods)20 b(may)f(either)g(be)g(called)f(via)h(static)h(r)n(efer)
n(ences)g(with)f Fh(invokesta-)244 3944 y(tic)40 b Fq(or)i(be)f(bound)g
(virtually)i(with)e(the)g Fh(invokevirtual)e Fq(instr)o(uction.)81
b(Super)41 b(class)244 4064 y(methods)25 b(and)g(private)g(methods)h
(ar)n(e)f(invoked)h(with)f Fh(invokespecial)p Fq(.)0
4280 y Fg(Object)g(allocation:)50 b Fq(Class)28 b(instances)g(ar)n(e)g
(allocated)g(with)h(the)f Fh(new)f Fq(instr)o(uction,)k(arrays)e(of)f
(ba-)244 4400 y(sic)j(type)g(like)f Fh(int[])f Fq(with)i
Fh(newarray)p Fq(,)f(arrays)i(of)f(r)n(efer)n(ences)g(like)f
Fh(String[][])e Fq(with)244 4521 y Fh(anewarray)23 b
Fq(or)i Fh(multianewarray)p Fq(.)0 4736 y Fg(Conversion)h(and)e(type)h
(checking:)49 b Fq(For)23 b(stack)g(operands)g(of)f(basic)g(type)h
(ther)n(e)f(exist)h(casting)g(op-)244 4856 y(erations)35
b(like)e Fh(f2i)g Fq(which)i(converts)g(a)e(\003oat)h(value)g(into)h
(an)e(integer)-7 b(.)58 b(The)33 b(validity)i(of)f(a)244
4977 y(type)24 b(cast)h(may)f(be)f(checked)h(with)g Fh(checkcast)e
Fq(and)i(the)g Fh(instanceof)d Fq(operator)k(can)f(be)244
5097 y(dir)n(ectly)i(mapped)e(to)i(the)f(equally)g(named)f(instr)o
(uction.)146 5342 y(Most)38 b(instr)o(uctions)i(have)c(a)h(\002xed)g
(length,)j(but)d(ther)n(e)g(ar)n(e)g(also)g(some)g(variable-length)h
(in-)0 5463 y(str)o(uctions:)59 b(In)37 b(particular)-7
b(,)41 b(the)d Fh(lookupswitch)c Fq(and)j Fh(tableswitch)f
Fq(instr)o(uctions,)43 b(which)1888 5712 y(6)p eop
%%Page: 7 7
7 6 bop 0 407 a Fq(ar)n(e)31 b(used)f(to)h(implement)g
Fh(switch\(\))d Fq(statements.)49 b(Since)31 b(the)g(number)f(of)h
Fh(case)f Fq(clauses)h(may)0 527 y(vary)-11 b(,)26 b(these)f(instr)o
(uctions)i(contain)f(a)f(variable)g(number)g(of)g(statements.)146
648 y(W)-9 b(e)27 b(will)g(not)h(list)g(all)f(byte)h(code)g(instr)o
(uctions)i(her)n(e,)e(since)f(these)h(ar)n(e)f(explained)g(in)g(detail)
g(in)0 768 y(the)g(JVM)g(speci\002cation.)37 b(The)26
b(opcode)h(names)f(ar)n(e)h(mostly)h(self-explaining,)f(so)g
(understanding)0 888 y(the)e(following)h(code)g(examples)e(should)i(be)
e(fairly)i(intuitive.)0 1183 y Fm(2.3)119 b(Method)30
b(code)0 1373 y Fq(Non-abstract)35 b(methods)g(contain)f(an)g
(attribute)h(\()p Fh(Code)p Fq(\))e(that)h(holds)g(the)g(following)h
(data:)48 b(The)0 1493 y(maximum)27 b(size)f(of)h(the)f(method's)h
(stack)g(frame,)g(the)f(number)h(of)g(local)g(variables)f(and)g(an)g
(array)0 1614 y(of)i(byte)h(code)f(instr)o(uctions.)43
b(Optionally)-11 b(,)29 b(it)g(may)f(also)g(contain)h(information)g
(about)g(the)f(names)0 1734 y(of)d(local)h(variables)f(and)g(sour)n(ce)
h(\002le)f(line)f(numbers)i(that)f(can)g(be)g(used)g(by)g(a)g(debugger)
-7 b(.)146 1855 y(Whenever)23 b(an)h(exception)h(is)f(thr)n(own,)h(the)
f(JVM)g(performs)h(exception)f(handling)g(by)g(looking)0
1975 y(into)31 b(a)f(table)h(of)g(exception)g(handlers.)47
b(The)31 b(table)f(marks)h(handlers,)h(i.e.)47 b(pieces)30
b(of)h(code,)h(to)f(be)0 2095 y(r)n(esponsible)23 b(for)h(exceptions)f
(of)h(certain)f(types)g(that)g(ar)n(e)g(raised)g(within)g(a)f(given)h
(ar)n(ea)f(of)i(the)e(byte)0 2216 y(code.)63 b(When)35
b(ther)n(e)g(is)h(no)g(appr)n(opriate)g(handler)f(the)h(exception)g(is)
g(pr)n(opagated)g(back)g(to)h(the)0 2336 y(caller)29
b(of)h(the)f(method.)43 b(The)29 b(handler)g(information)h(is)f(itself)
h(stor)n(ed)g(in)f(an)g(attribute)i(contained)0 2456
y(within)25 b(the)h Fh(Code)e Fq(attribute.)0 2751 y
Fm(2.4)119 b(Byte)30 b(code)g(of)n(fsets)0 2941 y Fq(T)-9
b(ar)n(gets)32 b(of)g(branch)f(instr)o(uctions)j(like)d
Fh(goto)f Fq(ar)n(e)h(encoded)g(as)g(r)n(elative)h(of)n(fsets)g(in)f
(the)h(array)f(of)0 3062 y(byte)i(codes.)55 b(Exception)33
b(handlers)g(and)f(local)h(variables)g(r)n(efer)g(to)g(absolute)h(addr)
n(esses)e(within)0 3182 y(the)26 b(byte)g(code.)34 b(The)26
b(former)h(contains)f(r)n(efer)n(ences)h(to)g(the)f(start)h(and)e(the)h
(end)g(of)g(the)g Fh(try)f Fq(block,)0 3302 y(and)d(to)i(the)e(instr)o
(uction)j(handler)e(code.)30 b(The)22 b(latter)h(marks)h(the)e(range)h
(in)g(which)g(a)f(local)h(variable)0 3423 y(is)g(valid,)f(i.e.)30
b(its)23 b(scope.)30 b(This)23 b(makes)f(it)h(dif)n(\002cult)h(to)f
(insert)g(or)g(delete)f(code)g(ar)n(eas)h(on)f(this)h(level)f(of)0
3543 y(abstraction,)29 b(since)f(one)f(has)g(to)h(r)n(ecompute)g(the)f
(of)n(fsets)i(every)f(time)f(and)g(update)f(the)i(r)n(eferring)0
3663 y(objects.)k(W)-9 b(e)24 b(will)h(see)g(in)g(section)h(3.3)e(how)i
Fo(BCEL)i Fq(r)n(emedies)d(this)h(r)n(estriction.)0 3958
y Fm(2.5)119 b(T)-11 b(ype)30 b(information)0 4148 y
Fq(Java)k(is)h(a)f(type-safe)h(language)f(and)g(the)g(information)i
(about)f(the)f(types)h(of)g(\002elds,)i(local)d(vari-)0
4269 y(ables,)27 b(and)g(methods)g(is)g(stor)n(ed)h(in)f
Fp(signatur)n(es)p Fq(.)37 b(These)26 b(ar)n(e)h(strings)i(stor)n(ed)f
(in)f(the)g(constant)h(pool)0 4389 y(and)35 b(encoded)h(in)f(a)g
(special)h(format.)64 b(For)36 b(example)f(the)h(ar)n(gument)h(and)e(r)
n(eturn)h(types)h(of)f(the)0 4509 y Fh(main)24 b Fq(method)120
4688 y Fh(public)58 b(static)g(void)h(main\(String[])e(argv\))146
4866 y Fq(ar)n(e)25 b(r)n(epr)n(esented)h(by)f(the)g(signatur)n(e)120
5044 y Fh(\([java/lang/String;\)V)146 5222 y Fq(Classes)19
b(and)g(arrays)h(ar)n(e)f(internally)g(r)n(epr)n(esented)h(by)f
(strings)i(like)e Fh("java/lang/String")p Fq(,)0 5342
y(basic)k(types)g(like)g Fh(float)e Fq(by)i(an)f(integer)h(number)-7
b(.)30 b(W)-5 b(ithin)22 b(signatur)n(es)i(they)f(ar)n(e)g(r)n(epr)n
(esented)g(by)0 5463 y(single)i(characters,)h(e.g.,)f
Fh("I")p Fq(,)f(for)i(integer)-7 b(.)1888 5712 y(7)p
eop
%%Page: 8 8
8 7 bop 0 407 a Fm(2.6)119 b(Code)30 b(example)0 608
y Fq(The)25 b(following)i(example)e(pr)n(ogram)i(pr)n(ompts)g(for)f(a)f
(number)h(and)f(prints)h(the)g(faculty)g(of)g(it.)33
b(The)0 728 y Fh(readLine\(\))19 b Fq(method)i(r)n(eading)g(fr)n(om)h
(the)f(standar)n(d)h(input)f(may)g(raise)g(an)g Fh(IOException)d
Fq(and)0 849 y(if)h(a)g(misspelled)f(number)h(is)h(passed)e(to)i
Fh(parseInt\(\))d Fq(it)i(thr)n(ows)i(a)e Fh(NumberFormatException)p
Fq(.)0 969 y(Thus,)25 b(the)g(critical)h(ar)n(ea)f(of)h(code)f(must)g
(be)g(encapsulated)g(in)g(a)f Fh(try-catch)f Fq(block.)0
1230 y Ff(import)52 b(java.io.*;)0 1343 y(public)g(class)g(Faculty)f({)
109 1456 y(private)g(static)h(BufferedReader)c(in)54
b(=)g(new)f(BufferedReader\(n)o(ew)1745 1569 y(InputStreamReade)o(r\()o
(Sy)o(st)o(em.)o(in)o(\)\))o(;)109 1682 y(public)f(static)g(final)g
(int)h(fac\(int)f(n\))h({)218 1795 y(return)f(\(n)i(==)f(0\)?)g(1)i(:)f
(n)g(*)g(fac\(n)e(-)i(1\);)109 1907 y(})109 2020 y(public)e(static)g
(final)g(int)h(readInt\(\))e({)218 2133 y(int)i(n)h(=)h(4711;)218
2246 y(try)e({)327 2359 y(System.out.prin)o(t\(")o(Pl)o(ea)o(se)48
b(enter)k(a)i(number>)e("\);)327 2472 y(n)i(=)g(Integer.parseInt)o(\(i)
o(n.)o(re)o(adL)o(in)o(e\()o(\)\))o(;)218 2585 y(})g(catch\(IOExcepti)o
(on)48 b(e1\))53 b({)h(System.err.print)o(ln)o(\(e)o(1\))o(;)48
b(})327 2698 y(catch\(NumberFor)o(mat)o(Ex)o(ce)o(pt)o(io)o(n)h(e2\))k
({)h(System.err.pri)o(ntl)o(n\()o(e2)o(\);)48 b(})218
2811 y(return)k(n;)109 2924 y(})109 3037 y(public)g(static)g(void)g
(main\(String[])d(argv\))j({)218 3149 y(int)h(n)h(=)h(readInt\(\);)218
3262 y(System.out.prin)o(tl)o(n\(")o(Fa)o(cu)o(lt)o(y)48
b(of)54 b(")g(+)g(n)g(+)g(")h(is)e(")h(+)g(fac\(n\)\);)109
3375 y(}})146 3631 y Ft(This)23 b(code)f(example)g(typically)h
(compiles)g(to)f(the)g(following)h(chunks)e(of)i(byte)f(code:)0
3921 y Fg(2.6.1)99 b(Method)25 b(fac)0 4108 y Ff(0:)108
b(iload_0)0 4221 y(1:)g(ifne)653 b(#8)0 4334 y(4:)108
b(iconst_1)0 4447 y(5:)g(goto)653 b(#16)0 4560 y(8:)108
b(iload_0)0 4672 y(9:)g(iload_0)0 4785 y(10:)53 b(iconst_1)0
4898 y(11:)g(isub)0 5011 y(12:)g(invokestatic)213 b(Faculty.fac)49
b(\(I\)I)k(\(12\))0 5124 y(15:)g(imul)0 5237 y(16:)g(ireturn)0
5463 y(LocalVariable\(s)o(ta)o(rt)o(_p)o(c)c(=)54 b(0,)f(length)f(=)i
(16,)f(index)g(=)h(0:int)e(n\))1888 5712 y Fq(8)p eop
%%Page: 9 9
9 8 bop 146 407 a Ft(The)21 b(method)f Ff(fac)h Ft(has)g(only)g(one)g
(local)i(variable,)g(the)e(ar)n(gument)g Ff(n)p Ft(,)g(stor)n(ed)f(in)i
(slot)f(0.)28 b(This)21 b(variable's)0 520 y(scope)k(ranges)g(fr)n(om)h
(the)g(start)f(of)h(the)f(byte)g(code)g(sequence)g(to)g(the)g(very)h
(end.)37 b(If)26 b(the)f(value)i(of)f Ff(n)g Ft(\(stor)n(ed)0
633 y(in)i(local)h(variable)g(0,)g(i.e.)41 b(the)27 b(value)h(fetched)e
(with)i Ff(iload)p 2148 633 28 4 v 30 w(0)p Ft(\))f(is)h(not)e(equal)i
(to)f(0,)h(the)f Ff(ifne)e Ft(instr)o(uction)0 746 y(branches)20
b(to)f(the)g(byte)g(code)g(at)h(of)n(fset)f(8,)h(otherwise)e(a)j(1)f
(is)g(pushed)e(onto)g(the)h(operand)g(stack)g(and)h(the)f(con-)0
858 y(tr)n(ol)24 b(\003ow)h(branches)f(to)g(the)f(\002nal)i(r)n(eturn.)
33 b(For)23 b(ease)h(of)g(r)n(eading,)g(the)g(of)n(fsets)f(of)h(the)g
(branch)h(instr)o(uctions,)0 971 y(which)e(ar)n(e)g(actually)h(r)n
(elative,)f(ar)n(e)g(displayed)f(as)g(absolute)h(addr)n(esses)d(in)j
(these)e(examples.)146 1084 y(If)27 b(r)n(ecursion)f(has)g(to)g
(continue,)h(the)f(ar)n(guments)f(for)i(the)e(multiplication)j(\()p
Ff(n)f Ft(and)f Ff(fac\(n)53 b(-)h(1\))p Ft(\))26 b(ar)n(e)0
1197 y(evaluated)21 b(and)g(the)f(r)n(esults)g(pushed)f(onto)h(the)g
(operand)f(stack.)27 b(After)20 b(the)h(multiplication)h(operation)e
(has)0 1310 y(been)i(performed)f(the)h(function)h(r)n(eturns)e(the)h
(computed)f(value)i(fr)n(om)g(the)f(top)g(of)h(the)e(stack.)0
1569 y Fg(2.6.2)99 b(Method)25 b(readInt)0 1745 y Ff(0:)108
b(sipush)434 b(4711)0 1858 y(3:)108 b(istore_0)0 1971
y(4:)g(getstatic)269 b(java.lang.Syst)o(em.)o(ou)o(t)48
b(Ljava/io/PrintS)o(tre)o(am)o(;)0 2084 y(7:)108 b(ldc)599
b("Please)51 b(enter)h(a)j(number>)c(")0 2197 y(9:)108
b(invokevirtual)49 b(java.io.PrintS)o(tre)o(am)o(.p)o(ri)o(nt)f
(\(Ljava/lang/Str)o(in)o(g;)o(\)V)0 2310 y(12:)53 b(getstatic)269
b(Faculty.in)50 b(Ljava/io/Buffe)o(red)o(Re)o(ad)o(er)o(;)0
2423 y(15:)j(invokevirtual)c(java.io.Buffer)o(edR)o(ea)o(de)o(r.)o(re)o
(adL)o(in)o(e)f(\(\)Ljava/lang/St)o(rin)o(g;)0 2536 y(18:)53
b(invokestatic)104 b(java.lang.Inte)o(ger)o(.p)o(ar)o(se)o(In)o(t)49
b(\(Ljava/lang/St)o(ri)o(ng)o(;\))o(I)0 2649 y(21:)k(istore_0)0
2762 y(22:)g(goto)544 b(#44)0 2875 y(25:)53 b(astore_1)0
2987 y(26:)g(getstatic)269 b(java.lang.Syst)o(em.)o(er)o(r)48
b(Ljava/io/PrintS)o(tre)o(am)o(;)0 3100 y(29:)53 b(aload_1)0
3213 y(30:)g(invokevirtual)c(java.io.PrintS)o(tre)o(am)o(.p)o(ri)o(nt)o
(ln)f(\(Ljava/lang/Obj)o(ec)o(t;)o(\)V)0 3326 y(33:)53
b(goto)544 b(#44)0 3439 y(36:)53 b(astore_1)0 3552 y(37:)g(getstatic)
269 b(java.lang.Syst)o(em.)o(er)o(r)48 b(Ljava/io/PrintS)o(tre)o(am)o
(;)0 3665 y(40:)53 b(aload_1)0 3778 y(41:)g(invokevirtual)c
(java.io.PrintS)o(tre)o(am)o(.p)o(ri)o(nt)o(ln)f(\(Ljava/lang/Obj)o(ec)
o(t;)o(\)V)0 3891 y(44:)53 b(iload_0)0 4004 y(45:)g(ireturn)0
4229 y(Exception)d(handler\(s\))g(=)0 4342 y(From)216
b(To)327 b(Handler)51 b(Type)0 4455 y(4)381 b(22)327
b(25)f(java.io.IOExcep)o(ti)o(on)o(\(6\))0 4568 y(4)381
b(22)327 b(36)f(NumberFormatExc)o(ep)o(ti)o(on\()o(10)o(\))146
4785 y Ft(First)34 b(the)g(local)j(variable)f Ff(n)f
Ft(\(in)g(slot)g(0\))g(is)g(initialized)i(to)d(the)g(value)h(4711.)67
b(The)34 b(next)g(instr)o(uction,)0 4898 y Ff(getstatic)p
Ft(,)f(loads)i(the)f(static)g Ff(System.out)d Ft(\002eld)j(onto)f(the)h
(stack.)64 b(Then)34 b(a)h(string)e(is)i(loaded)f(and)0
5011 y(printed,)21 b(a)i(number)g(r)n(ead)f(fr)n(om)h(the)f(standar)n
(d)g(input)h(and)f(assigned)f(to)h Ff(n)p Ft(.)146 5124
y(If)g(one)f(of)h(the)f(called)h(methods)e(\()p Ff(readLine\(\))e
Ft(and)k Ff(parseInt\(\))p Ft(\))17 b(thr)n(ows)k(an)h(exception,)f
(the)f(Java)0 5237 y(V)-5 b(irtual)26 b(Machine)h(calls)h(one)d(of)h
(the)f(declar)n(ed)h(exception)f(handlers,)h(depending)e(on)h(the)g
(type)g(of)h(the)f(ex-)0 5350 y(ception.)36 b(The)24
b Ff(try)p Ft(-clause)h(itself)h(does)e(not)g(pr)n(oduce)h(any)g(code,)
g(it)h(mer)n(ely)f(de\002nes)f(the)h(range)g(in)h(which)0
5463 y(the)e(following)h(handlers)f(ar)n(e)h(active.)35
b(In)24 b(the)g(example)g(the)g(speci\002ed)g(sour)n(ce)g(code)g(ar)n
(ea)h(maps)g(to)f(a)h(byte)1888 5712 y Fq(9)p eop
%%Page: 10 10
10 9 bop 0 407 a Ft(code)23 b(ar)n(ea)h(ranging)f(fr)n(om)h(of)n(fset)f
(4)h(\(inclusive\))h(to)e(22)h(\(exclusive\).)31 b(If)24
b(no)f(exception)f(has)h(occurr)n(ed)g(\(\223nor)n(-)0
520 y(mal\224)i(execution)e(\003ow\))h(the)f Ff(goto)f
Ft(instr)o(uctions)h(branch)i(behind)e(the)g(handler)g(code.)31
b(Ther)n(e)23 b(the)g(value)h(of)0 633 y Ff(n)e Ft(is)h(loaded)f(and)h
(r)n(eturned.)146 750 y(For)e(example)g(the)f(handler)h(for)g
Ff(java.io.IOExcep)o(ti)o(on)15 b Ft(starts)20 b(at)h(of)n(fset)g(25.)
28 b(It)20 b(simply)i(prints)e(the)0 863 y(err)n(or)i(and)h(branches)f
(back)i(to)e(the)f(normal)j(execution)d(\003ow)-8 b(,)22
b(i.e.)28 b(as)23 b(if)g(no)f(exception)g(had)g(occurr)n(ed.)0
1223 y Fr(3)143 b(The)35 b(BCEL)g(API)0 1443 y Ft(The)25
b Fe(BCEL)j Ft(API)d(abstracts)h(fr)n(om)g(the)f(concr)n(ete)h(cir)n
(cumstances)g(of)g(the)f(Java)j(V)-5 b(irtual)26 b(Machine)h(and)f(how)
0 1556 y(to)c(r)n(ead)h(and)f(write)g(binary)i(Java)g(class)f(\002les.)
k(The)22 b(API)g(mainly)i(consists)d(of)i(thr)n(ee)f(parts:)127
1795 y(1.)49 b(A)26 b(package)f(that)h(contains)g(classes)g(that)g
(describe)f(\223static\224)i(constraints)e(of)h(class)h(\002les,)f
(i.e.,)g(r)n(e\003ect)244 1908 y(the)g(class)h(\002le)f(format)h(and)g
(is)f(not)g(intended)f(for)h(byte)g(code)g(modi\002cations.)39
b(The)26 b(classes)g(may)h(be)244 2021 y(used)e(to)h(r)n(ead)g(and)h
(write)f(class)g(\002les)h(fr)n(om)g(or)f(to)g(a)h(\002le.)39
b(This)26 b(is)h(useful)f(especially)g(for)h(analyzing)244
2134 y(Java)34 b(classes)f(without)e(having)j(the)e(sour)n(ce)g
(\002les)g(at)h(hand.)59 b(The)32 b(main)i(data)f(str)o(uctur)n(e)e(is)
i(called)244 2247 y Ff(JavaClass)19 b Ft(which)k(contains)f(methods,)f
(\002elds,)g(etc..)127 2453 y(2.)49 b(A)23 b(package)h(to)f
(dynamically)i(generate)d(or)h(modify)h Ff(JavaClass)19
b Ft(objects.)31 b(It)23 b(may)h(be)g(used)e(e.g.)30
b(to)244 2565 y(insert)20 b(analysis)i(code,)e(to)h(strip)g
(unnecessary)e(information)j(fr)n(om)g(class)f(\002les,)g(or)g(to)g
(implement)g(the)244 2678 y(code)h(generator)f(back-end)h(of)h(a)g
(Java)h(compiler)-7 b(.)127 2884 y(3.)49 b(V)-8 b(arious)21
b(code)g(examples)h(and)g(utilities)g(like)g(a)h(class)f(\002le)g
(viewer)-7 b(,)22 b(a)h(tool)e(to)h(convert)f(class)i(\002les)e(into)
244 2997 y(HTML,)g(and)i(a)g(converter)f(fr)n(om)h(class)g(\002les)f
(to)g(the)g(Jasmin)i(assembly)e(language)g([MD97)r(].)0
3313 y Fm(3.1)119 b(JavaClass)0 3499 y Ft(The)16 b(\223static\224)j
(component)d(of)h(the)f Fe(BCEL)i Ft(API)e(r)n(esides)g(in)i(the)e
(package)h Ff(de.fub.bytecode)o(.c)o(la)o(ss)o(fi)o(le)0
3612 y Ft(and)22 b(r)n(epr)n(esents)e(class)i(\002les.)27
b(All)c(of)f(the)f(binary)i(components)d(and)i(data)g(str)o(uctur)n(es)
f(declar)n(ed)g(in)i(the)e(JVM)0 3725 y(speci\002cation)27
b([L)-8 b(Y97])26 b(and)h(described)e(in)i(section)e(2)i(ar)n(e)g
(mapped)f(to)g(classes.)38 b(Figur)n(e)26 b(3)h(shows)e(an)i(UML)0
3837 y(diagram)34 b(of)f(the)g(hierar)n(chy)g(of)h(classes)f(of)g(the)f
Fe(BCEL)k Ft(API.)c(Figur)n(e)h(8)h(in)f(the)g(appendix)f(also)i(shows)
e(a)0 3950 y(detailed)22 b(diagram)h(of)g(the)f Ff(ConstantPool)17
b Ft(components.)146 4068 y(The)23 b(top-level)g(data)g(str)o(uctur)n
(e)g(is)g Ff(JavaClass)p Ft(,)c(which)24 b(in)g(most)f(cases)g(is)g(cr)
n(eated)g(by)g(a)h Ff(ClassPar-)0 4181 y(ser)d Ft(object)g(that)h(is)g
(capable)h(of)f(parsing)f(binary)i(class)f(\002les.)27
b(A)22 b Ff(JavaClass)c Ft(object)k(basically)h(consists)e(of)0
4294 y(\002elds,)h(methods,)e(symbolic)j(r)n(efer)n(ences)f(to)g(the)g
(super)f(class)i(and)g(to)f(the)f(implemented)h(interfaces.)146
4411 y(The)c(constant)f(pool)g(serves)g(as)h(some)f(kind)g(of)h
(central)h(r)n(epository)c(and)j(is)g(thus)f(of)h(outstanding)e(impor)n
(-)0 4524 y(tance)29 b(for)g(all)h(components.)45 b Ff(ConstantPool)24
b Ft(objects)k(contain)i(an)f(array)h(of)f(\002xed)f(size)h(of)g
Ff(Constant)0 4637 y Ft(entries,)34 b(which)g(may)f(be)g(r)n(etrieved)f
(via)i(the)f Ff(getConstant\(\))27 b Ft(method)32 b(taking)g(an)i
(integer)d(index)i(as)0 4750 y(ar)n(gument.)58 b(Indexes)31
b(to)h(the)h(constant)f(pool)g(may)h(be)g(contained)g(in)g(instr)o
(uctions)f(as)i(well)f(as)g(in)g(other)0 4863 y(components)21
b(of)h(a)i(class)f(\002le)f(and)h(in)g(constant)f(pool)g(entries)f
(themselves.)146 4980 y(Methods)j(and)i(\002elds)f(contain)h(a)g
(signatur)n(e,)g(symbolically)h(de\002ning)e(their)g(types.)35
b(Access)25 b(\003ags)h(like)0 5093 y Ff(public)52 b(static)g(final)26
b Ft(occur)i(in)h(several)f(places)h(and)f(ar)n(e)h(encoded)d(by)j(an)f
(integer)f(bit)i(mask,)g(e.g.)0 5206 y Ff(public)52 b(static)g(final)20
b Ft(matches)j(to)f(the)f(Java)k(expr)n(ession)109 5463
y Ff(int)53 b(access_flags)c(=)54 b(ACC_PUBLIC)c(|)55
b(ACC_STATIC)50 b(|)k(ACC_FINAL;)1863 5712 y Fq(10)p
eop
%%Page: 11 11
11 10 bop 570 5113 a @beginspecial 13 @llx 12 @lly 471
@urx 830 @ury 3221 @rwi @setspecial
%%BeginDocument: eps/javaclass.eps
%!PS-Adobe-3.0 EPSF-3.0
%%Title: Rose Diagram(s)
%%Creator: AdobePS5.dll Version 5.0
%%CreationDate: 7/7/1999 17:45:7
%%Pages: 1
%%Orientation: Portrait
%%PageOrder: Ascend
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources: (atend)
%%DocumentData: Clean7Bit
%%TargetDevice: (HP LaserJet 5Si) (2014.108) 1
%%LanguageLevel: 2
%%BoundingBox: 13 12 471 830
%%EndComments
%%BeginProcSet: epsffit 1 0
gsave
1233.763 -187.599 translate
90 rotate
1.782 1.782 scale
%%EndProcSet
%%BeginDefaults
%%PageBoundingBox: 13 12 582 830
%%EndDefaults
%%BeginProlog
%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0
/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
ne{grestoreall}if showpage initgraphics courier setfont lmargin 720 moveto
(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt
$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}
repeat}if systemdict/showpage get exec(%%[ Error: )print errorname =print
(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end end}dup
0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking where{pop
/setpacking where{pop oldpack setpacking}if}if
%%EndResource
userdict /Pscript_WinNT_Incr 230 dict dup begin put
%%BeginResource: file Pscript_FatalError 5.0 0
/FatalErrorIf{{initgraphics findfont exch scalefont setfont counttomark 3 div
cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def
%%EndResource
/VM?{vmstatus exch sub exch pop gt{[
(This job requires more memory than is available in this printer.)100 500
(Try one or more of the following, and then print again:)100 485
(For the output format, choose Optimize For Portability.)115 470
(In the Device Settings page, make sure the Available PostScript Memory is accurate.)
115 455(Reduce the number of fonts in the document.)115 440
(Print the document in parts.)115 425 12/Times-Roman showpage
(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def
%%BeginResource: file Pscript_Win_Basic 5.0 0
/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
, d/K/stroke , d/W/widthshow , d/R/rotate , d/P/eoclip , d/L2? false
/languagelevel where{pop languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d
/yS/yshow , d/zS/xyshow , d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{,
d}bd/lw/Lw ld/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx
matrix currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit
/UtilsInit counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}
b/initialize{`{/ADO_mxRot ~ d/TextInitialised? F d reinitialize E}{U
/Pscript_Win_Data 230 dict @ ` put/ADO_mxRot ~ d/TextInitialised? F d
reinitialize}?}b/terminate{!{& self eq{exit}{E}?}loop E}b/suspend/terminate , d
/resume{` Pscript_Win_Data `}b/snap{transform 0.25 sub round 0.25 add ~ 0.25
sub round 0.25 add ~ itransform}b/dsnap{dtransform round ~ round ~ idtransform}
b<04>cvn{}d/rr{1 ^ 0 - 0 ~ - neg 0 - C}b/rp{4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b
/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool 2 ^ put}b
/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e{DefIf_El !}
b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
%%EndResource
%%BeginResource: file Pscript_Win_Utils_L2 5.0 0
/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge
{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F
setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d
/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b
%%EndResource
end
%%EndProlog
%%BeginSetup
[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
1 setlinecap 1 setlinejoin
/mysetup [ 0.24 0 0 -0.24 13.43905 829.74047 ] def
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 13 12 582 830
%%EndPageComments
%%BeginPageSetup
/DeviceRGB dup setcolorspace /colspABC exch def mysetup concat colspRefresh
%%EndPageSetup
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Win_GdiObject 5.0 0
/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
/HS_DiagCross makehatch}b/GDIBWPatternDict 25 dict @ `/PatternType 1 d
/PaintType L2?{1}{2}? d/RepsV L2?{1}{6}? d/RepsH L2?{1}{5}? d/BBox[0 0 RepsH 1]
d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d/Width 8 d/mx[Width 0
0 Height neg 0 Height]d/FGnd null d/BGnd null d/SetBGndFGnd L2?{{FGnd null ne
{FGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~ rf}if BGnd null ne{BGnd
aload ! scol}if}}{{}}? b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx
PaintData imagemask Width 0 +}repeat E}b E d/GDIBWPatternMx null d/pfprep{save
8 1 $/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/yExt ~ d/Width ~ d/FGnd ~ d/BGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0
Height 0 0]d E : GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx
matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix GDIBWPatternDict @ `
xOrg yOrg E matrix + mp CTMrestore ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill
{O}{L}? restore}b/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot
concat 0 0 snap + : 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ dsnap
YStep V ~ XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24
-0.24 +S GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx matrix
currentmatrix readonly d ; ;}if}b
%%EndResource
%%BeginResource: file Pscript_Win_GdiObject_L2 5.0 0
/mp/makepattern , d/hbf{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}
{L}? ;}b/pbf{: !/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/OutputBPP ~ d/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1
d/BBox[0 0 Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d
20 dict @ `/ImageType 1 d/Width Width d/Height Height d/ImageMatrix mx d
/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{
/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict
~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}
? ;}b
%%EndResource
end reinitialize
: N 712 1406 246 93 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol 1 Lw N 958 1405 M 711 1405 I 711 1499 I 958 1499 I C
K
0 0 0 1 scol Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Text 5.0 0
/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
{T pd_AddEm87 ~ !}{! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @
length array copy put pd_CoverFCRange}if}{!}?}? 2 ^ ~ definefont fM 5 4 -1 $
put fM 4 0 put fM makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M
currentpoint snap M 0 - 0 Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d
/ySP null d/sW null d/sSU{N/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N
/sW ~ d/ySP ~ d/xSP ~ d}b/sT{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix
astore concat 0 0 M}b/eR/; , d/AddOrigFP{{&/FontInfo known{&/FontInfo get
length 6 add}{6}? dict `/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d
/OrigFontStyle ~ d/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS
{makefont Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2
copy ~ sub 1 add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for
& E/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}bind d/mF42{15 dict ` @
4 1 $/FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254
add 255 idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for
/FDepVector Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1
Encoding length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName
length 2 add string}{FontName length 3 add string}?}? @ 0 FontName @ length
string cvs putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~
putinterval cvn 1 ^ 256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1
$ put}for & @ E/FontName get ~ definefont ! ! ! mF}b/UmF{L2?
{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
get undefinefont}forall undefinefont}b
%%EndResource
end reinitialize
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Encoding256 5.0 0
/CharCol256Encoding[/.notdef/breve/caron/dotaccent/dotlessi/fi/fl/fraction
/hungarumlaut/Lslash/lslash/minus/ogonek/ring/Zcaron/zcaron/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/exclam/quotedbl/numbersign
/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S
/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave
/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright
/asciitilde/.notdef/.notdef/.notdef/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef
/.notdef/.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet
/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef
/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/.notdef/registered
/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis
/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis]def EncodeDict/256 CharCol256Encoding put
%%EndResource
end reinitialize
%%IncludeResource: font Helvetica
F /F0 0 /256 T /Helvetica mF
/F0S1C F0 [28.75 0 0 -28.75 0 0 ] mFS
F0S1C Ji
735 1441 M (ExceptionTable)[19 13 15 16 16 8 7 16 16 19 16 16 7 0]xS
0.602 0 0.199 1 scol N 958 1456 M 711 1456 I 711 1499 I 958 1499 I C
K
N 958 1473 M 711 1473 I 711 1499 I 958 1499 I C
K
: N 1484 1418 275 93 rp C
1 1 0.801 1 scol L ; N 1759 1417 M 1483 1417 I 1483 1511 I 1759 1511 I C
K
0 0 0 1 scol 1505 1453 M (LineNumberTable)[16 7 16 16 21 16 25 16 16 10 19 16 16 7 0]xS
0.602 0 0.199 1 scol N 1759 1469 M 1483 1469 I 1483 1511 I 1759 1511 I C
K
N 1759 1485 M 1483 1485 I 1483 1511 I 1759 1511 I C
K
: N 1039 1411 318 253 rp C
1 1 0.801 1 scol L ; N 1357 1410 M 1038 1410 I 1038 1664 I 1357 1664 I C
K
0 0 0 1 scol 1163 1446 M (Code)[21 16 16 0]xS
0.602 0 0.199 1 scol N 1357 1462 M 1038 1462 I 1038 1664 I 1357 1664 I C
K
N 1357 1578 M 1038 1578 I 1038 1664 I 1357 1664 I C
K
0 0 0 1 scol 1083 1493 M (max_stack : int)[25 16 13 16 15 8 16 15 14 8 8 8 7 16 0]xS
1083 1527 M (max_locals : int)[25 16 13 16 7 16 15 16 7 15 8 8 8 7 16 0]xS
1083 1560 M (exception_handlers)[16 13 15 16 16 8 7 16 16 16 16 16 16 16 7 16 10 0]xS
1083 1626 M (getCode\(\))[16 16 8 21 16 16 16 10 0]xS
0.602 0 0.199 1 scol N 1420 1499 M 1358 1508 I K
N 1358 1508 M 1380 1516 I 1398 1502 I 1377 1494 I 1358 1508 I C
: 1 1 1 1 scol O ; K
N 1420 1499 M 1482 1487 I K
N 1462 1432 16 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 1462 1459 M (1)S
N 1462 1432 16 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 1462 1459 M (1)S
: N 1742 1576 291 93 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 2033 1575 M 1741 1575 I 1741 1669 I 2033 1669 I C
K
0 0 0 1 scol 1762 1611 M (LocalVariableTable)[16 16 15 16 7 19 16 10 7 16 16 7 16 19 16 16 7 0]xS
0.602 0 0.199 1 scol N 2033 1626 M 1741 1626 I 1741 1669 I 2033 1669 I C
K
N 2033 1643 M 1741 1643 I 1741 1669 I 2033 1669 I C
K
N 1549 1580 M 1358 1556 I K
N 1358 1556 M 1380 1547 I 1398 1562 I 1377 1570 I 1358 1556 I C
: 1 1 1 1 scol O ; K
N 1549 1580 M 1740 1603 I K
: N 1709 1625 15 34 rp C
1 1 1 1 scol L ; N 1709 1625 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1709 1652 M (1)S
: N 1709 1625 15 34 rp C
1 1 1 1 scol L ; N 1709 1625 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1709 1652 M (1)S
: N 1573 1128 218 93 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1791 1127 M 1572 1127 I 1572 1221 I 1791 1221 I C
K
0 0 0 1 scol 1597 1163 M (InnerClasses)[7 16 16 16 10 21 7 16 15 15 16 0]xS
0.602 0 0.199 1 scol N 1791 1178 M 1572 1178 I 1572 1221 I 1791 1221 I C
K
N 1791 1195 M 1572 1195 I 1572 1221 I 1791 1221 I C
K
: N 1855 1128 186 93 rp C
1 1 0.801 1 scol L ; N 2041 1127 M 1854 1127 I 1854 1221 I 2041 1221 I C
K
0 0 0 1 scol 1878 1163 M (SourceFile)[19 16 16 10 15 16 18 7 7 0]xS
0.602 0 0.199 1 scol N 2041 1178 M 1854 1178 I 1854 1221 I 2041 1221 I C
K
N 2041 1195 M 1854 1195 I 1854 1221 I 2041 1221 I C
K
: N 450 1406 190 93 rp C
1 1 0.801 1 scol L ; N 640 1405 M 449 1405 I 449 1499 I 640 1499 I C
K
0 0 0 1 scol 470 1441 M (Deprecated)[21 16 16 10 16 15 16 8 16 0]xS
0.602 0 0.199 1 scol N 640 1456 M 449 1456 I 449 1499 I 640 1499 I C
K
N 640 1473 M 449 1473 I 449 1499 I 640 1499 I C
K
: N 2049 1418 161 93 rp C
1 1 0.801 1 scol L ; N 2210 1417 M 2048 1417 I 2048 1511 I 2210 1511 I C
K
0 0 0 1 scol 2069 1453 M (Unknown)[21 16 14 16 16 21 0]xS
0.602 0 0.199 1 scol N 2210 1469 M 2048 1469 I 2048 1511 I 2210 1511 I C
K
N 2210 1485 M 2048 1485 I 2048 1511 I 2210 1511 I C
K
: N 2105 1128 171 93 rp C
1 1 0.801 1 scol L ; N 2276 1127 M 2104 1127 I 2104 1221 I 2276 1221 I C
K
0 0 0 1 scol 2131 1163 M (Synthetic)[19 13 16 8 16 16 8 7 0]xS
0.602 0 0.199 1 scol N 2276 1178 M 2104 1178 I 2104 1221 I 2276 1221 I C
K
N 2276 1195 M 2104 1195 I 2104 1221 I 2276 1221 I C
K
: N 521 1128 240 93 rp C
1 1 0.801 1 scol L ; N 761 1127 M 520 1127 I 520 1221 I 761 1221 I C
K
0 0 0 1 scol 546 1163 M (ConstantValue)[21 16 16 15 8 16 16 8 19 16 7 16 0]xS
0.602 0 0.199 1 scol N 761 1177 M 520 1177 I 520 1221 I 761 1221 I C
K
N 761 1193 M 520 1193 I 520 1221 I 761 1221 I C
K
: N 491 628 204 125 rp C
1 1 0.801 1 scol L ; N 695 627 M 490 627 I 490 753 I 695 753 I C
K
0.496 0.496 0.496 1 scol 1 Lj 1 Lc 12 Lw solid N 495 748 M 691 748 I 691 632 I : 0.754 0.754 +S K
; 0 0 0 1 scol 513 663 M (ClassParser)[21 7 16 15 15 19 16 10 15 16 0]xS
0.602 0 0.199 1 scol 1 Lw solid N 695 676 M 490 676 I 490 753 I 695 753 I C
K
N 695 693 M 490 693 I 490 753 I 695 753 I C
K
0 0 0 1 scol 535 741 M (parse\(\))[16 16 10 15 16 10 0]xS
: N 1168 1116 157 93 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1325 1115 M 1167 1115 I 1167 1209 I 1325 1209 I C
K
0 0 0 1 scol 1192 1151 M (Attribute)[19 8 8 10 7 16 16 8 0]xS
0.602 0 0.199 1 scol N 1325 1164 M 1167 1164 I 1167 1209 I 1325 1209 I C
K
N 1325 1181 M 1167 1181 I 1167 1209 I 1325 1209 I C
K
N 1225 1279 M 1225 1210 I K
N 528 1279 M 2187 1279 I K
N 1225 1210 M 1242 1255 I 1209 1255 I C
: 1 1 1 1 scol O ; K
N 1190 1410 M 1190 1279 I K
N 1091 1329 276 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1091 1356 M (<<Method attribute>>)[17 17 23 16 8 16 16 16 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 1602 1417 M 1602 1279 I K
N 1479 1381 251 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1479 1408 M (<<Code attribute>>)[17 17 21 16 16 16 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 1941 1222 M 1941 1279 I K
N 1823 1234 255 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1823 1261 M (<<Class attribute>>)[17 17 21 7 16 15 15 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 840 1405 M 840 1279 I K
N 728 1326 276 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 728 1353 M (<<Method attribute>>)[17 17 23 16 8 16 16 16 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 2132 1417 M 2132 1279 I K
N 528 1405 M 528 1279 I K
N 416 1326 276 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 416 1353 M (<<Method attribute>>)[17 17 23 16 8 16 16 16 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 1870 1575 M 1870 1279 I K
N 1748 1523 250 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1748 1550 M (<<Code attribute>>)[17 17 21 16 16 16 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 1673 1222 M 1673 1279 I K
N 1541 1234 255 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1541 1261 M (<<Class attribute>>)[17 17 21 7 16 15 15 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 2187 1222 M 2187 1279 I K
N 2068 1234 255 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 2068 1261 M (<<Class attribute>>)[17 17 21 7 16 15 15 8 16 8 8 10 7 16 16 8 16 17 0]xS
0.602 0 0.199 1 scol N 638 1222 M 638 1279 I K
N 536 1233 245 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 536 1260 M (<<Field attribute>>)[17 17 18 7 16 7 16 8 16 8 8 10 7 16 16 8 16 17 0]xS
: N 1130 845 233 126 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1363 844 M 1129 844 I 1129 971 I 1363 971 I C
K
0 0 0 1 scol
%%IncludeResource: font Helvetica-Oblique
F /F1 0 /256 T /Helvetica-Oblique mF
/F1S1C F1 [28.75 0 0 -28.75 0 0 ] mFS
F1S1C Ji
1150 880 M (FieldOrMethod)[18 7 16 7 16 23 10 24 16 8 16 16 0]xS
0.602 0 0.199 1 scol N 1363 894 M 1129 894 I 1129 971 I 1363 971 I C
K
N 1363 911 M 1129 911 I 1129 971 I 1363 971 I C
K
0 0 0 1 scol 1174 960 M (getName\(\))[16 16 8 21 16 24 16 10 0]xS
: N 571 845 214 126 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 785 844 M 570 844 I 570 971 I 785 971 I C
K
0 0 0 1 scol 594 880 M (AccessFlags)[19 15 15 16 15 15 18 7 16 16 0]xS
0.602 0 0.199 1 scol N 785 894 M 570 894 I 570 971 I 785 971 I C
K
N 785 911 M 570 911 I 570 971 I 785 971 I C
K
0 0 0 1 scol 614 960 M (isPublic\(\))[7 15 19 16 16 7 7 15 10 0]xS
0.602 0 0.199 1 scol N 1128 908 M 786 908 I K
N 786 908 M 831 925 I 831 891 I C
: 1 1 1 1 scol O ; K
N 1237 1043 M 1237 972 I K
N 992 1043 M 1497 1043 I K
N 1237 972 M 1253 1017 I 1220 1017 I C
: 1 1 1 1 scol O ; K
: N 1494 1023 134 84 rp C
1 1 0.801 1 scol L ; N 1628 1022 M 1493 1022 I 1493 1107 I 1628 1107 I C
K
0 0 0 1 scol F0S1C Ji
1513 1058 M (Method)[23 16 8 16 16 0]xS
0.602 0 0.199 1 scol N 1628 1074 M 1493 1074 I 1493 1107 I 1628 1107 I C
K
N 1628 1090 M 1493 1090 I 1493 1107 I 1628 1107 I C
K
N 1409 1111 M 1492 1085 I K
N 1488 1110 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1488 1137 M (1)S
0.602 0 0.199 1 scol N 1492 1085 M 1476 1102 I 1454 1097 I 1470 1080 I 1492 1085 I C
: 1 1 1 1 scol O ; K
N 1409 1111 M 1326 1136 I K
N 1341 1157 11 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1341 1184 M (*)S
N 1488 1110 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1488 1137 M (1)S
N 1341 1157 11 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1341 1184 M (*)S
0.602 0 0.199 1 scol N 1497 1028 M 1497 1043 I K
: N 1734 802 235 139 rp C
1 1 0.801 1 scol L ; N 1969 801 M 1733 801 I 1733 941 I 1969 941 I C
K
0 0 0 1 scol 1764 837 M (ConstantPool)[21 16 16 15 8 16 16 8 19 16 16 0]xS
0.602 0 0.199 1 scol N 1969 853 M 1733 853 I 1733 941 I 1969 941 I C
K
N 1969 869 M 1733 869 I 1733 941 I 1969 941 I C
K
0 0 0 1 scol 1777 918 M (getConstant\(\))[16 16 8 21 16 16 15 8 16 16 8 10 0]xS
: N 1088 610 317 160 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1405 609 M 1087 609 I 1087 770 I 1405 770 I C
K
0 0 0 1 scol 1179 645 M (JavaClass)[15 16 13 16 21 7 16 15 0]xS
0.602 0 0.199 1 scol N 1405 659 M 1087 659 I 1087 770 I 1405 770 I C
K
N 1405 676 M 1087 676 I 1087 770 I 1405 770 I C
K
0 0 0 1 scol 1131 724 M (getInterfaceNames\(\))[16 16 8 7 16 8 16 10 8 16 15 16 21 16 25 16 15 10 0]xS
1131 757 M (getSuperclassName\(\))[16 16 8 19 16 16 16 10 15 7 16 15 15 21 16 25 16 10 0]xS
0.602 0 0.199 1 scol N 1419 896 M 1314 771 I K
N 1287 794 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1287 821 M (1)S
0.602 0 0.199 1 scol N 1314 771 M 1336 779 I 1340 802 I 1318 794 I 1314 771 I C
: 1 1 1 1 scol O ; K
N 1419 896 M 1524 1021 I K
N 1539 966 11 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 1539 993 M (*)S
N 1287 794 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1287 821 M (1)S
N 1539 966 11 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 1539 993 M (*)S
1 1 1 1 scol [ 72 24 ] 0 sd N 696 690 M 1086 690 I K
0 0 0 1 scol [ 72 24 ] 0 sd N 696 690 M 1086 690 I K
3 Lw solid N 1086 690 M 1059 701 I : 0.754 0.754 +S K
; N 1086 690 M 1059 679 I : 0.754 0.754 +S K
; N 847 641 164 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 847 668 M (<<creates>>)[17 17 15 10 16 16 8 16 15 17 0]xS
0.602 0 0.199 1 scol 1 Lw solid N 1569 786 M 1406 737 I K
N 1569 786 M 1732 835 I K
N 1086 751 M 786 866 I K
N 786 866 M 834 866 I 822 834 I C
: 1 1 1 1 scol O ; K
: N 865 1023 134 84 rp C
1 1 0.801 1 scol L ; N 999 1022 M 864 1022 I 864 1107 I 999 1107 I C
K
0 0 0 1 scol 899 1058 M (Field)[18 7 16 7 0]xS
0.602 0 0.199 1 scol N 999 1072 M 864 1072 I 864 1107 I 999 1107 I C
K
N 999 1089 M 864 1089 I 864 1107 I 999 1107 I C
K
N 1083 1111 M 1000 1086 I K
N 990 1111 16 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 990 1138 M (1)S
0.602 0 0.199 1 scol N 1000 1086 M 1023 1081 I 1039 1098 I 1017 1102 I 1000 1086 I C
: 1 1 1 1 scol O ; K
N 1083 1111 M 1166 1136 I K
N 1165 1079 11 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1165 1106 M (*)S
N 990 1111 16 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 990 1138 M (1)S
N 1165 1079 11 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1165 1106 M (*)S
0.602 0 0.199 1 scol N 992 1067 M 992 1043 I K
N 1072 896 M 1177 771 I K
N 1190 794 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1190 821 M (1)S
0.602 0 0.199 1 scol N 1177 771 M 1173 794 I 1150 802 I 1155 779 I 1177 771 I C
: 1 1 1 1 scol O ; K
N 1072 896 M 967 1021 I K
N 1004 1018 11 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 1004 1045 M (*)S
N 1190 794 16 33 rp C
1 1 1 1 scol L 0 0 0 1 scol 1190 821 M (1)S
N 1004 1018 11 34 rp C
1 1 1 1 scol L 0 0 0 1 scol 1004 1045 M (*)S
LH
%%PageTrailer
%%Trailer
%%DocumentNeededResources:
%%+ font Helvetica-Oblique
%%+ font Helvetica
%%DocumentSuppliedResources:
Pscript_WinNT_Incr dup /terminate get exec
%%EOF
grestore
%%EndDocument
@endspecial 990 5316 a Fq(Figur)n(e)26 b(3:)31 b(UML)24
b(diagram)i(for)f(the)h Fo(BCEL)i Fq(API)1863 5712 y(11)p
eop
%%Page: 12 12
12 11 bop 146 407 a Ft(As)17 b(mentioned)f(in)h(section)g(2.1)g(alr)n
(eady)-10 b(,)19 b(several)e(components)e(may)j(contain)f
Fs(attribute)i Ft(objects:)25 b(classes,)0 520 y(\002elds,)43
b(methods,)f(and)e Ff(Code)e Ft(objects)h(\(intr)n(oduced)g(in)h
(section)f(2.3\).)81 b(The)39 b(latter)g(is)h(an)g(attribute)g(it-)0
633 y(self)f(that)h(contains)f(the)g(actual)h(byte)f(code)f(array)-10
b(,)44 b(the)39 b(maximum)i(stack)e(size,)k(the)c(number)g(of)h(local)0
746 y(variables,)c(a)d(table)f(of)h(handled)e(exceptions,)i(and)f(some)
g(optional)g(debugging)e(information)j(coded)e(as)0 858
y Ff(LineNumberTable)23 b Ft(and)29 b Ff(LocalVariableTa)o(bl)o(e)24
b Ft(attributes.)47 b(Attributes)27 b(ar)n(e)j(in)g(general)f
(speci\002c)0 971 y(to)c(some)g(data)g(str)o(uctur)n(e,)g(i.e.)37
b(no)25 b(two)g(components)f(shar)n(e)h(the)g(same)g(kind)h(of)f
(attribute,)h(though)e(this)h(is)0 1084 y(not)h(explicitly)h
(forbidden.)40 b(In)26 b(the)g(\002gur)n(e)g(the)g Ff(Attribute)d
Ft(classes)j(ar)n(e)i(marked)e(with)g(the)g(component)0
1197 y(they)21 b(belong)h(to.)0 1482 y Fm(3.2)119 b(Class)30
b(repository)0 1659 y Ft(Using)35 b(the)g(pr)n(ovided)g
Ff(Repository)c Ft(class,)39 b(r)n(eading)d(class)g(\002les)g(into)f(a)
h Ff(JavaClass)c Ft(object)k(is)g(quite)0 1772 y(simple:)109
1970 y Ff(JavaClass)51 b(clazz)h(=)i(Repository.look)o(up)o(Cl)o(as)o
(s\()o("ja)o(va)o(.l)o(an)o(g.)o(Str)o(in)o(g")o(\);)146
2168 y Ft(The)19 b(r)n(epository)e(also)i(contains)g(methods)f(pr)n
(oviding)h(the)f(dynamic)i(equivalent)f(of)g(the)g Ff(instanceof)0
2281 y Ft(operator)-7 b(,)21 b(and)i(other)e(useful)h(r)n(outines:)109
2479 y Ff(if\(Repository.i)o(ns)o(ta)o(nce)o(Of)o(\(c)o(la)o(zz)o(,)49
b(super_class\))g({)218 2592 y(...)109 2705 y(})0 2961
y Fg(3.2.1)99 b(Accessing)25 b(class)h(\002le)f(data)0
3138 y Ft(Information)39 b(within)g(the)f(class)i(\002le)f(components)e
(may)j(be)e(accessed)g(like)i(Java)g(Beans)e(via)j(intuitive)0
3251 y(set/get)19 b(methods.)26 b(All)c(of)g(them)f(also)h(de\002ne)e
(a)i Ff(toString\(\))17 b Ft(method)j(so)h(that)h(implementing)f(a)h
(simple)0 3364 y(class)h(viewer)f(is)h(very)f(easy)-10
b(.)27 b(In)22 b(fact)i(all)g(of)f(the)e(examples)i(used)e(her)n(e)h
(have)h(been)f(pr)n(oduced)f(this)h(way:)109 3562 y Ff(System.out.prin)
o(tl)o(n\()o(cla)o(zz)o(\);)109 3675 y(printCode\(clazz)o(.g)o(et)o
(Met)o(ho)o(ds)o(\(\))o(\);)109 3788 y(...)109 3901 y(public)52
b(static)g(void)g(printCode\(Method)o([])c(methods\))j({)218
4014 y(for\(int)h(i=0;)g(i)i(<)g(methods.length;)48 b(i++\))53
b({)327 4127 y(System.out.prin)o(tln)o(\(m)o(et)o(ho)o(ds)o([i])o(\);)
327 4352 y(Code)g(code)g(=)h(methods[i].get)o(Cod)o(e\()o(\);)327
4465 y(if\(code)e(!=)h(null\))g(//)g(Non-abstract)c(method)436
4578 y(System.out.print)o(ln)o(\(c)o(od)o(e\))o(;)218
4691 y(})109 4804 y(})0 5060 y Fg(3.2.2)99 b(Analyzing)25
b(class)g(data)0 5237 y Ft(Last)g(but)h(not)f(least,)h
Fe(BCEL)i Ft(supports)23 b(the)i Fs(V)-7 b(isitor)28
b Ft(design)d(pattern)g([GHJV95)q(],)h(so)g(one)f(can)i(write)e
(visitor)0 5350 y(objects)e(to)h(traverse)f(and)h(analyze)h(the)e
(contents)f(of)i(a)h(class)f(\002le.)32 b(Included)23
b(in)h(the)g(distribution)f(is)h(a)h(class)0 5463 y Ff(JasminVisitor)17
b Ft(that)22 b(converts)g(class)h(\002les)f(into)h(the)e(Jasmin)j
(assembler)e(language)h([MD97)q(].)1863 5712 y Fq(12)p
eop
%%Page: 13 13
13 12 bop 0 407 a Fm(3.3)119 b(ClassGen)0 587 y Ft(This)26
b(part)g(of)g(the)g(API)g(\(package)g Ff(de.fub.bytecod)o(e.)o(gen)o
(er)o(ic)o Ft(\))21 b(supplies)k(an)i(abstraction)f(level)h(for)0
700 y(cr)n(eating)c(or)f(transforming)g(class)h(\002les)f(dynamically)
-10 b(.)29 b(It)22 b(makes)g(the)g(static)g(constraints)g(of)g(Java)j
(class)d(\002les)0 813 y(like)35 b(the)e(har)n(d-coded)h(byte)f(code)h
(addr)n(esses)e(generic.)63 b(The)34 b(generic)f(constant)h(pool,)j
(for)d(example,)j(is)0 926 y(implemented)23 b(by)h(the)f(class)h
Ff(ConstantPoolGen)18 b Ft(which)24 b(of)n(fers)g(methods)e(for)i
(adding)f(dif)n(fer)n(ent)h(types)0 1039 y(of)h(constants.)34
b(Accor)n(dingly)-10 b(,)25 b Ff(ClassGen)d Ft(of)n(fers)i(an)i
(interface)f(to)f(add)h(methods,)f(\002elds,)g(and)h(attributes.)0
1152 y(Figur)n(e)d(4)h(gives)f(an)h(overview)g(of)f(this)h(part)f(of)h
(the)e(API.)0 1422 y Fg(3.3.1)99 b(T)-9 b(ypes)0 1603
y Ft(W)h(e)28 b(abstract)i(fr)n(om)f(the)g(concr)n(ete)f(details)h(of)g
(the)g(type)e(signatur)n(e)i(syntax)f(\(see)g(2.5\))i(by)f(intr)n
(oducing)g(the)0 1716 y Ff(Type)23 b Ft(class,)k(which)e(is)h(used,)e
(for)h(example,)g(by)g(methods)f(to)g(de\002ne)g(their)h(r)n(eturn)f
(and)i(ar)n(gument)e(types.)0 1829 y(Concr)n(ete)j(sub-classes)f(ar)n
(e)i Ff(BasicType)p Ft(,)c Ff(ObjectType)p Ft(,)f(and)k
Ff(ArrayType)d Ft(which)j(consists)f(of)h(the)g(el-)0
1942 y(ement)33 b(type)f(and)i(the)f(number)g(of)h(dimensions.)60
b(For)33 b(commonly)h(used)f(types)e(the)i(class)i(of)n(fers)e(some)0
2055 y(pr)n(ede\002ned)23 b(constants.)36 b(For)25 b(example)h(the)f
(method)f(signatur)n(e)h(of)h(the)f Ff(main)f Ft(method)h(as)g(shown)g
(in)h(sec-)0 2168 y(tion)c(2.5)i(is)e(r)n(epr)n(esented)e(by:)109
2403 y Ff(Type)162 b(return_type)49 b(=)55 b(Type.VOID;)109
2516 y(Type[])d(arg_types)159 b(=)55 b(new)e(Type[])f({)i(new)f
(ArrayType\(Type)o(.ST)o(RI)o(NG)o(,)48 b(1\))54 b(};)146
2750 y(Type)18 b Ft(also)i(contains)g(methods)e(to)h(convert)h(types)d
(into)j(textual)f(signatur)n(es)g(and)h(vice)g(versa.)27
b(The)19 b(sub-)0 2863 y(classes)24 b(contain)g(implementations)g(of)g
(the)f(r)n(outines)g(and)h(constraints)f(speci\002ed)g(by)h(the)f(Java)
j(Language)0 2976 y(Speci\002cation)d([GJS96)q(].)0 3247
y Fg(3.3.2)99 b(Generic)24 b(\002elds)h(and)g(methods)0
3427 y Ft(Fields)f(ar)n(e)i(r)n(epr)n(esented)c(by)j
Ff(FieldGen)c Ft(objects,)k(which)g(may)h(be)e(fr)n(eely)h(modi\002ed)f
(by)h(the)f(user)-7 b(.)34 b(If)25 b(they)0 3540 y(have)e(the)g(access)
g(rights)f Ff(static)52 b(final)p Ft(,)20 b(i.e.)29 b(ar)n(e)24
b(constants)d(and)i(of)g(basic)i(type,)c(they)h(may)h(optionally)0
3653 y(have)g(an)g(initializing)i(value.)146 3768 y(Generic)d(methods)e
(contain)i(methods)e(to)h(add)h(exceptions)e(the)h(method)f(may)i(thr)n
(ow)-8 b(,)21 b(local)i(variables,)0 3881 y(and)g(exception)e
(handlers.)27 b(The)22 b(latter)g(two)g(ar)n(e)h(r)n(epr)n(esented)c
(by)k(user)n(-con\002gurable)f(objects)g(as)g(well.)29
b(Be-)0 3994 y(cause)20 b(exception)e(handlers)i(and)f(local)j
(variables)f(contain)f(r)n(efer)n(ences)f(to)g(byte)g(code)h(addr)n
(esses,)d(they)i(also)0 4107 y(take)j(the)g(r)n(ole)h(of)g(an)g
Fs(instruction)h(tar)n(geter)i Ft(in)d(our)f(terminology)-10
b(.)27 b(Instr)o(uction)22 b(tar)n(geters)f(contain)i(a)g(method)0
4220 y Ff(updateTarget\(\))i Ft(to)31 b(r)n(edir)n(ect)g(a)h(r)n(efer)n
(ence.)54 b(Generic)32 b(\(non-abstract\))g(methods)d(r)n(efer)i(to)g
Fs(instruction)0 4332 y(lists)g Ft(that)e(consist)f(of)h(instr)o
(uction)g(objects.)47 b(Refer)n(ences)28 b(to)g(byte)g(code)h(addr)n
(esses)e(ar)n(e)i(implemented)f(by)0 4445 y(handles)22
b(to)g(instr)o(uction)g(objects.)28 b(This)22 b(is)h(explained)f(in)h
(mor)n(e)f(detail)h(in)g(the)f(following)h(sections.)146
4560 y(The)32 b(maximum)h(stack)f(size)g(needed)e(by)i(the)f(method)g
(and)h(the)f(maximum)j(number)e(of)g(local)i(vari-)0
4673 y(ables)25 b(used)e(may)i(be)f(set)f(manually)j(or)e(computed)f
(via)j(the)d Ff(setMaxStack\(\))c Ft(and)24 b Ff(setMaxLocals\(\))0
4786 y Ft(methods)d(automatically)-10 b(.)0 5056 y Fg(3.3.3)99
b(Instructions)0 5237 y Ft(Modeling)25 b(instr)o(uctions)g(as)h
(objects)f(may)h(look)f(somewhat)g(odd)f(at)i(\002rst)f(sight,)g(but)h
(in)g(fact)h(enables)e(pr)n(o-)0 5350 y(grammers)g(to)f(obtain)i(a)g
(high-level)g(view)f(upon)f(contr)n(ol)i(\003ow)f(without)f(handling)h
(details)g(like)h(concr)n(ete)0 5463 y(byte)c(code)h(of)n(fsets.)29
b(Instr)o(uctions)22 b(consist)g(of)h(a)h(tag,)f(i.e.)30
b(an)24 b(opcode,)d(their)i(length)g(in)h(bytes)e(and)h(an)h(of)n(fset)
1863 5712 y Fq(13)p eop
%%Page: 14 14
14 13 bop 383 5113 a @beginspecial 13 @llx 12 @lly 535
@urx 830 @ury 3671 @rwi @setspecial
%%BeginDocument: eps/classgen.eps
%!PS-Adobe-3.0 EPSF-3.0
%%Title: Rose Diagram(s)
%%Creator: AdobePS5.dll Version 5.0
%%CreationDate: 7/7/1999 17:42:13
%%Pages: 1
%%Orientation: Portrait
%%PageOrder: Ascend
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources: (atend)
%%DocumentData: Clean7Bit
%%TargetDevice: (HP LaserJet 5Si) (2014.108) 1
%%LanguageLevel: 2
%%BoundingBox: 13 12 535 830
%%EndComments
%%BeginProcSet: epsffit 1 0
gsave
1249.738 -7.476 translate
90 rotate
1.623 1.623 scale
%%EndProcSet
%%BeginDefaults
%%PageBoundingBox: 13 12 582 830
%%EndDefaults
%%BeginProlog
%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0
/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
ne{grestoreall}if showpage initgraphics courier setfont lmargin 720 moveto
(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt
$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}
repeat}if systemdict/showpage get exec(%%[ Error: )print errorname =print
(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end end}dup
0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking where{pop
/setpacking where{pop oldpack setpacking}if}if
%%EndResource
userdict /Pscript_WinNT_Incr 230 dict dup begin put
%%BeginResource: file Pscript_FatalError 5.0 0
/FatalErrorIf{{initgraphics findfont exch scalefont setfont counttomark 3 div
cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def
%%EndResource
/VM?{vmstatus exch sub exch pop gt{[
(This job requires more memory than is available in this printer.)100 500
(Try one or more of the following, and then print again:)100 485
(For the output format, choose Optimize For Portability.)115 470
(In the Device Settings page, make sure the Available PostScript Memory is accurate.)
115 455(Reduce the number of fonts in the document.)115 440
(Print the document in parts.)115 425 12/Times-Roman showpage
(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def
%%BeginResource: file Pscript_Win_Basic 5.0 0
/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
, d/K/stroke , d/W/widthshow , d/R/rotate , d/P/eoclip , d/L2? false
/languagelevel where{pop languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d
/yS/yshow , d/zS/xyshow , d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{,
d}bd/lw/Lw ld/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx
matrix currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit
/UtilsInit counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}
b/initialize{`{/ADO_mxRot ~ d/TextInitialised? F d reinitialize E}{U
/Pscript_Win_Data 230 dict @ ` put/ADO_mxRot ~ d/TextInitialised? F d
reinitialize}?}b/terminate{!{& self eq{exit}{E}?}loop E}b/suspend/terminate , d
/resume{` Pscript_Win_Data `}b/snap{transform 0.25 sub round 0.25 add ~ 0.25
sub round 0.25 add ~ itransform}b/dsnap{dtransform round ~ round ~ idtransform}
b<04>cvn{}d/rr{1 ^ 0 - 0 ~ - neg 0 - C}b/rp{4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b
/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool 2 ^ put}b
/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e{DefIf_El !}
b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
%%EndResource
%%BeginResource: file Pscript_Win_Utils_L2 5.0 0
/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge
{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F
setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d
/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b
%%EndResource
end
%%EndProlog
%%BeginSetup
[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
1 setlinecap 1 setlinejoin
/mysetup [ 0.24 0 0 -0.24 13.43905 829.74047 ] def
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 13 12 582 830
%%EndPageComments
%%BeginPageSetup
/DeviceRGB dup setcolorspace /colspABC exch def mysetup concat colspRefresh
%%EndPageSetup
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Win_GdiObject 5.0 0
/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
/HS_DiagCross makehatch}b/GDIBWPatternDict 25 dict @ `/PatternType 1 d
/PaintType L2?{1}{2}? d/RepsV L2?{1}{6}? d/RepsH L2?{1}{5}? d/BBox[0 0 RepsH 1]
d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d/Width 8 d/mx[Width 0
0 Height neg 0 Height]d/FGnd null d/BGnd null d/SetBGndFGnd L2?{{FGnd null ne
{FGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~ rf}if BGnd null ne{BGnd
aload ! scol}if}}{{}}? b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx
PaintData imagemask Width 0 +}repeat E}b E d/GDIBWPatternMx null d/pfprep{save
8 1 $/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/yExt ~ d/Width ~ d/FGnd ~ d/BGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0
Height 0 0]d E : GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx
matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix GDIBWPatternDict @ `
xOrg yOrg E matrix + mp CTMrestore ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill
{O}{L}? restore}b/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot
concat 0 0 snap + : 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ dsnap
YStep V ~ XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24
-0.24 +S GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx matrix
currentmatrix readonly d ; ;}if}b
%%EndResource
%%BeginResource: file Pscript_Win_GdiObject_L2 5.0 0
/mp/makepattern , d/hbf{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}
{L}? ;}b/pbf{: !/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/OutputBPP ~ d/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1
d/BBox[0 0 Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d
20 dict @ `/ImageType 1 d/Width Width d/Height Height d/ImageMatrix mx d
/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{
/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict
~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}
? ;}b
%%EndResource
end reinitialize
: N 234 594 236 124 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol 1 Lw N 470 593 M 233 593 I 233 718 I 470 718 I C
K
0 0 0 1 scol Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Text 5.0 0
/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
{T pd_AddEm87 ~ !}{! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @
length array copy put pd_CoverFCRange}if}{!}?}? 2 ^ ~ definefont fM 5 4 -1 $
put fM 4 0 put fM makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M
currentpoint snap M 0 - 0 Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d
/ySP null d/sW null d/sSU{N/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N
/sW ~ d/ySP ~ d/xSP ~ d}b/sT{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix
astore concat 0 0 M}b/eR/; , d/AddOrigFP{{&/FontInfo known{&/FontInfo get
length 6 add}{6}? dict `/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d
/OrigFontStyle ~ d/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS
{makefont Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2
copy ~ sub 1 add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for
& E/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}bind d/mF42{15 dict ` @
4 1 $/FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254
add 255 idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for
/FDepVector Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1
Encoding length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName
length 2 add string}{FontName length 3 add string}?}? @ 0 FontName @ length
string cvs putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~
putinterval cvn 1 ^ 256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1
$ put}for & @ E/FontName get ~ definefont ! ! ! mF}b/UmF{L2?
{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
get undefinefont}forall undefinefont}b
%%EndResource
end reinitialize
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Encoding256 5.0 0
/CharCol256Encoding[/.notdef/breve/caron/dotaccent/dotlessi/fi/fl/fraction
/hungarumlaut/Lslash/lslash/minus/ogonek/ring/Zcaron/zcaron/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/exclam/quotedbl/numbersign
/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S
/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave
/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright
/asciitilde/.notdef/.notdef/.notdef/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef
/.notdef/.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet
/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef
/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/.notdef/registered
/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis
/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis]def EncodeDict/256 CharCol256Encoding put
%%EndResource
end reinitialize
%%IncludeResource: font Helvetica
F /F0 0 /256 T /Helvetica mF
/F0S29 F0 [41 0 0 -41 0 0 ] mFS
F0S29 Ji
257 643 M (BasicType)[27 23 20 8 21 26 19 23 0]xS
0.602 0 0.199 1 scol N 470 659 M 233 659 I 233 718 I 470 718 I C
K
N 470 682 M 233 682 I 233 718 I 470 718 I C
K
: N 252 292 360 184 rp C
1 1 0.801 1 scol L ; N 612 291 M 251 291 I 251 476 I 612 476 I C
K
0 0 0 1 scol 326 341 M (ObjectType)[32 23 10 23 21 11 26 19 23 0]xS
0.602 0 0.199 1 scol N 612 357 M 251 357 I 251 476 I 612 476 I C
K
N 612 380 M 251 380 I 251 476 I 612 476 I C
K
0 0 0 1 scol 310 448 M (getClassName\(\))[23 23 11 30 10 23 20 20 30 23 36 23 14 0]xS
: N 699 292 362 184 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1061 291 M 698 291 I 698 476 I 1061 476 I C
K
0 0 0 1 scol 786 341 M (ArrayType)[27 14 14 23 19 26 19 23 0]xS
0.602 0 0.199 1 scol N 1061 357 M 698 357 I 698 476 I 1061 476 I C
K
N 1061 380 M 698 380 I 698 476 I 1061 476 I C
K
0 0 0 1 scol 757 448 M (getDimensions\(\))[23 23 11 30 8 36 23 23 20 8 23 23 20 14 0]xS
: N 532 594 312 124 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 844 593 M 531 593 I 531 718 I 844 718 I C
K
0 0 0 1 scol 546 643 M (ReferenceType)[30 23 12 23 14 23 23 21 23 26 19 23 0]xS
0.602 0 0.199 1 scol N 844 659 M 531 659 I 531 718 I 844 718 I C
K
N 844 682 M 531 682 I 531 718 I 844 718 I C
K
: N 1202 295 284 178 rp C
1 1 0.801 1 scol L ; N 1486 294 M 1201 294 I 1201 473 I 1486 473 I C
K
0 0 0 1 scol
%%IncludeResource: font Helvetica-Oblique
F /F1 0 /256 T /Helvetica-Oblique mF
/F1S29 F1 [41 0 0 -41 0 0 ] mFS
F1S29 Ji
1226 343 M (AccessFlags)[27 21 21 23 21 21 25 9 23 23 0]xS
0.602 0 0.199 1 scol N 1486 360 M 1201 360 I 1201 473 I 1486 473 I C
K
N 1486 383 M 1201 383 I 1201 473 I 1486 473 I C
K
0 0 0 1 scol 1260 450 M (isPublic\(\))[9 21 27 23 23 9 9 21 14 0]xS
0.602 0 0.199 1 scol N 1344 602 M 1344 474 I K
N 1059 602 M 1634 602 I K
N 1344 474 M 1366 534 I 1322 534 I C
: 1 1 1 1 scol O ; K
N 678 500 M 678 593 I K
N 369 500 M 881 500 I K
N 678 593 M 700 533 I 656 533 I C
: 1 1 1 1 scol O ; K
N 369 477 M 369 500 I K
N 881 477 M 881 500 I K
: N 919 683 306 234 rp C
1 1 0.801 1 scol L ; N 1225 682 M 918 682 I 918 917 I 1225 917 I C
K
0 0 0 1 scol F0S29 Ji
988 732 M (FieldGen)[25 8 23 10 23 32 23 0]xS
0.602 0 0.199 1 scol N 1225 748 M 918 748 I 918 917 I 1225 917 I C
K
N 1225 771 M 918 771 I 918 917 I 1225 917 I C
K
0 0 0 1 scol 977 839 M (getField\(\))[23 23 11 25 8 23 10 23 14 0]xS
977 886 M (setInitValue\(\))[20 23 11 10 23 8 11 27 23 10 23 23 14 0]xS
0.602 0 0.199 1 scol N 1059 682 M 1059 602 I K
: N 543 1283 386 122 rp C
1 1 0.801 1 scol L ; N 929 1282 M 542 1282 I 542 1405 I 929 1405 I C
K
0 0 0 1 scol 571 1332 M (LocalVariableGen)[23 23 21 23 10 27 23 14 8 23 23 10 23 32 23 0]xS
0.602 0 0.199 1 scol N 929 1348 M 542 1348 I 542 1405 I 929 1405 I C
K
N 929 1371 M 542 1371 I 542 1405 I 929 1405 I C
K
: N 538 1106 396 124 rp C
1 1 0.801 1 scol L ; N 934 1105 M 537 1105 I 537 1230 I 934 1230 I C
K
0 0 0 1 scol 559 1155 M (CodeExceptionGen)[30 23 23 23 27 18 21 23 23 11 8 23 23 32 23 0]xS
0.602 0 0.199 1 scol N 934 1171 M 537 1171 I 537 1230 I 934 1230 I C
K
N 934 1194 M 537 1194 I 537 1230 I 934 1230 I C
K
: N 351 836 322 184 rp C
1 1 0.801 1 scol L ; N 673 835 M 350 835 I 350 1020 I 673 1020 I C
K
0 0 0 1 scol 466 885 M (Type)[26 19 23 0]xS
0.602 0 0.199 1 scol N 673 901 M 350 901 I 350 1020 I 673 1020 I C
K
N 673 924 M 350 924 I 350 1020 I 673 1020 I C
K
0 0 0 1 scol 409 992 M (getSignature\(\))[23 23 11 27 8 23 23 23 11 23 14 23 14 0]xS
0.602 0 0.199 1 scol N 512 745 M 512 835 I K
N 347 745 M 669 745 I K
N 512 835 M 534 775 I 490 775 I C
: 1 1 1 1 scol O ; K
N 795 862 M 674 889 I K
N 795 862 M 917 833 I K
N 347 719 M 347 745 I K
N 669 719 M 669 745 I K
: N 538 1457 364 126 rp C
1 1 0.801 1 scol L ; N 902 1456 M 537 1456 I 537 1583 I 902 1583 I C
K
0 0 0 1 scol 561 1506 M (BranchInstruction)[27 14 23 23 21 23 10 23 20 11 14 23 21 11 8 23 0]xS
0.602 0 0.199 1 scol N 902 1522 M 537 1522 I 537 1583 I 902 1583 I C
K
N 902 1545 M 537 1545 I 537 1583 I 902 1583 I C
K
: N 1157 1012 342 184 rp C
1 1 0.801 1 scol L ; N 1499 1011 M 1156 1011 I 1156 1196 I 1499 1196 I C
K
0 0 0 1 scol 1221 1061 M (MethodGen)[33 23 11 23 23 23 32 23 0]xS
0.602 0 0.199 1 scol N 1499 1077 M 1156 1077 I 1156 1196 I 1499 1196 I C
K
N 1499 1100 M 1156 1100 I 1156 1196 I 1499 1196 I C
K
0 0 0 1 scol 1215 1168 M (addException\(\))[23 23 23 27 18 21 23 23 11 8 23 23 14 0]xS
0.602 0 0.199 1 scol N 1022 1227 M 1155 1172 I K
N 1155 1172 M 1136 1196 I 1105 1193 I 1124 1168 I 1155 1172 I C
: 1 1 1 1 scol O ; K
N 1022 1227 M 886 1281 I K
N 913 1302 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 913 1340 M (*)S
N 913 1302 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 913 1340 M (*)S
0.602 0 0.199 1 scol N 1045 1134 M 1155 1121 I K
N 1155 1121 M 1130 1139 I 1101 1127 I 1126 1109 I 1155 1121 I C
: 1 1 1 1 scol O ; K
N 1045 1134 M 935 1145 I K
N 934 1068 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 934 1106 M (*)S
N 934 1068 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 934 1106 M (*)S
0.602 0 0.199 1 scol N 914 1014 M 674 962 I K
N 914 1014 M 1155 1066 I K
N 1344 1011 M 1344 602 I K
: N 1751 1012 306 184 rp C
1 1 0.801 1 scol L ; N 2057 1011 M 1750 1011 I 1750 1196 I 2057 1196 I C
K
0 0 0 1 scol 1779 1061 M (InstructionList)[10 23 20 11 14 23 21 11 8 23 23 23 8 20 0]xS
0.602 0 0.199 1 scol N 2057 1077 M 1750 1077 I 1750 1196 I 2057 1196 I C
K
N 2057 1100 M 1750 1100 I 1750 1196 I 2057 1196 I C
K
0 0 0 1 scol 1809 1168 M (append\(\))[23 23 23 23 23 23 14 0]xS
0.602 0 0.199 1 scol N 1624 1104 M 1749 1104 I K
N 1624 1104 M 1500 1104 I K
: N 1201 1313 222 190 rp C
1 1 0.801 1 scol L ; N 1423 1312 M 1200 1312 I 1200 1503 I 1423 1503 I C
K
0 0 0 1 scol 1219 1362 M (Instruction)[10 23 20 11 14 23 21 11 8 23 0]xS
0.602 0 0.199 1 scol N 1423 1378 M 1200 1378 I 1200 1503 I 1423 1503 I C
K
N 1423 1495 M 1200 1495 I 1200 1503 I 1423 1503 I C
K
0 0 0 1 scol 1259 1422 M (tag)[11 23 0]xS
1259 1469 M (length)[10 23 23 23 11 0]xS
0.602 0 0.199 1 scol N 903 1485 M 1199 1429 I K
N 1199 1429 M 1144 1462 I 1136 1418 I C
: 1 1 1 1 scol O ; K
: N 1722 1345 364 126 rp C
1 1 0.801 1 scol L ; N 2086 1344 M 1721 1344 I 1721 1471 I 2086 1471 I C
K
0 0 0 1 scol 1744 1394 M (InstructionHandle)[10 23 20 11 14 23 21 11 8 23 23 30 23 23 23 10 0]xS
0.602 0 0.199 1 scol N 2086 1410 M 1721 1410 I 1721 1471 I 2086 1471 I C
K
N 2086 1433 M 1721 1433 I 1721 1471 I 2086 1471 I C
K
N 1904 1270 M 1904 1197 I K
N 1947 1181 23 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1947 1219 M (1)S
0.602 0 0.199 1 scol N 1904 1197 M 1919 1224 I 1904 1251 I 1889 1224 I 1904 1197 I C
: 1 1 1 1 scol O ; K
N 1904 1270 M 1904 1343 I K
N 1950 1313 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1950 1351 M (*)S
N 1947 1181 23 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1947 1219 M (1)S
N 1950 1313 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1950 1351 M (*)S
0.602 0 0.199 1 scol N 1572 1408 M 1424 1408 I K
N 1429 1439 23 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1429 1477 M (1)S
0.602 0 0.199 1 scol N 1572 1408 M 1720 1408 I K
N 1693 1439 23 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1693 1477 M (1)S
N 1429 1439 23 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1429 1477 M (1)S
N 1693 1439 23 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1693 1477 M (1)S
: N 0 1224 384 240 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol : 0 1223 385 242 rc N 384 1223 M -1 1223 I -1 1464 I 384 1464 I C
K
; 0 0 0 1 scol 20 1323 M (InstructionTargeter)[10 23 20 11 14 23 21 11 8 23 23 26 23 14 23 23 11 23 0]xS
0.602 0 0.199 1 scol : 0 1339 385 126 rc N 384 1339 M -1 1339 I -1 1464 I 384 1464 I C
K
; : 0 1362 385 103 rc N 384 1362 M -1 1362 I -1 1464 I 384 1464 I C
K
; 0 0 0 1 scol 58 1430 M (updateTarget\(\))[23 23 23 23 11 23 26 23 14 23 23 11 14 0]xS
64 1273 M (<<Interface>>)[24 24 10 23 11 23 14 12 23 21 23 24 0]xS
1 1 1 1 scol [ 72 24 ] 0 sd N 540 1231 M 385 1280 I K
0 0 0 1 scol [ 72 24 ] 0 sd N 540 1231 M 385 1280 I K
0.602 0 0.199 1 scol solid N 385 1280 M 449 1283 I 435 1241 I C
: 1 1 1 1 scol O ; K
1 1 1 1 scol [ 72 24 ] 0 sd N 541 1344 M 385 1344 I K
0 0 0 1 scol [ 72 24 ] 0 sd N 541 1344 M 385 1344 I K
0.602 0 0.199 1 scol solid N 385 1344 M 445 1366 I 445 1322 I C
: 1 1 1 1 scol O ; K
N 1043 1616 M 1903 1616 I K
N 1903 1616 M 1903 1472 I K
N 1949 1550 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1949 1588 M (*)S
0.602 0 0.199 1 scol N 1043 1616 M 191 1616 I K
N 191 1616 M 191 1465 I K
N 237 1542 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 237 1580 M (*)S
N 1949 1550 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1949 1588 M (*)S
N 237 1542 16 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 237 1580 M (*)S
N 1186 1556 221 47 rp C
1 1 1 1 scol L 0 0 0 1 scol 1186 1594 M (<<targets>>)[24 24 11 23 14 23 23 11 20 24 0]xS
: N 1707 306 362 284 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 2069 305 M 1706 305 I 1706 590 I 2069 590 I C
K
0 0 0 1 scol 1725 355 M (ConstantPoolGen)[30 23 23 20 11 23 23 11 27 23 23 10 32 23 0]xS
0.602 0 0.199 1 scol N 2069 371 M 1706 371 I 1706 590 I 2069 590 I C
K
N 2069 394 M 1706 394 I 1706 590 I 2069 590 I C
K
0 0 0 1 scol 1765 462 M (addClass\(\))[23 23 23 30 10 23 20 20 14 0]xS
1765 509 M (addMethodRef\(\))[23 23 23 33 23 11 23 23 23 30 23 12 14 0]xS
1765 556 M (addInteger\(\))[23 23 23 10 23 11 23 23 23 14 14 0]xS
: N 1475 683 314 234 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1789 682 M 1474 682 I 1474 917 I 1789 917 I C
K
0 0 0 1 scol 1541 732 M (ClassGen)[30 10 23 20 20 32 23 0]xS
0.602 0 0.199 1 scol N 1789 748 M 1474 748 I 1474 917 I 1789 917 I C
K
N 1789 771 M 1474 771 I 1474 917 I 1789 917 I C
K
0 0 0 1 scol 1533 839 M (addInterface\(\))[23 23 23 10 23 11 23 14 12 23 21 23 14 0]xS
1533 886 M (addMethod\(\))[23 23 23 33 23 11 23 23 23 14 0]xS
0.602 0 0.199 1 scol N 1634 682 M 1634 602 I K
N 1751 636 M 1782 591 I K
N 1751 636 M 1717 681 I K
1 1 1 1 scol [ 72 24 ] 0 sd N 536 1458 M 385 1408 I K
0 0 0 1 scol [ 72 24 ] 0 sd N 536 1458 M 385 1408 I K
0.602 0 0.199 1 scol solid N 385 1408 M 449 1406 I 435 1448 I C
: 1 1 1 1 scol O ; K
LH
%%PageTrailer
%%Trailer
%%DocumentNeededResources:
%%+ font Helvetica-Oblique
%%+ font Helvetica
%%DocumentSuppliedResources:
Pscript_WinNT_Incr dup /terminate get exec
%%EOF
grestore
%%EndDocument
@endspecial 934 5316 a Fq(Figur)n(e)26 b(4:)k(UML)25
b(diagram)g(of)g(the)h(ClassGen)e(API)1863 5712 y(14)p
eop
%%Page: 15 15
15 14 bop 0 407 a Ft(\(or)17 b(index\))g(within)g(the)g(byte)f(code.)25
b(Since)18 b(many)f(instr)o(uctions)f(ar)n(e)i(immutable,)h(the)e
Ff(InstructionCon)o(st)o(an)o(ts)0 520 y Ft(interface)23
b(of)n(fers)f(shar)n(eable)h(pr)n(ede\002ned)e(\223\003y-weight\224)h
(constants)g(to)g(use.)146 633 y(Instr)o(uctions)28 b(ar)n(e)h(gr)n
(ouped)e(via)k(sub-classing,)f(the)f(type)e(hierar)n(chy)j(of)f(instr)o
(uction)f(classes)h(is)g(illus-)0 746 y(trated)d(by)h(\(incomplete\))g
(\002gur)n(e)f(9)h(in)h(the)e(appendix.)39 b(The)27 b(most)f(important)
g(family)j(of)e(instr)o(uctions)f(ar)n(e)0 858 y(the)h
Fs(branch)h(instructions)p Ft(,)i(e.g.)42 b Ff(goto)p
Ft(,)27 b(that)h(branch)g(to)f(tar)n(gets)g(somewher)n(e)e(within)j
(the)f(byte)g(code.)42 b(Ob-)0 971 y(viously)-10 b(,)24
b(this)f(makes)g(them)g(candidates)h(for)f(playing)h(an)g
Ff(InstructionTarge)o(te)o(r)18 b Ft(r)n(ole,)23 b(too.)31
b(Instr)o(uc-)0 1084 y(tions)16 b(ar)n(e)i(further)e(gr)n(ouped)g(by)h
(the)f(interfaces)h(they)f(implement,)i(ther)n(e)e(ar)n(e,)i(e.g.,)f
Ff(TypedInstructi)o(on)p Ft(s)0 1197 y(that)24 b(ar)n(e)h(associated)f
(with)h(a)g(speci\002c)g(type)e(like)i Ff(ldc)p Ft(,)f(or)g
Ff(ExceptionThrowe)o(r)18 b Ft(instr)o(uctions)24 b(that)h(may)0
1310 y(raise)e(exceptions)e(when)g(executed.)146 1423
y(All)i(instr)o(uctions)f(can)h(be)f(traversed)f(via)i
Ff(accept\(Visitor)48 b(v\))22 b Ft(methods,)e(i.e.,)h(the)h(V)-5
b(isitor)21 b(design)0 1536 y(pattern.)53 b(Ther)n(e)31
b(is)g(however)f(some)h(special)h(trick)f(in)h(these)e(methods)f(that)i
(allows)h(to)f(mer)n(ge)g(the)f(han-)0 1649 y(dling)21
b(of)g(certain)g(instr)o(uction)g(gr)n(oups.)26 b(The)20
b Ff(accept\(\))d Ft(do)j(not)h(only)f(call)j(the)d(corr)n(esponding)f
Ff(visit\(\))0 1762 y Ft(method,)34 b(but)g(call)h Ff(visit\(\))30
b Ft(methods)i(of)h(their)g(r)n(espective)f(super)g(classes)h(and)h
(implemented)e(inter)n(-)0 1875 y(faces)27 b(\002rst,)g(i.e.)40
b(the)26 b(most)g(speci\002c)h Ff(visit\(\))d Ft(call)29
b(is)e(last.)40 b(Thus)26 b(one)g(can)i(gr)n(oup)e(the)g(handling)h
(of,)h(say)-10 b(,)0 1988 y(all)24 b Ff(BranchInstructi)o(on)o
Ft(s)17 b(into)22 b(one)g(single)g(method.)146 2100 y(For)30
b(debugging)f(purposes)f(it)j(may)g(even)g(make)f(sense)f(to)h
(\223invent\224)i(your)e(own)g(instr)o(uctions.)51 b(In)31
b(a)0 2213 y(sophisticated)23 b(code)h(generator)f(like)i(the)e(one)h
(used)g(as)g(a)i(backend)e(of)h(the)f(Barat)g(framework)g([BS98)q(])h
(one)0 2326 y(often)h(has)g(to)h(insert)e(temporary)h
Ff(nop)f Ft(\(No)h(operation\))g(instr)o(uctions.)39
b(When)27 b(examining)g(the)f(pr)n(oduced)0 2439 y(code)34
b(it)g(may)h(be)f(very)g(dif)n(\002cult)i(to)d(track)i(back)g(wher)n(e)
f(the)f Ff(nop)g Ft(was)i(actually)g(inserted.)62 b(One)34
b(could)0 2552 y(think)24 b(of)h(a)h(derived)e Ff(nop2)f
Ft(instr)o(uction)h(that)h(contains)g(additional)g(debugging)e
(information.)36 b(When)24 b(the)0 2665 y(instr)o(uction)e(list)h(is)g
(dumped)e(to)h(byte)g(code,)f(the)h(extra)g(data)h(is)g(simply)f(dr)n
(opped.)146 2778 y(One)j(could)g(also)g(think)g(of)g(new)f(byte)g(code)
g(instr)o(uctions)g(operating)g(on)h(complex)g(numbers)f(that)h(ar)n(e)
0 2891 y(r)n(eplaced)e(by)f(normal)h(byte)f(code)g(upon)g(load-time)h
(or)f(ar)n(e)h(r)n(ecognized)f(by)h(a)g(new)f(JVM.)0
3147 y Fg(3.3.4)99 b(Instruction)25 b(lists)0 3324 y
Ft(An)18 b Fs(instruction)i(list)g Ft(is)e(implemented)g(by)g(a)h(list)
g(of)g Fs(instruction)g(handles)h Ft(encapsulating)f(instr)o(uction)f
(objects.)0 3437 y(Refer)n(ences)k(to)g(instr)o(uctions)h(in)h(the)e
(list)i(ar)n(e)g(thus)e(not)h(implemented)f(by)h(dir)n(ect)g(pointers)f
(to)h(instr)o(uctions)0 3549 y(but)31 b(by)f(pointers)f(to)h(instr)o
(uction)h Fs(handles)p Ft(.)53 b(This)31 b(makes)f(appending,)h
(inserting)f(and)h(deleting)e(ar)n(eas)i(of)0 3662 y(code)25
b(very)h(simple.)38 b(Since)27 b(we)e(use)h(symbolic)g(r)n(efer)n
(ences,)g(computation)g(of)g(concr)n(ete)g(byte)f(code)g(of)n(fsets)0
3775 y(does)19 b(not)h(need)f(to)h(occur)h(until)f(\002nalization,)j
(i.e.)k(until)21 b(the)f(user)f(has)i(\002nished)e(the)h(pr)n(ocess)f
(of)i(generating)0 3888 y(or)29 b(transforming)f(code.)46
b(W)-8 b(e)28 b(will)i(use)e(the)g(term)h(instr)o(uction)f(handle)h
(and)g(instr)o(uction)g(synonymously)0 4001 y(thr)n(oughout)23
b(the)h(r)n(est)g(of)h(the)f(paper)-7 b(.)35 b(Instr)o(uction)23
b(handles)i(may)g(contain)h(additional)f(user)n(-de\002ned)e(data)0
4114 y(using)f(the)g Ff(addAttribute\(\))16 b Ft(method.)0
4362 y Fg(Appending.)90 b Ft(One)29 b(can)g(append)e(instr)o(uctions)h
(or)g(other)g(instr)o(uction)g(lists)g(anywher)n(e)g(to)g(an)h
(existing)0 4475 y(list.)63 b(The)34 b(instr)o(uctions)g(ar)n(e)h
(appended)d(after)i(the)g(given)g(instr)o(uction)g(handle.)63
b(All)36 b(append)d(methods)0 4588 y(r)n(eturn)27 b(a)h(new)g(instr)o
(uction)f(handle)h(which)g(may)h(then)d(be)i(used)f(as)h(the)f(tar)n
(get)g(of)h(a)g(branch)h(instr)o(uction,)0 4701 y(e.g..)109
4898 y Ff(InstructionList)48 b(il)53 b(=)i(new)e(InstructionLis)o(t\()o
(\);)109 5011 y(...)109 5124 y(GOTO)g(g)h(=)g(new)f(GOTO\(null\);)109
5237 y(il.append\(g\);)109 5350 y(...)109 5463 y(InstructionHand)o(le)
48 b(ih)54 b(=)g(il.append\(Inst)o(ru)o(ct)o(ion)o(Co)o(ns)o(ta)o(nt)o
(s.A)o(CO)o(NS)o(T_)o(NU)o(LL\))o(;)1863 5712 y Fq(15)p
eop
%%Page: 16 16
16 15 bop 109 407 a Ff(g.setTarget\(ih\))o(;)0 662 y
Fg(Inserting.)91 b Ft(Instr)o(uctions)24 b(may)j(be)f(inserted)e
(anywher)n(e)i(into)g(an)g(existing)f(list.)39 b(They)25
b(ar)n(e)i(inserted)d(be-)0 775 y(for)n(e)19 b(the)f(given)g(instr)o
(uction)h(handle.)26 b(All)20 b(insert)e(methods)f(r)n(eturn)h(a)h(new)
f(instr)o(uction)h(handle)f(which)i(may)0 888 y(then)i(be)g(used)f(as)i
(the)f(start)g(addr)n(ess)f(of)i(an)g(exception)e(handler)-7
b(,)23 b(for)f(example.)109 1114 y Ff(InstructionHand)o(le)48
b(start)k(=)i(il.insert\(inser)o(tio)o(n_)o(po)o(in)o(t,)2073
1227 y(InstructionCon)o(st)o(ant)o(s.)o(NO)o(P\))o(;)109
1339 y(...)109 1452 y(mg.addException)o(Ha)o(nd)o(ler)o(\(s)o(ta)o(rt)o
(,)48 b(end,)53 b(handler,)e("java.io.IOExce)o(pt)o(io)o(n"\))o(;)0
1708 y Fg(Deleting.)91 b Ft(Deletion)34 b(of)f(instr)o(uctions)g(is)h
(also)g(very)f(straightforwar)n(d;)38 b(all)e(instr)o(uction)d(handles)
g(and)0 1820 y(the)28 b(contained)g(instr)o(uctions)f(within)i(a)g
(given)g(range)f(ar)n(e)g(r)n(emoved)g(fr)n(om)h(the)f(instr)o(uction)g
(list)h(and)f(dis-)0 1933 y(posed.)e(The)c Ff(delete\(\))d
Ft(method)i(may)i(however)e(thr)n(ow)h(a)h Ff(TargetLostExcep)o(tio)o
(n)16 b Ft(when)22 b(ther)n(e)g(ar)n(e)0 2046 y(instr)o(uction)e(tar)n
(geters)e(still)j(r)n(efer)n(encing)f(one)f(of)h(the)f(deleted)f(instr)
o(uctions.)26 b(The)20 b(user)f(is)h(for)n(ced)g(to)f(handle)0
2159 y(such)30 b(exceptions)f(in)i(a)g Ff(try-catch)c
Ft(block)k(and)f(r)n(edir)n(ect)g(these)f(r)n(efer)n(ences)h(elsewher)n
(e.)49 b(The)30 b Fs(peep)j(hole)0 2272 y Ft(optimizer)23
b(described)e(in)i(section)f(A.3)h(gives)f(a)h(detailed)f(example)h
(for)f(this.)109 2498 y Ff(try)53 b({)218 2611 y(il.delete\(first)o(,)
48 b(last\);)109 2724 y(})54 b(catch\(TargetLos)o(tE)o(xce)o(pt)o(io)o
(n)48 b(e\))54 b({)218 2837 y(InstructionHand)o(le)o([])48
b(targets)j(=)k(e.getTargets\(\))o(;)218 2949 y(for\(int)d(i=0;)g(i)i
(<)g(targets.length;)48 b(i++\))53 b({)327 3062 y(InstructionTarg)o
(ete)o(r[)o(])48 b(targeters)j(=)j(targets[i].get)o(Tar)o(ge)o(te)o(rs)
o(\(\))o(;)327 3175 y(for\(int)e(j=0;)g(j)i(<)h(targeters.leng)o(th)o
(;)48 b(j++\))491 3288 y(targeters[j].up)o(da)o(te)o(Ta)o(rg)o(et\()o
(ta)o(rg)o(et)o(s[)o(i],)g(new_target\);)218 3401 y(})109
3514 y(})0 3769 y Fg(Finalizing.)92 b Ft(When)27 b(the)g(instr)o
(uction)h(list)g(is)g(r)n(eady)g(to)f(be)h(dumped)f(to)g(pur)n(e)h
(byte)f(code,)h(all)h(symbolic)0 3882 y(r)n(efer)n(ences)35
b(must)g(be)h(mapped)g(to)f(r)n(eal)i(byte)e(code)h(of)n(fsets.)67
b(This)36 b(is)g(done)f(by)h(the)f Ff(getByteCode\(\))0
3995 y Ft(method)23 b(which)i(is)f(called)h(by)f(default)g(by)g
Ff(MethodGen.getMe)o(th)o(od)o(\(\))o Ft(.)j(Afterwar)n(ds)c(you)g
(should)g(call)0 4108 y Ff(dispose\(\))c Ft(so)j(that)h(the)f(instr)o
(uction)h(handles)f(can)i(be)f(r)n(eused)e(internally)-10
b(.)29 b(This)23 b(helps)f(to)g(r)n(educe)h(mem-)0 4221
y(ory)f(usage.)109 4447 y Ff(InstructionList)48 b(il)53
b(=)i(new)e(InstructionLis)o(t\()o(\);)109 4672 y(ClassGen)106
b(cg)53 b(=)h(new)f(ClassGen\("HelloW)o(or)o(ld)o(",)48
b("java.lang.Obje)o(ct)o(",)1636 4785 y("<generated>",)h(ACC_PUBLIC)h
(|)k(ACC_SUPER,)1636 4898 y(null\);)109 5011 y(MethodGen)d(mg)i(=)h
(new)f(MethodGen\(ACC_ST)o(AT)o(IC)48 b(|)54 b(ACC_PUBLIC,)1691
5124 y(Type.VOID,)c(new)j(Type[])f({)1800 5237 y(new)h
(ArrayType\(Type.)o(ST)o(RIN)o(G,)48 b(1\))1691 5350
y(},)54 b(new)f(String[])e({)j("argv")e(},)1691 5463
y("main",)f("HelloWorld",)e(il,)k(cp\);)1863 5712 y Fq(16)p
eop
%%Page: 17 17
17 16 bop 109 407 a Ff(...)109 520 y(cg.addMethod\(mg)o(.g)o(et)o(Met)o
(ho)o(d\()o(\)\))o(;)109 633 y(il.dispose\(\);)49 b(//)k(Reuse)g
(instruction)c(handles)j(of)h(list)0 887 y Fg(3.3.5)99
b(Code)25 b(example)f(revisited)0 1063 y Ft(Using)h(instr)o(uction)g
(lists)h(gives)f(us)g(a)i(generic)e(view)h(upon)e(the)h(code:)34
b(In)25 b(Figur)n(e)g(5)h(we)f(again)i(pr)n(esent)d(the)0
1176 y(code)e(chunk)h(of)g(the)f Ff(readInt\(\))d Ft(method)i(of)i(the)
f(faculty)i(example)e(in)i(section)e(2.6:)29 b(The)22
b(local)j(variables)0 1289 y Ff(n)k Ft(and)g Ff(e1)g
Ft(both)g(hold)g(two)g(r)n(efer)n(ences)f(to)h(instr)o(uctions,)h
(de\002ning)e(their)h(scope.)47 b(Ther)n(e)29 b(ar)n(e)h(two)e
Ff(goto)p Ft(s)0 1402 y(branching)g(to)e(the)g Ff(iload)f
Ft(at)j(the)e(end)g(of)h(the)f(method.)40 b(One)27 b(of)g(the)f
(exception)g(handlers)g(is)i(displayed,)0 1515 y(too:)f(it)c(r)n(efer)n
(ences)e(the)h(start)g(and)h(the)e(end)h(of)h(the)f Ff(try)f
Ft(block)i(and)g(also)f(the)g(exception)g(handler)g(code.)0
4170 y @beginspecial 0 @llx 0 @lly 583 @urx 386 @ury
4590 @rwi @setspecial
%%BeginDocument: eps/il.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: il.eps
%%Creator: fig2dev Version 3.2 Patchlevel 1
%%CreationDate: Wed Dec 2 15:26:46 1998
%%For: dahm@che (Markus Dahm,,,,,)
%%Orientation: Portrait
%%BoundingBox: 0 0 583 386
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
-84.0 526.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
10 setmiterlimit
n -1000 9337 m -1000 -1000 l 11587 -1000 l 11587 9337 l cp clip
0.06299 0.06299 sc
% Polyline
7.500 slw
[60] 0 sd
gs clippath
5205 7530 m 5175 7650 l 5145 7530 l 5145 7665 l 5205 7665 l cp
clip
n 5175 6975 m 5175 7650 l gs col0 s gr gr
[] 0 sd
% arrowhead
n 5205 7530 m 5175 7650 l 5145 7530 l col0 s
% Polyline
[60] 0 sd
gs clippath
5595 7095 m 5625 6975 l 5655 7095 l 5655 6960 l 5595 6960 l cp
clip
n 5625 7650 m 5625 6975 l gs col0 s gr gr
[] 0 sd
% arrowhead
n 5595 7095 m 5625 6975 l 5655 7095 l col0 s
% Polyline
[60] 0 sd
gs clippath
5205 3930 m 5175 4050 l 5145 3930 l 5145 4065 l 5205 4065 l cp
clip
n 5175 3375 m 5175 4050 l gs col0 s gr gr
[] 0 sd
% arrowhead
n 5205 3930 m 5175 4050 l 5145 3930 l col0 s
% Polyline
[60] 0 sd
gs clippath
5595 3495 m 5625 3375 l 5655 3495 l 5655 3360 l 5595 3360 l cp
clip
n 5625 4050 m 5625 3375 l gs col0 s gr gr
[] 0 sd
% arrowhead
n 5595 3495 m 5625 3375 l 5655 3495 l col0 s
% Polyline
n 4380 6750 m 4275 6750 4275 6870 105 arcto 4 {pop} repeat
4275 6975 6420 6975 105 arcto 4 {pop} repeat
6525 6975 6525 6855 105 arcto 4 {pop} repeat
6525 6750 4380 6750 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4500 6930 m
gs 1 -1 sc (goto) col0 sh gr
% Polyline
n 4380 6300 m 4275 6300 4275 6420 105 arcto 4 {pop} repeat
4275 6525 6420 6525 105 arcto 4 {pop} repeat
6525 6525 6525 6405 105 arcto 4 {pop} repeat
6525 6300 4380 6300 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4455 6480 m
gs 1 -1 sc (invokevirtual) col0 sh gr
% Polyline
n 4380 5850 m 4275 5850 4275 5970 105 arcto 4 {pop} repeat
4275 6075 6420 6075 105 arcto 4 {pop} repeat
6525 6075 6525 5955 105 arcto 4 {pop} repeat
6525 5850 4380 5850 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4500 6030 m
gs 1 -1 sc (aload) col0 sh gr
% Polyline
n 4380 5400 m 4275 5400 4275 5520 105 arcto 4 {pop} repeat
4275 5625 6420 5625 105 arcto 4 {pop} repeat
6525 5625 6525 5505 105 arcto 4 {pop} repeat
6525 5400 4380 5400 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4500 5580 m
gs 1 -1 sc (getstatic) col0 sh gr
% Polyline
n 4380 4950 m 4275 4950 4275 5070 105 arcto 4 {pop} repeat
4275 5175 6420 5175 105 arcto 4 {pop} repeat
6525 5175 6525 5055 105 arcto 4 {pop} repeat
6525 4950 4380 4950 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4500 5130 m
gs 1 -1 sc (astore) col0 sh gr
% Polyline
n 4380 4500 m 4275 4500 4275 4620 105 arcto 4 {pop} repeat
4275 4725 6420 4725 105 arcto 4 {pop} repeat
6525 4725 6525 4605 105 arcto 4 {pop} repeat
6525 4500 4380 4500 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4500 4680 m
gs 1 -1 sc (goto) col0 sh gr
% Polyline
n 4380 4050 m 4275 4050 4275 4170 105 arcto 4 {pop} repeat
4275 4275 6420 4275 105 arcto 4 {pop} repeat
6525 4275 6525 4155 105 arcto 4 {pop} repeat
6525 4050 4380 4050 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4455 4230 m
gs 1 -1 sc (istore) col0 sh gr
% Polyline
gs clippath
5595 4395 m 5625 4275 l 5655 4395 l 5655 4260 l 5595 4260 l cp
clip
n 5625 4500 m 5625 4275 l gs col0 s gr gr
% arrowhead
n 5595 4395 m 5625 4275 l 5655 4395 l col0 s
% Polyline
gs clippath
5205 4380 m 5175 4500 l 5145 4380 l 5145 4515 l 5205 4515 l cp
clip
n 5175 4275 m 5175 4500 l gs col0 s gr gr
% arrowhead
n 5205 4380 m 5175 4500 l 5145 4380 l col0 s
% Polyline
gs clippath
5595 4845 m 5625 4725 l 5655 4845 l 5655 4710 l 5595 4710 l cp
clip
n 5625 4950 m 5625 4725 l gs col0 s gr gr
% arrowhead
n 5595 4845 m 5625 4725 l 5655 4845 l col0 s
% Polyline
gs clippath
5205 4830 m 5175 4950 l 5145 4830 l 5145 4965 l 5205 4965 l cp
clip
n 5175 4725 m 5175 4950 l gs col0 s gr gr
% arrowhead
n 5205 4830 m 5175 4950 l 5145 4830 l col0 s
% Polyline
gs clippath
5595 5295 m 5625 5175 l 5655 5295 l 5655 5160 l 5595 5160 l cp
clip
n 5625 5400 m 5625 5175 l gs col0 s gr gr
% arrowhead
n 5595 5295 m 5625 5175 l 5655 5295 l col0 s
% Polyline
gs clippath
5205 5280 m 5175 5400 l 5145 5280 l 5145 5415 l 5205 5415 l cp
clip
n 5175 5175 m 5175 5400 l gs col0 s gr gr
% arrowhead
n 5205 5280 m 5175 5400 l 5145 5280 l col0 s
% Polyline
gs clippath
5595 5745 m 5625 5625 l 5655 5745 l 5655 5610 l 5595 5610 l cp
clip
n 5625 5850 m 5625 5625 l gs col0 s gr gr
% arrowhead
n 5595 5745 m 5625 5625 l 5655 5745 l col0 s
% Polyline
gs clippath
5205 5730 m 5175 5850 l 5145 5730 l 5145 5865 l 5205 5865 l cp
clip
n 5175 5625 m 5175 5850 l gs col0 s gr gr
% arrowhead
n 5205 5730 m 5175 5850 l 5145 5730 l col0 s
% Polyline
gs clippath
5595 6195 m 5625 6075 l 5655 6195 l 5655 6060 l 5595 6060 l cp
clip
n 5625 6300 m 5625 6075 l gs col0 s gr gr
% arrowhead
n 5595 6195 m 5625 6075 l 5655 6195 l col0 s
% Polyline
gs clippath
5205 6180 m 5175 6300 l 5145 6180 l 5145 6315 l 5205 6315 l cp
clip
n 5175 6075 m 5175 6300 l gs col0 s gr gr
% arrowhead
n 5205 6180 m 5175 6300 l 5145 6180 l col0 s
% Polyline
gs clippath
5595 6645 m 5625 6525 l 5655 6645 l 5655 6510 l 5595 6510 l cp
clip
n 5625 6750 m 5625 6525 l gs col0 s gr gr
% arrowhead
n 5595 6645 m 5625 6525 l 5655 6645 l col0 s
% Polyline
gs clippath
5205 6630 m 5175 6750 l 5145 6630 l 5145 6765 l 5205 6765 l cp
clip
n 5175 6525 m 5175 6750 l gs col0 s gr gr
% arrowhead
n 5205 6630 m 5175 6750 l 5145 6630 l col0 s
% Polyline
n 4380 7650 m 4275 7650 4275 7770 105 arcto 4 {pop} repeat
4275 7875 6420 7875 105 arcto 4 {pop} repeat
6525 7875 6525 7755 105 arcto 4 {pop} repeat
6525 7650 4380 7650 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4455 7830 m
gs 1 -1 sc (iload) col0 sh gr
% Polyline
n 4380 8100 m 4275 8100 4275 8220 105 arcto 4 {pop} repeat
4275 8325 6420 8325 105 arcto 4 {pop} repeat
6525 8325 6525 8205 105 arcto 4 {pop} repeat
6525 8100 4380 8100 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4455 8280 m
gs 1 -1 sc (ireturn) col0 sh gr
% Polyline
gs clippath
5595 7995 m 5625 7875 l 5655 7995 l 5655 7860 l 5595 7860 l cp
clip
n 5625 8100 m 5625 7875 l gs col0 s gr gr
% arrowhead
n 5595 7995 m 5625 7875 l 5655 7995 l col0 s
% Polyline
gs clippath
5205 7980 m 5175 8100 l 5145 7980 l 5145 8115 l 5205 8115 l cp
clip
n 5175 7875 m 5175 8100 l gs col0 s gr gr
% arrowhead
n 5205 7980 m 5175 8100 l 5145 7980 l col0 s
% Polyline
gs clippath
5595 2595 m 5625 2475 l 5655 2595 l 5655 2460 l 5595 2460 l cp
clip
n 5625 2700 m 5625 2475 l gs col0 s gr gr
% arrowhead
n 5595 2595 m 5625 2475 l 5655 2595 l col0 s
% Polyline
gs clippath
5205 2580 m 5175 2700 l 5145 2580 l 5145 2715 l 5205 2715 l cp
clip
n 5175 2475 m 5175 2700 l gs col0 s gr gr
% arrowhead
n 5205 2580 m 5175 2700 l 5145 2580 l col0 s
% Polyline
n 4380 3150 m 4275 3150 4275 3270 105 arcto 4 {pop} repeat
4275 3375 6420 3375 105 arcto 4 {pop} repeat
6525 3375 6525 3255 105 arcto 4 {pop} repeat
6525 3150 4380 3150 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4500 3330 m
gs 1 -1 sc (getstatic) col0 sh gr
% Polyline
n 4380 2700 m 4275 2700 4275 2820 105 arcto 4 {pop} repeat
4275 2925 6420 2925 105 arcto 4 {pop} repeat
6525 2925 6525 2805 105 arcto 4 {pop} repeat
6525 2700 4380 2700 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4455 2880 m
gs 1 -1 sc (istore) col0 sh gr
% Polyline
n 4380 2250 m 4275 2250 4275 2370 105 arcto 4 {pop} repeat
4275 2475 6420 2475 105 arcto 4 {pop} repeat
6525 2475 6525 2355 105 arcto 4 {pop} repeat
6525 2250 4380 2250 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
4500 2430 m
gs 1 -1 sc (sipush) col0 sh gr
% Polyline
gs clippath
5595 3045 m 5625 2925 l 5655 3045 l 5655 2910 l 5595 2910 l cp
clip
n 5625 3150 m 5625 2925 l gs col0 s gr gr
% arrowhead
n 5595 3045 m 5625 2925 l 5655 3045 l col0 s
% Polyline
gs clippath
5205 3030 m 5175 3150 l 5145 3030 l 5145 3165 l 5205 3165 l cp
clip
n 5175 2925 m 5175 3150 l gs col0 s gr gr
% arrowhead
n 5205 3030 m 5175 3150 l 5145 3030 l col0 s
% Polyline
n 1350 5175 m 3600 5175 l 3600 5625 l 1350 5625 l cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
1575 5400 m
gs 1 -1 sc (IOException e1) col0 sh gr
% Polyline
n 1575 5175 m 1575 4950 l 3825 4950 l 3825 5400 l 3600 5400 l 3600 5175 l
1575 5175 l cp gs 0.00 setgray ef gr gs col0 s gr
% Polyline
n 1350 3600 m 3600 3600 l 3600 4050 l 1350 4050 l cp gs col0 s gr
/Courier-Bold ff 210.00 scf sf
1575 3825 m
gs 1 -1 sc (int n) col0 sh gr
% Polyline
n 1575 3600 m 1575 3375 l 3825 3375 l 3825 3825 l 3600 3825 l 3600 3600 l
1575 3600 l cp gs 0.00 setgray ef gr gs col0 s gr
% Polyline
n 7200 4050 m 10350 4050 l 10350 4500 l 7200 4500 l cp gs col0 s gr
% Polyline
n 7425 4050 m 7425 3825 l 10575 3825 l 10575 4275 l 10350 4275 l 10350 4050 l
8325 4050 l gs 0.00 setgray ef gr gs col0 s gr
/Courier-Bold ff 210.00 scf sf
7425 4275 m
gs 1 -1 sc (Exception handler 1) col0 sh gr
% Polyline
gs clippath
4152 5071 m 4275 5085 l 4160 5131 l 4294 5113 l 4286 5053 l cp
clip
n 3600 5175 m 4275 5085 l gs col0 s gr gr
% arrowhead
n 4152 5071 m 4275 5085 l 4160 5131 l 4156 5101 l 4152 5071 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
4190 2475 m 4275 2385 l 4243 2504 l 4309 2386 l 4256 2357 l cp
clip
n 3600 3600 m 4275 2385 l gs col0 s gr gr
% arrowhead
n 4190 2475 m 4275 2385 l 4243 2504 l 4217 2490 l 4190 2475 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
4221 6324 m 4275 6435 l 4175 6362 l 4262 6466 l 4308 6427 l cp
clip
n 3600 5625 m 4275 6435 l gs col0 s gr gr
% arrowhead
n 4221 6324 m 4275 6435 l 4175 6362 l 4198 6343 l 4221 6324 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6635 5029 m 6525 5085 l 6596 4984 l 6494 5072 l 6533 5117 l cp
clip
n 7200 4500 m 6525 5085 l gs col0 s gr gr
% arrowhead
n 6635 5029 m 6525 5085 l 6596 4984 l 6616 5006 l 6635 5029 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6645 4215 m 6525 4185 l 6645 4155 l 6510 4155 l 6510 4215 l cp
clip
n 7200 4185 m 6525 4185 l gs col0 s gr gr
% arrowhead
n 6645 4215 m 6525 4185 l 6645 4155 l 6645 4185 l 6645 4215 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6582 3395 m 6525 3285 l 6627 3355 l 6538 3254 l 6493 3294 l cp
clip
n 7200 4050 m 6525 3285 l gs col0 s gr gr
% arrowhead
n 6582 3395 m 6525 3285 l 6627 3355 l 6604 3375 l 6582 3395 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
4329 7977 m 4320 8100 l 4269 7987 l 4293 8120 l 4352 8110 l cp
clip
n 3600 4050 m 4320 8100 l gs col0 s gr gr
% arrowhead
n 4329 7977 m 4320 8100 l 4269 7987 l 4299 7982 l 4329 7977 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6649 7784 m 6525 7785 l 6633 7726 l 6503 7760 l 6518 7818 l cp
clip
n 6525 4635 m 6527 4636 l 6532 4640 l 6542 4646 l 6556 4655 l 6575 4667 l
6600 4683 l 6628 4702 l 6661 4723 l 6695 4746 l 6731 4771 l
6768 4796 l 6804 4821 l 6838 4845 l 6871 4869 l 6902 4892 l
6931 4915 l 6958 4936 l 6983 4957 l 7005 4977 l 7026 4996 l
7045 5015 l 7063 5034 l 7080 5054 l 7095 5073 l 7110 5093 l
7124 5113 l 7137 5133 l 7150 5154 l 7162 5176 l 7174 5199 l
7185 5223 l 7196 5247 l 7207 5273 l 7216 5299 l 7226 5326 l
7235 5353 l 7243 5381 l 7251 5409 l 7258 5438 l 7265 5467 l
7271 5496 l 7276 5525 l 7281 5554 l 7286 5582 l 7290 5611 l
7293 5639 l 7296 5667 l 7299 5694 l 7301 5721 l 7303 5748 l
7305 5775 l 7306 5802 l 7308 5829 l 7309 5857 l 7310 5885 l
7310 5914 l 7311 5944 l 7311 5974 l 7311 6004 l 7311 6035 l
7310 6067 l 7310 6099 l 7309 6131 l 7308 6163 l 7307 6195 l
7306 6227 l 7305 6258 l 7304 6289 l 7302 6320 l 7301 6350 l
7299 6379 l 7298 6407 l 7296 6435 l 7295 6462 l 7293 6489 l
7292 6514 l 7290 6540 l 7288 6567 l 7287 6595 l 7285 6622 l
7283 6650 l 7281 6677 l 7279 6706 l 7277 6734 l 7275 6762 l
7273 6791 l 7270 6820 l 7268 6848 l 7265 6877 l 7263 6905 l
7260 6932 l 7257 6959 l 7255 6986 l 7252 7011 l 7249 7036 l
7246 7060 l 7243 7084 l 7240 7106 l 7237 7128 l 7233 7149 l
7230 7170 l 7226 7195 l 7221 7219 l 7216 7243 l 7211 7268 l
7205 7292 l 7198 7317 l 7191 7342 l 7183 7366 l 7174 7390 l
7165 7414 l 7155 7436 l 7144 7459 l 7133 7480 l 7121 7500 l
7108 7519 l 7095 7537 l 7081 7553 l 7066 7569 l 7051 7584 l
7035 7598 l 7020 7609 l 7003 7621 l 6985 7632 l 6966 7642 l
6945 7653 l 6921 7663 l 6895 7674 l 6867 7684 l 6836 7695 l
6803 7706 l 6767 7717 l 6730 7728 l 6693 7739 l 6656 7750 l
6622 7759 l 6592 7767 l 6567 7774 l 6525 7785 l gs col0 s gr gr
% arrowhead
n 6649 7784 m 6525 7785 l 6633 7726 l 6641 7755 l 6649 7784 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6619 7615 m 6525 7695 l 6570 7580 l 6492 7690 l 6541 7725 l cp
clip
n 6525 6840 m 6526 6843 l 6529 6850 l 6533 6863 l 6540 6882 l 6549 6908 l
6560 6938 l 6572 6973 l 6585 7010 l 6598 7048 l 6610 7086 l
6622 7122 l 6632 7157 l 6642 7189 l 6650 7219 l 6657 7246 l
6663 7271 l 6667 7294 l 6671 7315 l 6673 7335 l 6675 7354 l
6675 7373 l 6674 7394 l 6672 7415 l 6669 7435 l 6663 7455 l
6656 7476 l 6648 7498 l 6637 7520 l 6624 7544 l 6610 7568 l
6595 7593 l 6579 7617 l 6564 7640 l 6550 7660 l 6525 7695 l gs col0 s gr gr
% arrowhead
n 6619 7615 m 6525 7695 l 6570 7580 l 6595 7597 l 6619 7615 l cp gs 0.00 setgray ef gr col0 s
$F2psEnd
rs
%%EndDocument
@endspecial 844 4373 a Fq(Figur)n(e)k(5:)31 b(Instr)o(uction)26
b(list)g(for)g Fh(readInt\(\))d Fq(method)0 4834 y Fg(3.3.6)99
b(Instruction)25 b(factories)0 5011 y Ft(T)-8 b(o)16
b(simplify)i(the)f(cr)n(eation)g(of)g(certain)h(instr)o(uctions)e(the)h
(user)f(can)i(use)e(the)g(supplied)g Ff(InstructionFact)o(or)o(y)0
5124 y Ft(class)28 b(which)f(of)n(fers)g(a)h(lot)f(of)g(useful)g
(methods)e(to)i(cr)n(eate)g(instr)o(uctions)f(fr)n(om)i(scratch.)42
b(Alternatively)-10 b(,)28 b(he)0 5237 y(can)j(also)g(use)e
Fs(compound)i(instructions)p Ft(:)45 b(When)29 b(pr)n(oducing)h(byte)f
(code,)j(some)d(patterns)g(typically)i(occur)0 5350 y(very)25
b(fr)n(equently)-10 b(,)24 b(for)h(instance)g(the)g(compilation)h(of)f
(arithmetic)h(or)f(comparison)g(expr)n(essions.)34 b(Y)-8
b(ou)24 b(cer)n(-)0 5463 y(tainly)k(do)f(not)g(want)h(to)f(r)n(ewrite)g
(the)g(code)g(that)g(translates)g(such)g(expr)n(essions)f(into)h(byte)g
(code)g(in)h(every)1863 5712 y Fq(17)p eop
%%Page: 18 18
18 17 bop 0 407 a Ft(place)26 b(they)f(may)h(appear)-7
b(.)36 b(In)26 b(or)n(der)e(to)h(support)f(this,)i(the)e
Fe(BCEL)j Ft(API)e(includes)h(a)g Fs(compound)g(instruction)0
520 y Ft(\(an)k(interface)f(with)f(a)i(single)e Ff(getInstructionL)o
(is)o(t\()o(\))23 b Ft(method\).)45 b(Instances)27 b(of)i(this)g(class)
g(may)g(be)0 633 y(used)21 b(in)i(any)g(place)g(wher)n(e)f(normal)h
(instr)o(uctions)f(would)g(occur)-7 b(,)23 b(particularly)h(in)f
(append)e(operations.)0 898 y Fg(Example:)43 b(Pushing)32
b(constants.)92 b Ft(Pushing)28 b(constants)g(onto)f(the)h(operand)g
(stack)g(may)h(be)g(coded)f(in)0 1011 y(dif)n(fer)n(ent)g(ways.)44
b(As)27 b(explained)h(in)g(section)g(2.2)h(ther)n(e)e(ar)n(e)h(some)f
(\223short-cut\224)h(instr)o(uctions)f(that)h(can)h(be)0
1124 y(used)20 b(to)h(make)g(the)f(pr)n(oduced)g(byte)g(code)h(mor)n(e)
g(compact.)28 b(The)20 b(smallest)i(instr)o(uction)f(to)f(push)h(a)h
(single)e Ff(1)0 1237 y Ft(onto)h(the)h(stack)g(is)g
Ff(iconst)p 1002 1237 28 4 v 30 w(1)p Ft(,)g(other)f(possibilities)i
(ar)n(e)f Ff(bipush)e Ft(\(can)k(be)e(used)f(to)h(push)f(values)i
(between)0 1350 y(-128)h(and)f(127\),)h Ff(sipush)c Ft(\(between)h
(-32768)26 b(and)c(32767\),)j(or)e Ff(ldc)e Ft(\(load)i(constant)f(fr)n
(om)h(constant)f(pool\).)146 1465 y(Instead)28 b(of)i(r)n(epeatedly)d
(selecting)i(the)g(most)f(compact)i(instr)o(uction)f(in,)j(say)-10
b(,)30 b(a)g(switch,)h(one)e(can)h(use)0 1578 y(the)20
b(compound)g Ff(PUSH)g Ft(instr)o(uction)h(whenever)f(pushing)g(a)h
(constant)g(number)g(or)g(string.)26 b(It)21 b(will)h(pr)n(oduce)0
1691 y(the)g(appr)n(opriate)g(byte)g(code)f(instr)o(uction)i(and)f
(insert)g(entries)f(into)i(to)f(constant)f(pool)h(if)i(necessary)-10
b(.)109 1929 y Ff(il.append\(new)49 b(PUSH\(cp,)i("Hello,)g
(world"\)\);)109 2042 y(il.append\(new)e(PUSH\(cp,)i(4711\)\);)0
2315 y Fg(3.3.7)99 b(Code)25 b(patterns)f(using)i(regular)e
(expressions)0 2496 y Ft(When)j(transforming)g(code,)g(for)g(instance)g
(during)g(optimization)h(or)f(when)f(inserting)h(analysis)g(method)0
2609 y(calls,)35 b(one)c(typically)h(sear)n(ches)f(for)g(certain)h
(patterns)e(of)i(code)e(to)h(perform)g(the)g(transformation)g(at.)55
b(T)-8 b(o)0 2722 y(simplify)27 b(handling)g(such)f(situations)g
Fe(BCEL)i Ft(intr)n(oduces)e(a)h(special)g(featur)n(e:)35
b(One)27 b(can)g(sear)n(ch)g(for)f(given)0 2835 y(code)17
b(patterns)e(within)j(an)g(instr)o(uction)f(list)h(using)e
Fs(r)n(egular)k(expr)n(essions)p Ft(.)30 b(In)17 b(such)g(expr)n
(essions,)f(instr)o(uctions)0 2948 y(ar)n(e)26 b(r)n(epr)n(esented)e
(by)i(symbolic)g(names,)h(e.g.)37 b(\224)p Ff(`IfInstruction')p
Ft(\224.)32 b(Meta)26 b(characters)g(like)g Ff(+)p Ft(,)h
Ff(*)p Ft(,)f(and)0 3061 y Ff(\(..|..\))20 b Ft(have)j(their)f(usual)h
(meanings.)k(Thus,)22 b(the)f(expr)n(ession)109 3300
y Ff("`NOP'+\(`ILOAD_)o(_')o(|`)o(ALO)o(AD)o(__)o('\))o(*")146
3536 y Ft(r)n(epr)n(esents)28 b(a)i(piece)f(of)h(code)f(consisting)g
(of)h(at)g(least)f(one)g Ff(NOP)g Ft(followed)g(by)h(a)g(possibly)f
(empty)g(se-)0 3649 y(quence)22 b(of)g Ff(ILOAD)f Ft(and)i
Ff(ALOAD)d Ft(instr)o(uctions.)146 3764 y(The)j Ff(search\(\))d
Ft(method)j(of)g(class)i Ff(FindPattern)18 b Ft(gets)k(an)i(instr)o
(uction)g(list)g(and)f(a)i(r)n(egular)e(expr)n(es-)0
3877 y(sion)g(as)g(ar)n(guments)f(and)h(r)n(eturns)f(an)i(array)f
(describing)g(the)g(ar)n(ea)h(of)f(matched)g(instr)o(uctions.)28
b(Additional)0 3990 y(constraints)d(to)h(the)f(matching)i(ar)n(ea)g(of)
g(instr)o(uctions,)f(which)g(can)h(not)f(be)g(implemented)f(via)j(r)n
(egular)e(ex-)0 4103 y(pr)n(essions,)21 b(may)i(be)f(expr)n(essed)e
(via)k Fs(code)g(constraints)p Ft(.)0 4376 y Fg(3.3.8)99
b(Example:)30 b(Optimizing)25 b(boolean)g(expressions.)0
4557 y Ft(In)17 b(Java,)j(boolean)d(values)h(ar)n(e)f(mapped)g(to)g(1)h
(and)f(to)g(0,)h(r)n(espectively)-10 b(.)25 b(Thus,)18
b(the)e(simplest)h(way)g(to)g(evaluate)0 4670 y(boolean)k(expr)n
(essions)e(is)j(to)f(push)f(a)i(1)g(or)f(a)h(0)g(onto)f(the)f(operand)g
(stack)h(depending)f(on)h(the)f(tr)o(uth)h(value)h(of)0
4783 y(the)i(expr)n(ession.)31 b(But)23 b(this)h(way)-10
b(,)25 b(the)e(subsequent)f(combination)k(of)e(boolean)h(expr)n
(essions)d(\(with)i Ff(&&)p Ft(,)g(e.g\))0 4896 y(yields)e(long)g
(chunks)g(of)h(code)e(that)i(push)e(lots)h(of)h(1s)g(and)f(0s)h(onto)f
(the)f(stack.)146 5011 y(When)i(the)f(code)g(has)h(been)f(\002nalized)i
(these)d(chunks)h(can)h(be)g(optimized)g(with)g(a)g Fs(peep)i(hole)f
Ft(algorithm:)0 5124 y(An)i Ff(IfInstruction)20 b Ft(\(e.g.)38
b(the)26 b(comparison)g(of)g(two)g(integers:)33 b Ff(if)p
2529 5124 V 32 w(icmpeq)p Ft(\))24 b(that)h(either)h(pr)n(oduces)f(a)0
5237 y(1)32 b(or)f(a)g(0)h(on)f(the)f(stack)h(and)g(is)h(followed)e(by)
h(an)h Ff(ifne)e Ft(instr)o(uction)g(\(branch)j(if)f(stack)f(value)h
Fd(6)p Fc(=)f Ft(0\))h(may)0 5350 y(be)d(r)n(eplaced)f(by)h(the)f
Ff(IfInstruction)23 b Ft(with)29 b(its)f(branch)i(tar)n(get)e(r)n
(eplaced)g(by)h(the)f(tar)n(get)g(of)h(the)f Ff(ifne)0
5463 y Ft(instr)o(uction:)1863 5712 y Fq(18)p eop
%%Page: 19 19
19 18 bop 109 407 a Ff(InstructionList)48 b(il)53 b(=)i(new)e
(InstructionLis)o(t\()o(\);)109 520 y(...)109 633 y(CodeConstraint)48
b(constraint)i(=)k(new)g(CodeConstraint)o(\(\))48 b({)218
746 y(public)k(boolean)f(checkCode\(Instru)o(ct)o(io)o(nH)o(an)o(dle)o
([])d(match\))k({)327 858 y(IfInstruction)d(if1)k(=)h
(\(IfInstruction\))o(ma)o(tch)o([0)o(].)o(ge)o(tI)o(nst)o(ru)o(ct)o(io)
o(n\()o(\);)327 971 y(GOTO)544 b(g)163 b(=)54 b(\(GOTO\)match[2].)o(ge)
o(tIn)o(st)o(ru)o(ct)o(io)o(n\(\))o(;)327 1084 y(return)e
(\(if1.getTarget\()o(\))c(==)54 b(match[3]\))c(&&)709
1197 y(\(g.getTarget\(\))e(==)54 b(match[4]\);)218 1310
y(})109 1423 y(};)109 1536 y(FindPattern)c(f)163 b(=)54
b(new)f(FindPattern\(il\))o(;)109 1649 y(String)325 b(pat)53
b(=)h("`IfInstruction)o('`)o(IC)o(ON)o(ST)o(_0')o(`G)o(OT)o(O')o(`I)o
(CON)o(ST)o(_1)o('")48 b(+)1091 1762 y("`NOP'\(`IFEQ'|`)o(IF)o(NE)o
('\))o(";)109 1875 y(InstructionHand)o(le)o([])g(match;)109
1988 y(for\(Instruction)o(Ha)o(nd)o(le)g(ih)54 b(=)g(f.search\(pat,)48
b(constraint\);)327 2100 y(ih)54 b(!=)g(null;)e(ih)h(=)i
(f.search\(pat,)48 b(match[0],)j(constraint\)\))e({)218
2213 y(match)j(=)j(f.getMatch\(\);)48 b(//)54 b(Constraint)c(already)h
(checked)218 2326 y(...)218 2439 y(match[0].setTar)o(ge)o(t\(m)o(at)o
(ch)o([5)o(].)o(get)o(Ta)o(rg)o(et)o(\(\))o(\);)d(//)54
b(Update)e(target)218 2552 y(...)218 2665 y(try)h({)327
2778 y(il.delete\(match)o([1])o(,)48 b(match[5]\);)218
2891 y(})54 b(catch\(TargetLos)o(tEx)o(ce)o(pt)o(io)o(n)48
b(e\))54 b({)g(...)f(})109 3004 y(})146 3325 y Ft(The)26
b(applied)g(code)f(constraint)h(object)g(ensur)n(es)f(that)h(the)f
(matched)h(code)f(r)n(eally)i(corr)n(esponds)d(to)i(the)0
3437 y(tar)n(geted)e(expr)n(ession)g(pattern.)35 b(Subsequent)24
b(application)j(of)e(this)h(algorithm)g(r)n(emoves)f(all)i(unnecessary)
0 3550 y(stack)g(operations)e(and)i(branch)h(instr)o(uctions)e(fr)n(om)
h(the)f(byte)g(code.)40 b(If)27 b(any)g(of)g(the)f(deleted)f(instr)o
(uctions)0 3663 y(is)g(still)h(r)n(efer)n(enced)d(by)i(an)h
Ff(InstructionTar)o(ge)o(te)o(r)19 b Ft(object,)25 b(the)f(r)n(efer)n
(ence)g(has)h(to)g(be)f(updated)g(in)h(the)0 3776 y Ff(catch)p
Ft(-clause.)146 3903 y(Code)g(example)h(A.1)g(gives)f(a)h(verbose)f
(example)h(of)f(how)h(to)f(cr)n(eate)h(a)g(class)g(\002le,)g(while)g
(example)g(A.3)0 4016 y(shows)e(how)i(to)f(implement)h(a)g(simple)g
(peephole)e(optimizer)i(and)g(how)g(to)f(deal)h(with)g
Ff(TargetLost)21 b Ft(ex-)0 4129 y(ceptions.)0 4468 y
Fg(Example)j(application:)91 b Ft(The)22 b(expr)n(ession)109
4803 y Ff(if\(\(a)52 b(==)i(null\))e(||)i(\(i)g(<)g(2\)\))218
4916 y(System.out.prin)o(tl)o(n\(")o(Oo)o(op)o(s")o(\);)146
5237 y Ft(can)31 b(be)f(mapped)f(to)h(both)f(of)h(the)g(chunks)f(of)h
(byte)f(code)g(shown)g(in)i(\002gur)n(e)e(3.3.8.)51 b(The)29
b(left)i(column)0 5350 y(r)n(epr)n(esents)18 b(the)i(unoptimized)g
(code)g(while)h(the)f(right)g(column)h(displays)f(the)g(same)g(code)g
(after)h(an)g(aggr)n(es-)0 5463 y(sively)i(optimizing)g(peep)e(hole)h
(algorithm)h(has)g(been)f(applied:)1863 5712 y Fq(19)p
eop
%%Page: 20 20
20 19 bop 0 1311 a Ff(5:)108 b(aload_0)0 1424 y(6:)g(ifnull)434
b(#13)0 1537 y(9:)108 b(iconst_0)0 1649 y(10:)53 b(goto)544
b(#14)0 1762 y(13:)53 b(iconst_1)0 1875 y(14:)g(nop)0
1988 y(15:)g(ifne)544 b(#36)0 2101 y(18:)53 b(iload_1)0
2214 y(19:)g(iconst_2)0 2327 y(20:)g(if_icmplt)269 b(#27)0
2440 y(23:)53 b(iconst_0)0 2553 y(24:)g(goto)544 b(#28)0
2666 y(27:)53 b(iconst_1)0 2779 y(28:)g(nop)0 2891 y(29:)g(ifne)544
b(#36)0 3004 y(32:)53 b(iconst_0)0 3117 y(33:)g(goto)544
b(#37)0 3230 y(36:)53 b(iconst_1)0 3343 y(37:)g(nop)0
3456 y(38:)g(ifeq)544 b(#52)0 3569 y(41:)53 b(getstatic)269
b(System.out)0 3682 y(44:)53 b(ldc)599 b("Ooops")0 3795
y(46:)53 b(invokevirtual)c(println)0 3908 y(52:)k(return)1899
1311 y(10:)g(aload_0)1899 1424 y(11:)g(ifnull)434 b(#19)1899
1537 y(14:)53 b(iload_1)1899 1650 y(15:)g(iconst_2)1899
1763 y(16:)g(if_icmpge)269 b(#27)1899 1876 y(19:)53 b(getstatic)269
b(System.out)1899 1989 y(22:)53 b(ldc)599 b("Ooops")1899
2102 y(24:)53 b(invokevirtual)c(println)1899 2215 y(27:)k(return)995
4181 y Fq(Figur)n(e)26 b(6:)31 b(Optimizing)25 b(boolean)h(expr)n
(essions)1863 5712 y(20)p eop
%%Page: 21 21
21 20 bop 0 410 a Fr(4)143 b(Application)33 b(areas)0
662 y Ft(Ther)n(e)20 b(ar)n(e)i(many)f(possible)g(application)h(ar)n
(eas)f(for)g Fe(BCEL)i Ft(ranging)e(fr)n(om)g(class)h(br)n(owsers,)e
(pr)n(o\002lers,)g(byte)0 774 y(code)30 b(optimizers,)i(and)e
(compilers)g(to)g(sophisticated)f(r)o(un-time)i(analysis)g(tools)e(and)
i(extensions)d(to)i(the)0 887 y(Java)24 b(language)f([AFM97,)g(MBL97].)
146 1020 y(Compilers)33 b(like)g(the)f(Barat)h(compiler)g([BS98])g(use)
f Fe(BCEL)j Ft(to)d(implement)h(a)g(byte)f(code)g(generating)0
1133 y(back)22 b(end.)27 b(Other)21 b(possible)g(application)i(ar)n
(eas)f(ar)n(e)f(the)g(static)h(analysis)g(of)g(byte)e(code)h([TK98)q(])
h(or)f(examin-)0 1246 y(ing)e(the)f(r)o(un-time)i(behavior)f(of)g
(classes)g(by)g(inserting)f(calls)i(to)f(pr)n(o\002ling)g(methods)e
(into)i(the)f(code.)26 b(Further)0 1359 y(examples)h(ar)n(e)h
(extending)e(Java)k(with)e(Eif)n(fel-like)h(assertions)d([FM98],)k
(automated)d(delegation)f([Cos98)q(],)0 1472 y(or)c(with)h(the)f
(concepts)f(of)i(\223Aspect-Oriented)e(Pr)n(ogramming\224)i([KLM)2542
1439 y Fb(+)2601 1472 y Ft(97)q(].)0 1882 y Fm(4.1)119
b(Class)30 b(loaders)0 2099 y Ft(Class)d(loaders)f(ar)n(e)h(r)n
(esponsible)f(for)h(loading)g(class)g(\002les)f(fr)n(om)i(the)e(\002le)
h(system)e(or)h(other)g(r)n(esour)n(ces)f(and)0 2212
y(passing)k(the)g(byte)h(code)f(to)g(the)g(V)-5 b(irtual)31
b(Machine)g([LB98].)50 b(A)30 b(custom)g Ff(ClassLoader)25
b Ft(object)30 b(may)g(be)0 2325 y(used)h(to)h(inter)n(cept)g(the)g
(standar)n(d)g(pr)n(ocedur)n(e)f(of)i(loading)f(a)i(class,)h(i.e.)58
b(the)31 b(system)g(class)i(loader)-7 b(,)35 b(and)0
2438 y(perform)22 b(some)g(transformations)g(befor)n(e)g(actually)i
(passing)e(the)f(byte)h(code)g(to)g(the)g(JVM.)146 2571
y(A)28 b(possible)f(scenario)h(is)g(described)f(in)h(\002gur)n(e)g(7:)
39 b(During)28 b(r)o(un-time)g(the)f(V)-5 b(irtual)28
b(Machine)h(r)n(equests)0 2683 y(a)d(custom)g(class)g(loader)g(to)f
(load)h(a)g(given)g(class.)38 b(But)25 b(befor)n(e)h(the)f(JVM)h
(actually)h(sees)d(the)h(byte)g(code,)h(the)0 2796 y(class)h(loader)f
(makes)f(a)i(\223side-step\224)e(and)h(performs)f(some)g
(transformation)h(to)g(the)f(class.)39 b(T)-8 b(o)26
b(make)g(sur)n(e)0 2909 y(that)21 b(the)f(modi\002ed)g(byte)g(code)g
(is)i(still)f(valid)i(and)e(does)e(not)h(violate)i(any)f(of)g(the)f
(JVM's)h(r)o(ules)g(it)g(is)g(checked)0 3022 y(by)i(the)e(veri\002er)i
(befor)n(e)f(the)g(JVM)h(\002nally)g(executes)e(it.)0
4050 y @beginspecial 0 @llx 0 @lly 683 @urx 144 @ury
4590 @rwi @setspecial
%%BeginDocument: eps/classloader.eps
%!PS-Adobe-2.0 EPSF-2.0
%%Title: classloader.eps
%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3
%%CreationDate: Thu Mar 18 16:45:56 1999
%%For: dahm@gromit (Markus Dahm)
%%Orientation: Portrait
%%BoundingBox: 0 0 683 144
%%Pages: 0
%%BeginSetup
%%EndSetup
%%Magnification: 1.0000
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {0 setgray} bind def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
-55.0 171.0 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/sa {save} bind def
/rs {restore} bind def
/l {lineto} bind def
/m {moveto} bind def
/rm {rmoveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/sh {show} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/sd {setdash} bind def
/ff {findfont} bind def
/sf {setfont} bind def
/scf {scalefont} bind def
/sw {stringwidth} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
10 setmiterlimit
n -1000 3712 m -1000 -1000 l 12712 -1000 l 12712 3712 l cp clip
0.06299 0.06299 sc
% Polyline
7.500 slw
n 1005 450 m 900 450 900 1020 105 arcto 4 {pop} repeat
900 1125 3045 1125 105 arcto 4 {pop} repeat
3150 1125 3150 555 105 arcto 4 {pop} repeat
3150 450 1005 450 105 arcto 4 {pop} repeat
cp gs col0 s gr
/Helvetica ff 210.00 scf sf
1350 900 m
gs 1 -1 sc (Java class file) col0 sh gr
% Polyline
n 3600 450 m 5850 450 l 5850 1125 l 3600 1125 l cp gs col0 s gr
/Helvetica ff 210.00 scf sf
4140 855 m
gs 1 -1 sc (Class loader) col0 sh gr
% Polyline
n 6750 450 m 9000 450 l 9000 1125 l 6750 1125 l cp gs col0 s gr
/Helvetica ff 210.00 scf sf
7020 855 m
gs 1 -1 sc (Byte code verifier) col0 sh gr
% Polyline
n 9450 450 m 11700 450 l 11700 1125 l 9450 1125 l cp gs col0 s gr
/Helvetica ff 210.00 scf sf
9900 900 m
gs 1 -1 sc (Interpreter/JIT) col0 sh gr
% Polyline
n 4950 1575 m 7875 1575 l 7875 2700 l 4950 2700 l cp gs col0 s gr
/Helvetica ff 210.00 scf sf
5175 2475 m
gs 1 -1 sc (Byte code transformations) col0 sh gr
/Courier-Bold ff 210.00 scf sf
5850 2025 m
gs 1 -1 sc (JavaClass) col0 sh gr
% Polyline
gs clippath
3453 735 m 3573 765 l 3453 795 l 3615 795 l 3615 735 l cp
clip
n 3150 765 m 3600 765 l gs col0 s gr gr
% arrowhead
n 3453 735 m 3573 765 l 3453 795 l 3453 765 l 3453 735 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
9303 735 m 9423 765 l 9303 795 l 9465 795 l 9465 735 l cp
clip
n 9000 765 m 9450 765 l gs col0 s gr gr
% arrowhead
n 9303 735 m 9423 765 l 9303 795 l 9303 765 l 9303 735 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6105 1428 m 6075 1548 l 6045 1428 l 6045 1590 l 6105 1590 l cp
clip
n 5850 765 m 6075 765 l 6075 1575 l gs col0 s gr gr
% arrowhead
n 6105 1428 m 6075 1548 l 6045 1428 l 6075 1428 l 6105 1428 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6603 735 m 6723 765 l 6603 795 l 6765 795 l 6765 735 l cp
clip
n 6525 1575 m 6525 765 l 6750 765 l gs col0 s gr gr
% arrowhead
n 6603 735 m 6723 765 l 6603 795 l 6603 765 l 6603 735 l cp gs 0.00 setgray ef gr col0 s
$F2psEnd
rs
%%EndDocument
@endspecial 1414 4253 a Fq(Figur)n(e)26 b(7:)k(Class)25
b(loaders)146 4672 y Ft(Using)i(class)h(loaders)f(is)g(an)h(elegant)f
(way)g(of)h(extending)d(the)i(Java)i(V)-5 b(irtual)28
b(Machine)g(with)g(new)e(fea-)0 4785 y(tur)n(es)20 b(without)g
(actually)i(modifying)f(it.)27 b(This)21 b(concept)f(enables)h
(developers)e(to)h(use)g Fs(load-time)j(r)n(e\003ection)g
Ft(to)0 4898 y(implement)28 b(their)f(ideas)h(as)g(opposed)d(to)j(the)f
(static)h(r)n(e\003ection)g(supported)d(by)j(the)f(Java)j(Re\003ection)
d(API)0 5011 y([Jav98)r(].)45 b(Load-time)28 b(transformations)g
(supply)f(the)g(user)g(with)h(a)h(new)f(level)h(of)f(abstraction.)45
b(He)27 b(is)i(not)0 5124 y(strictly)24 b(tied)f(to)h(the)f(static)h
(constraints)f(of)h(the)g(original)h(authors)e(of)h(the)f(classes)h
(but)g(may)g(customize)g(the)0 5237 y(applications)i(with)f(thir)n
(d-party)g(code)g(in)g(or)n(der)g(to)f(bene\002t)h(fr)n(om)h(new)e
(featur)n(es.)36 b(Such)25 b(transformations)0 5350 y(may)j(be)g
(executed)d(on)j(demand)f(and)h(neither)e(interfer)n(e)h(with)h(other)e
(users,)h(nor)h(alter)f(the)g(original)i(byte)0 5463
y(code.)e(In)22 b(fact,)h(class)h(loaders)d(may)i(even)f(cr)n(eate)h
(classes)f Fs(ad)i(hoc)f Ft(without)f(loading)h(a)g(\002le)g(at)f(all.)
1863 5712 y Fq(21)p eop
%%Page: 22 22
22 21 bop 0 407 a Fg(4.1.1)99 b(Example:)30 b(Poor)25
b(Man')-5 b(s)24 b(Genericity)0 587 y Ft(The)17 b(\223Poor)g(Man's)h
(Genericity\224)g(pr)n(oject)f([BD98)r(])h(that)f(extends)f(Java)j
(with)f(parameterized)f(classes,)h(for)f(ex-)0 700 y(ample,)j(uses)e
Fe(BCEL)i Ft(in)f(two)g(places)g(to)g(generate)e(instances)i(of)g
(parameterized)f(classes:)26 b(During)19 b(compile-)0
813 y(time)36 b(\(the)f(standar)n(d)g Ff(javac)f Ft(with)i(some)f
(slightly)g(changed)g(classes\))h(and)g(at)g(r)o(un-time)f(using)h(a)g
(cus-)0 926 y(tom)28 b(class)g(loader)-7 b(.)43 b(The)28
b(compiler)g(puts)f(some)g(additional)h(type)e(information)j(into)f
(class)g(\002les)g(which)g(is)0 1039 y(evaluated)e(at)h(load-time)f(by)
g(the)g(class)h(loader)-7 b(.)38 b(The)26 b(class)h(loader)e(performs)h
(some)f(transformations)g(on)0 1152 y(the)i(loaded)g(class)i(and)e
(passes)g(them)g(to)g(the)g(VM.)h(The)f(following)h(algorithm)g
(illustrates)g(how)f(the)g(load)0 1264 y(method)21 b(of)i(the)f(class)h
(loader)f(ful\002lls)i(the)e(r)n(equest)f(for)h(a)h(parameterized)f
(class,)h(e.g.)k Ff(Stack<String>)127 1487 y Ft(1.)49
b(Sear)n(ch)19 b(for)g(class)g Ff(Stack)p Ft(,)f(load)h(it,)g(and)g
(check)g(for)g(a)g(certain)g(class)h(attribute)e(containing)h
(additional)244 1600 y(type)i(information.)28 b(I.e.)f(the)22
b(attribute)g(de\002nes)f(the)h(\223r)n(eal\224)i(name)f(of)g(the)e
(class,)i(i.e.)28 b Ff(Stack<A>)p Ft(.)127 1794 y(2.)49
b(Replace)28 b(all)h(occurr)n(ences)e(and)h(r)n(efer)n(ences)f(to)g
(the)g(formal)i(type)d Ff(A)i Ft(with)g(r)n(efer)n(ences)f(to)g(the)g
(actual)244 1907 y(type)21 b Ff(String)p Ft(.)k(For)d(example)g(the)g
(method)353 2168 y Ff(void)53 b(push\(A)f(obj\))g({)i(...)g(})244
2429 y Ft(becomes)353 2690 y Ff(void)f(push\(String)c(obj\))k({)h(...)f
(})127 2952 y Ft(3.)c(Return)21 b(the)h(r)n(esulting)g(class)h(to)f
(the)g(V)-5 b(irtual)23 b(Machine.)0 3293 y Fr(References)0
3508 y Ft([AFM97])109 b(O.)29 b(Agesen,)f(S.)h(N.)f(Fr)n(eund,)h(and)g
(J.)h(C.)f(Mitchell.)54 b(Adding)27 b(T)-8 b(ype)28 b(Parameterization)
i(to)e(the)467 3621 y(Java)c(Language.)31 b(In)23 b Fs(Pr)n(oceedings)i
(OOPSLA)-5 b('97)p Ft(,)21 b(Atlanta,)i(GA,)f(1997.)0
3815 y([AP98])191 b(D.)24 b(Antonioli)f(and)h(M.)g(Pilz.)37
b(Statistische)23 b(Analyse)g(von)h(Java-Class\002les.)38
b(In)23 b(Clemens)h(Cap,)467 3928 y(editor)-7 b(,)21
b Fs(Pr)n(oceedings)k(JIT'98)p Ft(.)f(Springer)-7 b(,)22
b(1998.)0 4122 y([BD98])191 b(B.)21 b(Bokowski)f(and)i(M.)f(Dahm.)32
b(Poor)21 b(Man's)h(Genericity)g(for)f(Java.)33 b(In)21
b(Clemens)h(Cap,)g(editor)-7 b(,)467 4235 y Fs(Pr)n(oceedings)25
b(JIT'98)p Ft(.)f(Springer)-7 b(,)21 b(1998.)0 4429 y([BS98])213
b(B.)28 b(Bokowski)f(and)i(A.)f(Spiegel.)51 b(Barat)29
b(\226)h(A)e(Fr)n(ont-End)f(for)i(Java.)54 b(T)-8 b(echnical)30
b(r)n(eport,)f(Fr)n(eie)467 4542 y(Universit)8 b(\250)-38
b(at)22 b(Berlin,)g(1998.)0 4736 y([CCK98])123 b(Geof)n(f)24
b(Cohen,)f(Jef)n(f)h(Chase,)g(and)f(David)i(Kaminsky)-10
b(.)35 b(Automatic)24 b(Pr)n(ogram)f(T)-8 b(ransformation)467
4849 y(with)22 b(JOIE.)33 b(In)22 b Fs(Pr)n(oceedings)j(USENIX)c
(Annual)h(T)-10 b(echnical)23 b(Symposium)p Ft(,)g(1998.)0
5043 y([CCZ97])128 b(Suzanne)34 b(Collin,)39 b(Dominique)d(Colnet,)h
(and)e(Olivier)h(Zendra.)70 b(T)-8 b(ype)33 b(Infer)n(ence)h(for)h
(Late)467 5156 y(Binding.)22 b(The)g(SmallEif)n(fel)j(Compiler.)32
b(In)23 b Fs(Pr)n(oceedings)i(JMLC'97)p Ft(,)e(1997.)0
5350 y([Cos98])164 b(Pascal)42 b(Costanza.)90 b Fs(The)41
b(ClassFilters)i(package)p Ft(.)91 b(Universit)8 b(\250)-38
b(at)41 b(Bonn,)i Ff(http://www.cs.)467 5463 y(uni-)t(bonn.de/\230co)o
(st)o(an)o(za)o(/Cl)o(as)o(sF)o(il)o(te)o(rs/)o Ft(,)17
b(1998.)1863 5712 y Fq(22)p eop
%%Page: 23 23
23 22 bop 0 407 a Ft([FM98])180 b(C.)29 b(Fischer)f(and)g(D.)h
(Meemken.)50 b(JaW)-8 b(a:)41 b(Java)30 b(with)f(Assertions.)49
b(In)28 b(Clemens)h(Cap,)h(editor)-7 b(,)467 520 y Fs(Pr)n(oceedings)25
b(JIT'98)p Ft(.)f(Springer)-7 b(,)21 b(1998.)0 707 y([GHJV95])76
b(E.)17 b(Gamma,)k(R.)d(Helm,)h(R.)f(Johnson,)g(and)g(J.)g(Vlissides.)k
Fs(Design)d(Patterns:)27 b(Elements)19 b(of)g(Reusable)467
820 y(Object-Oriented)25 b(Softwar)n(e)p Ft(.)34 b(Addison-W)-8
b(esley)e(,)19 b(1995.)0 1008 y([GJS96])170 b(J.)32 b(Gosling,)j(B.)d
(Joy)-10 b(,)34 b(and)f(G.)f(Steele.)63 b Fs(The)33 b(Java)h(Language)f
(Speci\002cation)p Ft(.)66 b(Addison-W)-8 b(esley)e(,)467
1121 y(1996.)0 1308 y([Jav98])191 b(JavaSoft.)71 b Fs(Re\003ection)35
b(API)p Ft(.)70 b Ff(http://java.sun)o(.c)o(om)o(/pr)o(od)o(uc)o(ts)o
(/j)o(dk/)o(1.)o(1/)o(do)o(cs)o(/)467 1421 y(guide/reflecti)o(on/)o
Ft(,)17 b(1998.)0 1609 y([KH98])175 b(Ralph)33 b(Keller)f(and)h(Urs)f
(H)10 b(\250)-40 b(olzle.)65 b(Binary)32 b(Component)g(Adaptation.)63
b(In)33 b(Eric)g(Jul,)i(editor)-7 b(,)467 1722 y Fs(Pr)n(oceedings)25
b(ECOOP'98)p Ft(.)d(Springer)-7 b(,)21 b(1998.)0 1910
y([KLM)238 1877 y Fb(+)297 1910 y Ft(97])50 b(Gr)n(egor)27
b(Kiczales,)i(John)e(Lamping,)h(Anurag)f(Mendhekar)-7
b(,)27 b(Chris)h(Maeda,)g(Cristina)g(Lopes,)467 2022
y(Jean-Mar)n(c)f(Loingtier)-7 b(,)26 b(and)g(John)g(Irwin.)43
b(Aspect-Oriented)24 b(Pr)n(ogramming.)43 b(T)-8 b(echnical)27
b(r)n(e-)467 2135 y(port,)21 b(Xer)n(ox)h(Palo)h(Alto)f(Resear)n(ch)g
(Center)-7 b(,)22 b(1997.)0 2323 y([LB98])205 b(Sheng)23
b(Lian)i(and)g(Gilad)h(Bracha.)39 b(Dynamic)26 b(Class)g(Loading)d(in)i
(the)f(Java)j(V)-5 b(irtual)25 b(Machine.)467 2436 y(In)d
Fs(Pr)n(oceedings)j(OOPSLA)-5 b('98)p Ft(,)22 b(1998.)0
2623 y([L)-8 b(Y97])208 b(T)-5 b(im)35 b(Lindholm)f(and)g(Frank)g(Y)-8
b(ellin.)69 b Fs(The)35 b(Java)h(V)-7 b(irtual)35 b(Machine)g
(Speci\002cation)p Ft(.)71 b(Addison-)467 2736 y(W)-8
b(esley)e(,)20 b(1997.)0 2924 y([LZ98])200 b(Han)25 b(Bok)f(Lee)f(and)i
(Benjamin)h(G.)f(Zorn.)38 b(BIT)-5 b(:)24 b(A)h(T)-8
b(ool)24 b(for)h(Instr)o(umenting)e(Java)j(Bytecodes.)467
3037 y(In)c Fs(Pr)n(oceedings)j(USENIX)c(Symposium)j(on)e(Internet)i(T)
-10 b(echnologies)25 b(and)e(Systems)p Ft(,)h(1998.)0
3225 y([MBL97])119 b(A.C.)24 b(Myers,)g(J.)h(A.)g(Bank,)f(and)h(B.)f
(Liskov)-10 b(.)39 b(Parameterized)24 b(T)-8 b(ypes)23
b(for)i(Java.)41 b(In)25 b Fs(Pr)n(oceedings)467 3337
y(POPL)m('97)p Ft(,)c(Paris,)i(France,)f(1997.)0 3525
y([MD97])161 b(J.)23 b(Meyer)e(and)h(T)-7 b(.)23 b(Downing.)32
b Fs(Java)24 b(V)-7 b(irtual)24 b(Machine)p Ft(.)33 b(O'Reilly)-10
b(,)23 b(1997.)0 3713 y([Sil98])217 b(Shawn)28 b(Silverman.)51
b Fs(The)28 b(class\002le)i(API)p Ft(.)50 b(University)27
b(of)h(Manitoba,)i Ff(http://Meurrens)o(.)467 3826 y(ML.org/ip-)t
(Links)o(/j)o(av)o(a/)o(cod)o(eE)o(ng)o(in)o(ee)o(rin)o(g/)o(vi)o(ew)o
(er)o(s.h)o(tm)o(l)p Ft(,)16 b(1998.)0 4013 y([T)-8 b(af96])194
b(T)-8 b(ucker)23 b(T)-8 b(aft.)37 b(Pr)n(ogramming)25
b(the)e(Internet)f(in)j(Ada95.)38 b(In)24 b Fs(Pr)n(oceedings)j
(Ada-Eur)n(ope)f(Interna-)467 4126 y(tional)e(Confer)n(ence)g(on)e
(Reliable)j(Softwar)n(e)f(T)-10 b(echnologies)p Ft(,)25
b(1996.)0 4314 y([TK98])195 b(M.)35 b(Thies)f(and)h(U.)f(Kastens.)71
b(Statische)34 b(Analyse)g(von)h(Bibliotheken)f(als)i(Gr)o(undlage)f
(dy-)467 4427 y(namischer)23 b(Optimier)o(ung.)32 b(In)23
b(Clemens)f(Cap,)h(editor)-7 b(,)21 b Fs(Pr)n(oceedings)26
b(JIT'98)p Ft(.)d(Springer)-7 b(,)22 b(1998.)0 4614 y([Y)-8
b(ou98])159 b(Matt)42 b(T)-7 b(.)42 b(Y)-8 b(ourst.)92
b Fs(Inside)44 b(Java)f(Class)g(Files)p Ft(.)96 b(Laserstars)40
b(T)-8 b(echnologies,)45 b Ff(http://www.)467 4727 y(laserstars.com)o
(/ar)o(ti)o(cl)o(es)o(/d)o(dj/)o(in)o(si)o(de)o(jc)o(f/)p
Ft(,)16 b(1998.)1863 5712 y Fq(23)p eop
%%Page: 24 24
24 23 bop 0 410 a Fr(A)143 b(Code)35 b(examples)e(for)i(the)g(ClassGen)
f(API)0 658 y Fm(A.1)119 b(HelloW)-9 b(orldBuilder)i(.java)0
835 y Ft(The)18 b(following)h(Java)i(pr)n(ogram)e(r)n(eads)f(a)i(name)f
(fr)n(om)g(the)g(standar)n(d)f(input)g(and)h(prints)f(a)i(friendly)f
(\223Hello\224.)0 948 y(Since)31 b(the)f Ff(readLine\(\))d
Ft(method)j(may)h(thr)n(ow)g(an)g Ff(IOException)26 b
Ft(it)32 b(is)f(enclosed)e(by)i(a)h Ff(try-catch)0 1060
y Ft(block.)0 1268 y Ff(import)52 b(java.io.*;)0 1494
y(public)g(class)g(HelloWorld)e({)109 1607 y(public)i(static)g(void)g
(main\(String[])d(argv\))j({)218 1720 y(BufferedReader)c(in)54
b(=)g(new)f(BufferedReader\()o(new)1418 1833 y(InputStreamRead)o(er)o
(\(Sy)o(st)o(em)o(.i)o(n\))o(\);)218 1946 y(String)f(name)h(=)h(null;)
218 2172 y(try)f({)327 2284 y(System.out.prin)o(t\(")o(Pl)o(ea)o(se)48
b(enter)k(your)h(name>)f("\);)327 2397 y(name)h(=)h(in.readLine\(\);)
218 2510 y(})g(catch\(IOExcepti)o(on)48 b(e\))54 b({)g(return;)d(})218
2736 y(System.out.prin)o(tl)o(n\(")o(He)o(ll)o(o,)d(")54
b(+)g(name\);)109 2849 y(})0 2962 y(})0 3343 y Fm(A.2)119
b(HelloW)-9 b(orldBuilder)i(.java)0 3520 y Ft(W)f(e)28
b(will)i(sketch)e(her)n(e)g(how)g(the)g(above)h(Java)i(class)e(can)h
(be)f(cr)n(eated)f(fr)n(om)h(the)f(scratch)h(using)g(the)f
Fe(BCEL)0 3633 y Ft(API.)h(For)g(ease)g(of)h(r)n(eading)g(we)f(will)i
(use)e(textual)g(signatur)n(es)g(and)h(not)f(cr)n(eate)h(them)f
(dynamically)-10 b(.)51 b(For)0 3746 y(example,)22 b(the)g(signatur)n
(e)109 3954 y Ff("\(Ljava/lang/St)o(ri)o(ng)o(;\)L)o(ja)o(va)o(/l)o(an)
o(g/S)o(tr)o(in)o(gB)o(uf)o(fer)o(;")146 4161 y Ft(would)g(actually)i
(be)f(cr)n(eated)f(with)109 4369 y Ff(Type.getMethodS)o(ig)o(na)o(tur)o
(e\()o(Ty)o(pe)o(.S)o(TRI)o(NG)o(BU)o(FF)o(ER)o(,)49
b(new)k(Type[])f({)i(Type.STRING)49 b(}\);)0 4627 y Fg(A.2.1)99
b(Initialization:)0 4803 y Ft(First)22 b(we)g(cr)n(eate)g(an)i(empty)d
(class)i(and)g(an)g(instr)o(uction)f(list:)109 5011 y
Ff(ClassGen)106 b(cg)53 b(=)h(new)f(ClassGen\("HelloW)o(or)o(ld)o(",)48
b("java.lang.Obje)o(ct)o(",)1636 5124 y("<generated>",)h(ACC_PUBLIC)h
(|)k(ACC_SUPER,)1636 5237 y(null\);)109 5350 y(ConstantPoolGen)48
b(cp)53 b(=)i(cg.getConstant)o(Po)o(ol)o(\(\))o(;)49
b(//)k(cg)h(creates)d(constant)g(pool)109 5463 y(InstructionList)d(il)
53 b(=)i(new)e(InstructionLis)o(t\()o(\);)p eop
%%Page: 25 25
25 24 bop 146 407 a Ft(W)-8 b(e)26 b(then)f(cr)n(eate)i(the)e(main)j
(method,)d(supplying)g(the)h(method's)f(name)h(and)h(the)e(symbolic)i
(type)e(sig-)0 520 y(natur)n(e)d(encoded)f(with)i Ff(Type)e
Ft(objects.)109 705 y Ff(MethodGen)105 b(mg)54 b(=)g(new)f
(MethodGen\(ACC_S)o(TA)o(TI)o(C)48 b(|)55 b(ACC_PUBLIC,//)48
b(access)k(flags)1745 818 y(Type.VOID,)760 b(//)53 b(return)f(type)1745
931 y(new)i(Type[])d({)655 b(//)53 b(argument)e(types)1855
1044 y(new)i(ArrayType\(Type)o(.S)o(TRI)o(NG)o(,)48 b(1\))54
b(},)1745 1156 y(new)g(String[])d({)j("argv")d(},)j(//)g(arg)f(names)
1745 1269 y("main",)f("HelloWorld",)212 b(//)54 b(method,)d(class)1745
1382 y(il,)j(cp\);)109 1495 y(InstructionFact)o(or)o(y)48
b(factory)k(=)i(new)f(InstructionFact)o(or)o(y\()o(cg\))o(;)146
1680 y Ft(W)-8 b(e)22 b(de\002ne)f(some)h(often)g(use)f(types:)109
1865 y Ff(ObjectType)50 b(i_stream)h(=)j(new)f(ObjectType\("jav)o(a.i)o
(o.)o(In)o(pu)o(tS)o(tre)o(am)o("\))o(;)109 1978 y(ObjectType)d
(p_stream)h(=)j(new)f(ObjectType\("jav)o(a.i)o(o.)o(Pr)o(in)o(tS)o(tre)
o(am)o("\))o(;)0 2233 y Fg(A.2.2)99 b(Create)24 b(variables)h
Fa(in)f Fg(and)h Fa(name)p Fg(:)0 2410 y Ft(W)-8 b(e)16
b(call)j(the)e(constr)o(uctors,)f(i.e.)26 b(execute)15
b Ff(BufferedReader\(I)o(np)o(ut)o(St)o(rea)o(mR)o(ea)o(de)o(r\()o(Sys)
o(te)o(m.)o(in)o(\)\))o Ft(.)0 2522 y(The)j(r)n(efer)n(ence)h(to)g(the)
f Ff(BufferedReader)13 b Ft(object)19 b(stays)f(on)h(top)f(of)h(the)g
(stack)g(and)g(is)g(stor)n(ed)f(in)h(the)g(newly)0 2635
y(allocated)k Ff(in)f Ft(variable.)109 2820 y Ff(il.append\(facto)o(ry)
o(.c)o(rea)o(te)o(Ne)o(w\()o("j)o(ava)o(.i)o(o.)o(Bu)o(ff)o(ere)o(dR)o
(ea)o(de)o(r")o(\)\);)109 2933 y(il.append\(Instr)o(uc)o(ti)o(onC)o(on)
o(st)o(an)o(ts)o(.DU)o(P\))o(;)48 b(//)54 b(Use)f(predefined)d
(constant)109 3046 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(Ne)o(w\()o
("j)o(ava)o(.i)o(o.)o(In)o(pu)o(tSt)o(re)o(am)o(Re)o(ad)o(er")o(\)\))o
(;)109 3159 y(il.append\(Instr)o(uc)o(ti)o(onC)o(on)o(st)o(an)o(ts)o
(.DU)o(P\))o(;)109 3272 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(Fi)o
(el)o(dA)o(cce)o(ss)o(\(")o(ja)o(va)o(.la)o(ng)o(.S)o(ys)o(te)o(m",)e
("in",)k(i_stream,)2073 3385 y(Constants.GETS)o(TA)o(TIC)o(\)\))o(;)109
3498 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(In)o(vo)o(ke)o(\("j)o
(av)o(a.)o(io)o(.I)o(npu)o(tS)o(tr)o(ea)o(mR)o(ead)o(er)o(",)c
("<init>",)1800 3611 y(Type.VOID,)i(new)j(Type[])f({)i(i_stream)d(},)
1800 3724 y(Constants.INVOK)o(ES)o(PE)o(CI)o(AL\))o(\);)109
3837 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(In)o(vo)o(ke)o(\("j)o
(av)o(a.)o(io)o(.B)o(uff)o(er)o(ed)o(Re)o(ad)o(er")o(,)d("<init>",)j
(Type.VOID,)1800 3950 y(new)i(Type[])f({new)h(ObjectType\("ja)o(va)o
(.io)o(.R)o(ea)o(de)o(r")o(\)},)1800 4062 y(Constants.INVOK)o(ES)o(PE)o
(CI)o(AL\))o(\);)109 4288 y(LocalVariableGe)o(n)48 b(lg)54
b(=)218 4401 y(mg.addLocalVari)o(ab)o(le\()o("i)o(n")o(,)1309
4514 y(new)f(ObjectType\("jav)o(a.i)o(o.)o(Bu)o(ff)o(er)o(edR)o(ea)o
(de)o(r")o(\),)48 b(null,)k(null\);)109 4627 y(int)h(in)h(=)g
(lg.getIndex\(\);)109 4740 y(lg.setStart\(il.)o(ap)o(pe)o(nd\()o(ne)o
(w)48 b(ASTORE\(in\)\)\);)h(//)54 b(`i')f(valid)f(from)h(here)146
4925 y Ft(Cr)n(eate)23 b(local)h(variable)h Ff(name)c
Ft(and)h(initialize)j(it)e(to)f Ff(null)p Ft(.)109 5110
y Ff(lg)54 b(=)g(mg.addLocalVar)o(iab)o(le)o(\(")o(na)o(me)o(",)48
b(Type.STRING,)h(null,)j(null\);)109 5223 y(int)h(name)g(=)h
(lg.getIndex\(\);)109 5336 y(il.append\(Instr)o(uc)o(ti)o(onC)o(on)o
(st)o(an)o(ts)o(.AC)o(ON)o(ST)o(_N)o(UL)o(L\);)109 5449
y(lg.setStart\(il.)o(ap)o(pe)o(nd\()o(ne)o(w)48 b(ASTORE\(name\)\)\);)g
(//)54 b(`name')d(valid)i(from)f(here)p eop
%%Page: 26 26
26 25 bop 0 407 a Fg(A.2.3)99 b(Create)24 b(try-catch)i(block)0
584 y Ft(W)-8 b(e)31 b(r)n(emember)g(the)g(start)g(of)h(the)f(block,)j
(r)n(ead)e(a)g(line)g(fr)n(om)h(the)e(standar)n(d)g(input)g(and)h(stor)
n(e)e(it)i(into)g(the)0 697 y(variable)25 b Ff(name)p
Ft(.)109 913 y Ff(InstructionHand)o(le)48 b(try_start)i(=)218
1026 y(il.append\(facto)o(ry)o(.cr)o(ea)o(te)o(Fi)o(el)o(dAc)o(ce)o(ss)
o(\(")o(ja)o(va.)o(la)o(ng)o(.S)o(ys)o(tem)o(",)e("out",)k(p_stream,)
2182 1139 y(Constants.GETS)o(TAT)o(IC)o(\)\))o(;)109
1365 y(il.append\(new)d(PUSH\(cp,)i("Please)g(enter)h(your)h(name>)f
("\)\);)109 1478 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(In)o(vo)o
(ke)o(\("j)o(av)o(a.)o(io)o(.P)o(rin)o(tS)o(tr)o(ea)o(m")o(,)d
("print",)h(Type.VOID,)1800 1591 y(new)j(Type[])f({)i(Type.STRING)c(},)
1800 1704 y(Constants.INVOK)o(EV)o(IR)o(TU)o(AL\))o(\);)109
1817 y(il.append\(new)f(ALOAD\(in\)\);)109 1930 y(il.append\(facto)o
(ry)o(.c)o(rea)o(te)o(In)o(vo)o(ke)o(\("j)o(av)o(a.)o(io)o(.B)o(uff)o
(er)o(ed)o(Re)o(ad)o(er")o(,)f("readLine",)1800 2042
y(Type.STRING,)h(Type.NO_ARGS,)1800 2155 y(Constants.INVOK)o(EV)o(IR)o
(TU)o(AL\))o(\);)109 2268 y(il.append\(new)g(ASTORE\(name\)\);)146
2485 y Ft(Upon)22 b(normal)h(execution)f(we)g(jump)g(behind)h
(exception)e(handler)-7 b(,)22 b(the)g(tar)n(get)g(addr)n(ess)f(is)h
(not)g(known)0 2598 y(yet.)109 2815 y Ff(GOTO)53 b(g)h(=)g(new)f
(GOTO\(null\);)109 2928 y(InstructionHand)o(le)48 b(try_end)j(=)j
(il.append\(g\);)146 3144 y Ft(W)-8 b(e)22 b(add)g(the)g(exception)g
(handler)g(which)h(simply)g(r)n(eturns)e(fr)n(om)i(the)f(method.)109
3361 y Ff(InstructionHand)o(le)48 b(handler)j(=)j(il.append\(Instru)o
(ct)o(io)o(nC)o(on)o(sta)o(nt)o(s.)o(RE)o(TU)o(RN\))o(;)109
3474 y(mg.addException)o(Ha)o(nd)o(ler)o(\(t)o(ry)o(_s)o(ta)o(rt,)48
b(try_end,)j(handler,)f("java.io.IOExcep)o(ti)o(on)o("\))o(;)146
3691 y Ft(\223Normal\224)24 b(code)e(continues,)f(now)h(we)g(can)i(set)
d(the)h(branch)i(tar)n(get)e(of)g(the)g(GOT)n(O.)109
3908 y Ff(InstructionHand)o(le)48 b(ih)54 b(=)218 4020
y(il.append\(facto)o(ry)o(.cr)o(ea)o(te)o(Fi)o(el)o(dAc)o(ce)o(ss)o
(\(")o(ja)o(va.)o(la)o(ng)o(.S)o(ys)o(tem)o(",)48 b("out",)k(p_stream,)
2182 4133 y(Constants.GETS)o(TAT)o(IC)o(\)\))o(;)109
4246 y(g.setTarget\(ih\))o(;)0 4505 y Fg(A.2.4)99 b(Printing)25
b(\224Hello\224)0 4682 y Ft(String)d(concatenation)h(compiles)f(to)g
Ff(StringBuffer)17 b Ft(operations.)109 4898 y Ff(il.append\(facto)o
(ry)o(.c)o(rea)o(te)o(Ne)o(w\()o(Ty)o(pe.)o(ST)o(RI)o(NG)o(BU)o(FFE)o
(R\))o(\);)109 5011 y(il.append\(Instr)o(uc)o(ti)o(onC)o(on)o(st)o(an)o
(ts)o(.DU)o(P\))o(;)109 5124 y(il.append\(new)49 b(PUSH\(cp,)i("Hello,)
g("\)\);)109 5237 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(In)o(vo)o
(ke)o(\("j)o(av)o(a.)o(la)o(ng)o(.St)o(ri)o(ng)o(Bu)o(ff)o(er")o(,)d
("<init>",)1800 5350 y(Type.VOID,)i(new)j(Type[])f({)i(Type.STRING)c
(},)1800 5463 y(Constants.INVOK)o(ES)o(PE)o(CI)o(AL\))o(\);)p
eop
%%Page: 27 27
27 26 bop 109 407 a Ff(il.append\(new)49 b(ALOAD\(name\)\);)109
520 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(In)o(vo)o(ke)o(\("j)o(av)
o(a.)o(la)o(ng)o(.St)o(ri)o(ng)o(Bu)o(ff)o(er")o(,)f("append",)1800
633 y(Type.STRINGBUFF)o(ER)o(,)g(new)54 b(Type[])d({)j(Type.STRING)c
(},)1800 746 y(Constants.INVOK)o(EV)o(IR)o(TU)o(AL\))o(\);)109
858 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)o(In)o(vo)o(ke)o(\("j)o(av)
o(a.)o(la)o(ng)o(.St)o(ri)o(ng)o(Bu)o(ff)o(er")o(,)e("toString",)1800
971 y(Type.STRING,)h(Type.NO_ARGS,)1800 1084 y(Constants.INVOK)o(EV)o
(IR)o(TU)o(AL\))o(\);)109 1310 y(il.append\(facto)o(ry)o(.c)o(rea)o(te)
o(In)o(vo)o(ke)o(\("j)o(av)o(a.)o(io)o(.P)o(rin)o(tS)o(tr)o(ea)o(m")o
(,)g("println",)1800 1423 y(Type.VOID,)h(new)j(Type[])f({)i
(Type.STRING)c(},)1800 1536 y(Constants.INVOK)o(EV)o(IR)o(TU)o(AL\))o
(\);)109 1649 y(il.append\(Instr)o(uc)o(ti)o(onC)o(on)o(st)o(an)o(ts)o
(.RE)o(TU)o(RN)o(\);)0 1908 y Fg(A.2.5)99 b(Finalization)0
2085 y Ft(Finally)-10 b(,)26 b(we)e(have)i(to)e(set)g(the)g(stack)g
(size,)i(which)f(normally)h(would)e(be)h(computed)f(on)g(the)g(\003y)h
(and)g(add)g(a)0 2197 y(default)d(constr)o(uctor)g(method)f(to)h(the)g
(class,)h(which)g(is)g(empty)e(in)i(this)f(case.)109
2418 y Ff(mg.setMaxStack\()o(5\))o(;)109 2531 y(cg.addMethod\(mg)o(.g)o
(et)o(Met)o(ho)o(d\()o(\)\))o(;)109 2644 y(il.dispose\(\);)49
b(//)k(Allow)g(instruction)c(handles)j(to)h(be)h(reused)109
2756 y(cg.addEmptyCons)o(tr)o(uc)o(tor)o(\(A)o(CC)o(_P)o(UB)o(LIC)o
(\);)146 2977 y Ft(Last)22 b(but)h(not)f(least)g(we)g(dump)g(the)g
Ff(JavaClass)c Ft(object)23 b(to)f(a)h(\002le.)109 3197
y Ff(try)53 b({)218 3310 y(cg.getJavaClass)o(\(\))o(.du)o(mp)o(\(")o
(He)o(ll)o(oWo)o(rl)o(d.)o(cl)o(as)o(s"\))o(;)109 3423
y(})h(catch\(java.io.I)o(OE)o(xce)o(pt)o(io)o(n)48 b(e\))54
b({)g(System.err.prin)o(tl)o(n\()o(e\);)48 b(})0 3711
y Fm(A.3)119 b(Peephole.java)0 3888 y Ft(This)20 b(class)h(implements)e
(a)i(simple)f(peephole)e(optimizer)j(that)f(r)n(emoves)f(any)h(NOP)h
(instr)o(uctions)e(fr)n(om)i(the)0 4001 y(given)i(class.)0
4221 y Ff(import)52 b(java.io.*;)0 4334 y(import)g(de.fub.bytecod)o
(e.c)o(la)o(ss)o(fi)o(le)o(.*;)0 4447 y(import)g(de.fub.bytecod)o(e.g)o
(en)o(er)o(ic)o(.*)o(;)0 4560 y(import)g(de.fub.bytecod)o(e.R)o(ep)o
(os)o(it)o(or)o(y;)0 4785 y(public)g(class)g(Peephole)f({)109
4898 y(public)h(static)g(void)g(main\(String[])d(argv\))j({)218
5011 y(try)h({)327 5124 y(/*)h(Load)f(the)g(class)f(from)h(CLASSPATH.)
382 5237 y(*/)327 5350 y(JavaClass)378 b(clazz)161 b(=)54
b(Repository.looku)o(pC)o(la)o(ss)o(\(ar)o(gv)o([0)o(]\))o(;)327
5463 y(Method[])433 b(methods)51 b(=)j(clazz.getMethods)o(\(\))o(;)p
eop
%%Page: 28 28
28 27 bop 327 407 a Ff(ConstantPoolGen)48 b(cp)326 b(=)54
b(new)g(ConstantPoolGe)o(n\()o(cl)o(azz)o(.g)o(et)o(Co)o(ns)o(tan)o(tP)
o(oo)o(l\()o(\)\))o(;)327 633 y(for\(int)e(i=0;)g(i)i(<)h
(methods.length)o(;)48 b(i++\))53 b({)436 746 y(MethodGen)e(mg)381
b(=)54 b(new)f(MethodGen\(metho)o(ds)o([i)o(],)2345 858
y(clazz.getClassNa)o(me)o(\(\))o(,)48 b(cp\);)436 971
y(Method)216 b(stripped)51 b(=)j(removeNOPs\(mg\))o(;)436
1197 y(if\(stripped)c(!=)k(null\))270 b(//)54 b(Any)f(NOPs)g(stripped?)
545 1310 y(methods[i])d(=)55 b(stripped;)50 b(//)k(Overwrite)c(with)j
(stripped)e(method)327 1423 y(})327 1649 y(/*)j(Dump)f(the)g(class)f
(to)i(<class)e(name>_.class)382 1762 y(*/)327 1875 y(clazz.setConsta)o
(ntP)o(oo)o(l\()o(cp)o(.g)o(etF)o(in)o(al)o(Co)o(ns)o(tan)o(tP)o(oo)o
(l\()o(\)\))o(;)327 1988 y(clazz.dump\(claz)o(z.g)o(et)o(Cl)o(as)o(sN)o
(ame)o(\(\))c(+)54 b("_.class"\);)218 2100 y(})g(catch\(Exception)48
b(e\))54 b({)g(e.printStackTr)o(ac)o(e\(\))o(;)48 b(})109
2213 y(})109 2439 y(private)j(static)h(final)h(Method)e
(removeNOPs\(Metho)o(dG)o(en)d(mg\))53 b({)218 2552 y(InstructionList)
157 b(il)217 b(=)54 b(mg.getInstructio)o(nL)o(is)o(t\()o(\);)218
2665 y(FindPattern)377 b(f)272 b(=)54 b(new)g(FindPattern\(il)o(\);)218
2778 y(String)652 b(pat)162 b(=)54 b("\(`NOP'\)+";)c(//)k(Find)e(at)i
(least)e(one)h(NOP)218 2891 y(InstructionHand)o(le)48
b(next)107 b(=)54 b(null;)218 3004 y(int)817 b(count)52
b(=)i(0;)218 3230 y(for\(Instruction)o(Ha)o(ndl)o(e)48
b(ih)54 b(=)g(f.search\(pat\);)48 b(//)54 b(Search)e(with)g(regular)g
(expression)436 3342 y(ih)i(!=)g(null;)436 3455 y(ih)g(=)g
(f.search\(pat,)49 b(next\)\))j({)327 3681 y(InstructionHand)o(le[)o(])
c(match)k(=)j(f.getMatch\(\);)327 3794 y(InstructionHand)o(le)157
b(first)52 b(=)j(match[0];)327 3907 y(InstructionHand)o(le)157
b(last)107 b(=)55 b(match[match.le)o(ng)o(th)48 b(-)54
b(1];)327 4133 y(/*)g(Some)f(nasty)f(Java)h(compilers)d(may)j(add)g
(NOP)h(at)f(end)g(of)h(method.)382 4246 y(*/)327 4359
y(if\(\(next)d(=)j(last.getNext\(\)\))48 b(==)54 b(null\))436
4472 y(break;)327 4697 y(count)f(+=)g(match.length;)327
4923 y(/*)h(Delete)e(NOPs)g(and)i(redirect)d(any)i(references)d(to)j
(them)g(to)h(the)f(following)382 5036 y(*)h(\(non-nop\))c(instruction.)
382 5149 y(*/)327 5262 y(try)j({)436 5375 y(il.delete\(first,)48
b(last\);)p eop
%%Page: 29 29
29 28 bop 327 407 a Ff(})54 b(catch\(TargetLost)o(Ex)o(ce)o(pt)o(io)o
(n)49 b(e\))k({)436 520 y(InstructionHandl)o(e[)o(])48
b(targets)k(=)i(e.getTargets\(\))o(;)436 633 y(for\(int)e(i=0;)g(i)j(<)
f(targets.length)o(;)48 b(i++\))53 b({)545 746 y(InstructionTarge)o(te)
o(r[)o(])48 b(targeters)j(=)j(targets[i].getT)o(ar)o(ge)o(te)o(rs\()o
(\);)545 971 y(for\(int)e(j=0;)h(j)h(<)g(targeters.leng)o(th)o(;)49
b(j++\))655 1084 y(targeters[j].u)o(pd)o(at)o(eT)o(arg)o(et)o(\(t)o(ar)
o(ge)o(ts[)o(i])o(,)f(next\);)436 1197 y(})327 1310 y(})218
1423 y(})218 1649 y(Method)k(m)i(=)g(null;)218 1875 y(if\(count)d(>)j
(0\))g({)327 1988 y(System.out.prin)o(tln)o(\(")o(Re)o(mo)o(ve)o(d)49
b(")54 b(+)g(count)e(+)i(")g(NOP)f(instructions)c(from)k(method)f(")i
(+)1364 2100 y(mg.getName\(\)\);)327 2213 y(m)g(=)109
b(mg.getMethod\(\);)218 2326 y(})218 2552 y(il.dispose\(\);)49
b(//)k(Reuse)g(instruction)c(handles)218 2665 y(return)j(m;)109
2778 y(})0 2891 y(})p eop
%%Page: 30 30
30 29 bop 828 5113 a @beginspecial 13 @llx 12 @lly 383
@urx 830 @ury 2602 @rwi @setspecial
%%BeginDocument: eps/constantpool.eps
%!PS-Adobe-3.0 EPSF-3.0
%%Title: Rose Diagram(s)
%%Creator: AdobePS5.dll Version 5.0
%%CreationDate: 7/7/1999 17:45:21
%%Pages: 1
%%Orientation: Portrait
%%PageOrder: Ascend
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources: (atend)
%%DocumentData: Clean7Bit
%%TargetDevice: (HP LaserJet 5Si) (2014.108) 1
%%LanguageLevel: 2
%%BoundingBox: 13 12 383 830
%%EndComments
%%BeginProcSet: epsffit 1 0
gsave
1677.488 -356.303 translate
90 rotate
2.035 2.035 scale
%%EndProcSet
%%BeginDefaults
%%PageBoundingBox: 13 12 582 830
%%EndDefaults
%%BeginProlog
%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0
/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
ne{grestoreall}if showpage initgraphics courier setfont lmargin 720 moveto
(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt
$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}
repeat}if systemdict/showpage get exec(%%[ Error: )print errorname =print
(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end end}dup
0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking where{pop
/setpacking where{pop oldpack setpacking}if}if
%%EndResource
userdict /Pscript_WinNT_Incr 230 dict dup begin put
%%BeginResource: file Pscript_FatalError 5.0 0
/FatalErrorIf{{initgraphics findfont exch scalefont setfont counttomark 3 div
cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def
%%EndResource
/VM?{vmstatus exch sub exch pop gt{[
(This job requires more memory than is available in this printer.)100 500
(Try one or more of the following, and then print again:)100 485
(For the output format, choose Optimize For Portability.)115 470
(In the Device Settings page, make sure the Available PostScript Memory is accurate.)
115 455(Reduce the number of fonts in the document.)115 440
(Print the document in parts.)115 425 12/Times-Roman showpage
(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def
%%BeginResource: file Pscript_Win_Basic 5.0 0
/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
, d/K/stroke , d/W/widthshow , d/R/rotate , d/P/eoclip , d/L2? false
/languagelevel where{pop languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d
/yS/yshow , d/zS/xyshow , d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{,
d}bd/lw/Lw ld/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx
matrix currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit
/UtilsInit counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}
b/initialize{`{/ADO_mxRot ~ d/TextInitialised? F d reinitialize E}{U
/Pscript_Win_Data 230 dict @ ` put/ADO_mxRot ~ d/TextInitialised? F d
reinitialize}?}b/terminate{!{& self eq{exit}{E}?}loop E}b/suspend/terminate , d
/resume{` Pscript_Win_Data `}b/snap{transform 0.25 sub round 0.25 add ~ 0.25
sub round 0.25 add ~ itransform}b/dsnap{dtransform round ~ round ~ idtransform}
b<04>cvn{}d/rr{1 ^ 0 - 0 ~ - neg 0 - C}b/rp{4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b
/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool 2 ^ put}b
/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e{DefIf_El !}
b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
%%EndResource
%%BeginResource: file Pscript_Win_Utils_L2 5.0 0
/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge
{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F
setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d
/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b
%%EndResource
end
%%EndProlog
%%BeginSetup
[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
1 setlinecap 1 setlinejoin
/mysetup [ 0.24 0 0 -0.24 13.43905 829.74047 ] def
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 13 12 582 830
%%EndPageComments
%%BeginPageSetup
/DeviceRGB dup setcolorspace /colspABC exch def mysetup concat colspRefresh
%%EndPageSetup
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Win_GdiObject 5.0 0
/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
/HS_DiagCross makehatch}b/GDIBWPatternDict 25 dict @ `/PatternType 1 d
/PaintType L2?{1}{2}? d/RepsV L2?{1}{6}? d/RepsH L2?{1}{5}? d/BBox[0 0 RepsH 1]
d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d/Width 8 d/mx[Width 0
0 Height neg 0 Height]d/FGnd null d/BGnd null d/SetBGndFGnd L2?{{FGnd null ne
{FGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~ rf}if BGnd null ne{BGnd
aload ! scol}if}}{{}}? b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx
PaintData imagemask Width 0 +}repeat E}b E d/GDIBWPatternMx null d/pfprep{save
8 1 $/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/yExt ~ d/Width ~ d/FGnd ~ d/BGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0
Height 0 0]d E : GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx
matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix GDIBWPatternDict @ `
xOrg yOrg E matrix + mp CTMrestore ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill
{O}{L}? restore}b/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot
concat 0 0 snap + : 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ dsnap
YStep V ~ XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24
-0.24 +S GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx matrix
currentmatrix readonly d ; ;}if}b
%%EndResource
%%BeginResource: file Pscript_Win_GdiObject_L2 5.0 0
/mp/makepattern , d/hbf{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}
{L}? ;}b/pbf{: !/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/OutputBPP ~ d/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1
d/BBox[0 0 Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d
20 dict @ `/ImageType 1 d/Width Width d/Height Height d/ImageMatrix mx d
/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{
/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict
~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}
? ;}b
%%EndResource
end reinitialize
: N 1409 506 185 84 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol 1 Lw N 1594 505 M 1408 505 I 1408 590 I 1594 590 I C
K
0 0 0 1 scol Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Text 5.0 0
/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
{T pd_AddEm87 ~ !}{! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @
length array copy put pd_CoverFCRange}if}{!}?}? 2 ^ ~ definefont fM 5 4 -1 $
put fM 4 0 put fM makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M
currentpoint snap M 0 - 0 Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d
/ySP null d/sW null d/sSU{N/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N
/sW ~ d/ySP ~ d/xSP ~ d}b/sT{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix
astore concat 0 0 M}b/eR/; , d/AddOrigFP{{&/FontInfo known{&/FontInfo get
length 6 add}{6}? dict `/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d
/OrigFontStyle ~ d/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS
{makefont Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2
copy ~ sub 1 add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for
& E/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}bind d/mF42{15 dict ` @
4 1 $/FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254
add 255 idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for
/FDepVector Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1
Encoding length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName
length 2 add string}{FontName length 3 add string}?}? @ 0 FontName @ length
string cvs putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~
putinterval cvn 1 ^ 256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1
$ put}for & @ E/FontName get ~ definefont ! ! ! mF}b/UmF{L2?
{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
get undefinefont}forall undefinefont}b
%%EndResource
end reinitialize
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Encoding256 5.0 0
/CharCol256Encoding[/.notdef/breve/caron/dotaccent/dotlessi/fi/fl/fraction
/hungarumlaut/Lslash/lslash/minus/ogonek/ring/Zcaron/zcaron/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/exclam/quotedbl/numbersign
/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S
/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave
/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright
/asciitilde/.notdef/.notdef/.notdef/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef
/.notdef/.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet
/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef
/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/.notdef/registered
/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis
/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis]def EncodeDict/256 CharCol256Encoding put
%%EndResource
end reinitialize
%%IncludeResource: font Helvetica
F /F0 0 /256 T /Helvetica mF
/F0S18 F0 [24.66 0 0 -24.66 0 0 ] mFS
F0S18 Ji
1433 537 M (ConstantCP)[18 14 14 13 7 14 14 7 18 0]xS
0.602 0 0.199 1 scol N 1594 551 M 1408 551 I 1408 590 I 1594 590 I C
K
N 1594 565 M 1408 565 I 1408 590 I 1594 590 I C
K
: N 1292 714 375 85 rp C
1 1 0.801 1 scol L ; N 1667 713 M 1291 713 I 1291 799 I 1667 799 I C
K
0 0 0 1 scol 1324 745 M (ConstantInterfaceMethodref)[18 14 14 13 7 14 14 7 6 14 7 14 8 7 14 13 14 21 14 7 14 14 14 8 14 0]xS
0.602 0 0.199 1 scol N 1667 759 M 1291 759 I 1291 799 I 1667 799 I C
K
N 1667 773 M 1291 773 I 1291 799 I 1667 799 I C
K
: N 1710 714 262 85 rp C
1 1 0.801 1 scol L ; N 1972 713 M 1709 713 I 1709 799 I 1972 799 I C
K
0 0 0 1 scol 1734 745 M (ConstantMethodref)[18 14 14 13 7 14 14 7 21 14 7 14 14 14 8 14 0]xS
0.602 0 0.199 1 scol N 1972 759 M 1709 759 I 1709 799 I 1972 799 I C
K
N 1972 773 M 1709 773 I 1709 799 I 1972 799 I C
K
: N 1011 714 235 85 rp C
1 1 0.801 1 scol L ; N 1246 713 M 1010 713 I 1010 799 I 1246 799 I C
K
0 0 0 1 scol 1036 745 M (ConstantFieldref)[18 14 14 13 7 14 14 7 15 6 14 6 14 8 14 0]xS
0.602 0 0.199 1 scol N 1246 759 M 1010 759 I 1010 799 I 1246 799 I C
K
N 1246 773 M 1010 773 I 1010 799 I 1246 799 I C
K
: N 1516 58 213 125 rp C
1 1 0.801 1 scol L ; N 1729 57 M 1515 57 I 1515 183 I 1729 183 I C
K
0 0 0 1 scol 1546 89 M (ConstantPool)[18 14 14 13 7 14 14 7 17 14 14 0]xS
0.602 0 0.199 1 scol N 1729 103 M 1515 103 I 1515 183 I 1729 183 I C
K
N 1729 116 M 1515 116 I 1515 183 I 1729 183 I C
K
0 0 0 1 scol 1555 158 M (getConstant\(\))[14 14 7 18 14 14 13 7 14 14 7 8 0]xS
: N 1550 265 144 84 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1694 264 M 1549 264 I 1549 349 I 1694 349 I C
K
0 0 0 1 scol 1571 296 M (Constant)[18 14 14 13 7 14 14 0]xS
0.602 0 0.199 1 scol N 1694 310 M 1549 310 I 1549 349 I 1694 349 I C
K
N 1694 323 M 1549 323 I 1549 349 I 1694 349 I C
K
N 1622 223 M 1622 184 I K
N 1652 175 14 29 rp C
1 1 1 1 scol L 0 0 0 1 scol 1652 198 M (1)S
0.602 0 0.199 1 scol N 1622 184 M 1632 203 I 1622 221 I 1612 203 I 1622 184 I C
: 1 1 1 1 scol O ; K
N 1622 223 M 1622 263 I K
N 1654 245 11 28 rp C
1 1 1 1 scol L 0 0 0 1 scol 1654 268 M (*)S
N 1652 175 14 29 rp C
1 1 1 1 scol L 0 0 0 1 scol 1652 198 M (1)S
N 1654 245 11 28 rp C
1 1 1 1 scol L 0 0 0 1 scol 1654 268 M (*)S
0.602 0 0.199 1 scol N 1494 655 M 1494 591 I K
N 1123 655 M 1828 655 I K
N 1494 591 M 1509 632 I 1479 632 I C
: 1 1 1 1 scol O ; K
N 1123 713 M 1123 655 I K
: N 1743 506 219 84 rp C
1 1 0.801 1 scol L ; N 1962 505 M 1742 505 I 1742 590 I 1962 590 I C
K
0 0 0 1 scol 1769 537 M (ConstantString)[18 14 14 13 7 14 14 7 17 7 8 6 14 0]xS
0.602 0 0.199 1 scol N 1962 551 M 1742 551 I 1742 590 I 1962 590 I C
K
N 1962 565 M 1742 565 I 1742 590 I 1962 590 I C
K
: N 822 506 219 84 rp C
1 1 0.801 1 scol L ; N 1041 505 M 821 505 I 821 590 I 1041 590 I C
K
0 0 0 1 scol 849 537 M (ConstantClass)[18 14 14 13 7 14 14 7 18 6 14 13 0]xS
0.602 0 0.199 1 scol N 1041 551 M 821 551 I 821 590 I 1041 590 I C
K
N 1041 565 M 821 565 I 821 590 I 1041 590 I C
K
: N 1236 254 224 84 rp C
1 1 0.801 1 scol L ; N 1460 253 M 1235 253 I 1235 338 I 1460 338 I C
K
0 0 0 1 scol 1259 285 M (ConstantInteger)[18 14 14 13 7 14 14 7 6 14 7 14 14 14 0]xS
0.602 0 0.199 1 scol N 1460 299 M 1235 299 I 1235 338 I 1460 338 I C
K
N 1460 312 M 1235 312 I 1235 338 I 1460 338 I C
K
: N 958 254 232 84 rp C
1 1 0.801 1 scol L ; N 1190 253 M 957 253 I 957 338 I 1190 338 I C
K
0 0 0 1 scol 984 285 M (ConstantDouble)[18 14 14 13 7 14 14 7 18 14 14 14 6 0]xS
0.602 0 0.199 1 scol N 1190 299 M 957 299 I 957 338 I 1190 338 I C
K
N 1190 312 M 957 312 I 957 338 I 1190 338 I C
K
: N 1102 506 207 84 rp C
1 1 0.801 1 scol L ; N 1309 505 M 1101 505 I 1101 590 I 1309 590 I C
K
0 0 0 1 scol 1127 537 M (ConstantFloat)[18 14 14 13 7 14 14 7 15 6 14 14 0]xS
0.602 0 0.199 1 scol N 1309 551 M 1101 551 I 1101 590 I 1309 590 I C
K
N 1309 565 M 1101 565 I 1101 590 I 1309 590 I C
K
: N 708 254 206 84 rp C
1 1 0.801 1 scol L ; N 914 253 M 707 253 I 707 338 I 914 338 I C
K
0 0 0 1 scol 732 285 M (ConstantLong)[18 14 14 13 7 14 14 7 14 14 14 0]xS
0.602 0 0.199 1 scol N 914 299 M 707 299 I 707 338 I 914 338 I C
K
N 914 312 M 707 312 I 707 338 I 914 338 I C
K
: N 2025 506 246 84 rp C
1 1 0.801 1 scol L ; N 2271 505 M 2024 505 I 2024 590 I 2271 590 I C
K
0 0 0 1 scol 2051 537 M (ConstantUnicode)[18 14 14 13 7 14 14 7 18 14 6 13 14 14 0]xS
0.602 0 0.199 1 scol N 2271 545 M 2024 545 I 2024 590 I 2271 590 I C
K
N 2271 558 M 2024 558 I 2024 590 I 2271 590 I C
K
: N 1790 254 322 84 rp C
1 1 0.801 1 scol L ; N 2112 253 M 1789 253 I 1789 338 I 2112 338 I C
K
0 0 0 1 scol 1817 285 M (ConstantNameAndType)[18 14 14 13 7 14 14 7 18 14 22 14 17 14 14 14 12 14 0]xS
0.602 0 0.199 1 scol N 2112 299 M 1789 299 I 1789 338 I 2112 338 I C
K
N 2112 312 M 1789 312 I 1789 338 I 2112 338 I C
K
: N 2172 254 194 84 rp C
1 1 0.801 1 scol L ; N 2366 253 M 2171 253 I 2171 338 I 2366 338 I C
K
0 0 0 1 scol 2195 285 M (ConstantUtf8)[18 14 14 13 7 14 14 7 18 7 7 0]xS
0.602 0 0.199 1 scol N 2366 293 M 2171 293 I 2171 338 I 2366 338 I C
K
N 2366 306 M 2171 306 I 2171 338 I 2366 338 I C
K
N 1626 428 M 1626 350 I K
N 809 428 M 2269 428 I K
N 1626 350 M 1641 391 I 1611 391 I C
: 1 1 1 1 scol O ; K
N 933 505 M 933 428 I K
N 1848 505 M 1848 428 I K
N 1068 339 M 1068 428 I K
N 2146 505 M 2146 428 I K
N 809 339 M 809 428 I K
N 2269 339 M 2269 428 I K
N 1500 505 M 1500 428 I K
N 1336 339 M 1336 428 I K
N 1201 505 M 1201 428 I K
N 1926 339 M 1926 428 I K
N 1468 713 M 1468 655 I K
N 1828 713 M 1828 655 I K
LH
%%PageTrailer
%%Trailer
%%DocumentNeededResources:
%%+ font Helvetica
%%DocumentSuppliedResources:
Pscript_WinNT_Incr dup /terminate get exec
%%EOF
grestore
%%EndDocument
@endspecial 824 5316 a Fq(Figur)n(e)26 b(8:)k(UML)25
b(diagram)g(for)h(the)f(ConstantPool)i(API)p eop
%%Page: 31 31
31 30 bop 749 5113 a @beginspecial 13 @llx 12 @lly 410
@urx 830 @ury 2792 @rwi @setspecial
%%BeginDocument: eps/instructions.eps
%!PS-Adobe-3.0 EPSF-3.0
%%Title: Rose Diagram(s)
%%Creator: AdobePS5.dll Version 5.0
%%CreationDate: 7/7/1999 17:43:39
%%Pages: 1
%%Orientation: Portrait
%%PageOrder: Ascend
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources: (atend)
%%DocumentData: Clean7Bit
%%TargetDevice: (HP LaserJet 5Si) (2014.108) 1
%%LanguageLevel: 2
%%BoundingBox: 13 12 410 830
%%EndComments
%%BeginProcSet: epsffit 1 0
gsave
1409.418 -167.686 translate
90 rotate
1.711 1.711 scale
%%EndProcSet
%%BeginDefaults
%%PageBoundingBox: 13 12 582 830
%%EndDefaults
%%BeginProlog
%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0
/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false
setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype
ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch
def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0
rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def
/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def
typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72
def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp
exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def
/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype
{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint}
readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop
(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def
/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- )
tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup
xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint
tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck
{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(])
tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup
rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}
forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier
/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin
$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0
ne{grestoreall}if showpage initgraphics courier setfont lmargin 720 moveto
(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt
$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}
repeat}if systemdict/showpage get exec(%%[ Error: )print errorname =print
(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end end}dup
0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking where{pop
/setpacking where{pop oldpack setpacking}if}if
%%EndResource
userdict /Pscript_WinNT_Incr 230 dict dup begin put
%%BeginResource: file Pscript_FatalError 5.0 0
/FatalErrorIf{{initgraphics findfont exch scalefont setfont counttomark 3 div
cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def
%%EndResource
/VM?{vmstatus exch sub exch pop gt{[
(This job requires more memory than is available in this printer.)100 500
(Try one or more of the following, and then print again:)100 485
(For the output format, choose Optimize For Portability.)115 470
(In the Device Settings page, make sure the Available PostScript Memory is accurate.)
115 455(Reduce the number of fonts in the document.)115 440
(Print the document in parts.)115 425 12/Times-Roman showpage
(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf}if}bind def
%%BeginResource: file Pscript_Win_Basic 5.0 0
/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^
/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/-
/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true ,
d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C
/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M
/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d
/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage
, d/K/stroke , d/W/widthshow , d/R/rotate , d/P/eoclip , d/L2? false
/languagelevel where{pop languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d
/yS/yshow , d/zS/xyshow , d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{,
d}bd/lw/Lw ld/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx
matrix currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit
/UtilsInit counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}
b/initialize{`{/ADO_mxRot ~ d/TextInitialised? F d reinitialize E}{U
/Pscript_Win_Data 230 dict @ ` put/ADO_mxRot ~ d/TextInitialised? F d
reinitialize}?}b/terminate{!{& self eq{exit}{E}?}loop E}b/suspend/terminate , d
/resume{` Pscript_Win_Data `}b/snap{transform 0.25 sub round 0.25 add ~ 0.25
sub round 0.25 add ~ itransform}b/dsnap{dtransform round ~ round ~ idtransform}
b<04>cvn{}d/rr{1 ^ 0 - 0 ~ - neg 0 - C}b/rp{4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b
/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool 2 ^ put}b
/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e{DefIf_El !}
b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b
%%EndResource
%%BeginResource: file Pscript_Win_Utils_L2 5.0 0
/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge
{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $
snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F
setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d
/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b
%%EndResource
end
%%EndProlog
%%BeginSetup
[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec
1 setlinecap 1 setlinejoin
/mysetup [ 0.24 0 0 -0.24 13.43905 829.74047 ] def
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 13 12 582 830
%%EndPageComments
%%BeginPageSetup
/DeviceRGB dup setcolorspace /colspABC exch def mysetup concat colspRefresh
%%EndPageSetup
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Win_GdiObject 5.0 0
/SavedCTM null d/CTMsave{/SavedCTM SavedCTM currentmatrix d}b/CTMrestore
{SavedCTM setmatrix}b/mp null d/ADO_mxRot null d/GDIHMatrix null d
/GDIHPatternDict 22 dict d GDIHPatternDict `/PatternType 1 d/PaintType 2 d/Reps
L2?{1}{5}? d/XStep 8 Reps mul d/YStep XStep d/BBox[0 0 XStep YStep]d/TilingType
1 d/PaintProc{` 1 Lw[]0 sd PaintData , exec E}b/FGnd null d/BGnd null d
/HS_Horizontal{horiz}b/HS_Vertical{vert}b/HS_FDiagonal{fdiag}b/HS_BDiagonal
{biag}b/HS_Cross{horiz vert}b/HS_DiagCross{fdiag biag}b/MaxXYStep XStep YStep
gt{XStep}{YStep}? d/horiz{Reps{0 4 M XStep 0 - 0 8 +}repeat 0 -8 Reps mul + K}b
/vert{Reps{4 0 M 0 YStep - 8 0 +}repeat 0 -8 Reps mul + K}b/biag{Reps{0 0 M
MaxXYStep @ - 0 YStep neg M MaxXYStep @ - 0 8 +}repeat 0 -8 Reps mul + 0 YStep
M 8 8 - K}b/fdiag{Reps{0 0 M MaxXYStep @ neg - 0 YStep M MaxXYStep @ neg - 0 8
+}repeat 0 -8 Reps mul + MaxXYStep @ M 8 -8 - K}b E/makehatch{4 -2 $/yOrg ~ d
/xOrg ~ d GDIHPatternDict/PaintData 3 -1 $ put CTMsave GDIHMatrix setmatrix
GDIHPatternDict matrix xOrg yOrg + mp CTMrestore ~ U ~ 2 ^ put}b/h0{/h0
/HS_Horizontal makehatch}b/h1{/h1/HS_Vertical makehatch}b/h2{/h2/HS_FDiagonal
makehatch}b/h3{/h3/HS_BDiagonal makehatch}b/h4{/h4/HS_Cross makehatch}b/h5{/h5
/HS_DiagCross makehatch}b/GDIBWPatternDict 25 dict @ `/PatternType 1 d
/PaintType L2?{1}{2}? d/RepsV L2?{1}{6}? d/RepsH L2?{1}{5}? d/BBox[0 0 RepsH 1]
d/TilingType 1 d/XStep 1 d/YStep 1 d/Height 8 RepsV mul d/Width 8 d/mx[Width 0
0 Height neg 0 Height]d/FGnd null d/BGnd null d/SetBGndFGnd L2?{{FGnd null ne
{FGnd aload ! scol BBox aload ! 2 ^ sub ~ 3 ^ sub ~ rf}if BGnd null ne{BGnd
aload ! scol}if}}{{}}? b/PaintProc{` SetBGndFGnd RepsH{Width Height F mx
PaintData imagemask Width 0 +}repeat E}b E d/GDIBWPatternMx null d/pfprep{save
8 1 $/PatternOfTheDay 8 1 $ GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/yExt ~ d/Width ~ d/FGnd ~ d/BGnd ~ d/Height yExt RepsV mul d/mx[Width 0 0
Height 0 0]d E : GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx
matrix currentmatrix d ; CTMsave GDIBWPatternMx setmatrix GDIBWPatternDict @ `
xOrg yOrg E matrix + mp CTMrestore ~ !}b/pfbf{/fEOFill ~ d pfprep hbf fEOFill
{O}{L}? restore}b/GraphInit{GDIHMatrix null eq{/SavedCTM matrix d : ADO_mxRot
concat 0 0 snap + : 0.48 @ GDIHPatternDict ` YStep mul ~ XStep mul ~ dsnap
YStep V ~ XStep V ~ E +S/GDIHMatrix matrix currentmatrix readonly d ; : 0.24
-0.24 +S GDIBWPatternDict ` Width Height E dsnap +S/GDIBWPatternMx matrix
currentmatrix readonly d ; ;}if}b
%%EndResource
%%BeginResource: file Pscript_Win_GdiObject_L2 5.0 0
/mp/makepattern , d/hbf{setpattern}b/hf{:/fEOFill ~ d ~ ! setpattern fEOFill{O}
{L}? ;}b/pbf{: !/fEOFill ~ d GDIBWPatternDict `/yOrg ~ d/xOrg ~ d/PaintData ~ d
/OutputBPP ~ d/Height ~ d/Width ~ d/PaintType 1 d/PatternType 1 d/TilingType 1
d/BBox[0 0 Width Height]d/XStep Width d/YStep Height d/mx xOrg yOrg matrix + d
20 dict @ `/ImageType 1 d/Width Width d/Height Height d/ImageMatrix mx d
/BitsPerComponent 8 d OutputBPP 24 eq{/Decode[0 1 0 1 0 1]d}{OutputBPP 8 eq{
/Decode[0 1]d}{/Decode[0 1 0 1 0 1 0 1]d}?}?/DataSource{PaintData}d E/ImageDict
~ d/PaintProc{` ImageDict image E}b & mx makepattern setpattern E fEOFill{O}{L}
? ;}b
%%EndResource
end reinitialize
: N 1432 65 209 154 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol 1 Lw N 1641 64 M 1431 64 I 1431 219 I 1641 219 I C
K
0 0 0 1 scol Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Text 5.0 0
/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d
/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^
length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets
{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{&
/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get}
if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{
{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get
StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $
{T pd_AddEm87 ~ !}{! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @
length array copy put pd_CoverFCRange}if}{!}?}? 2 ^ ~ definefont fM 5 4 -1 $
put fM 4 0 put fM makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M
currentpoint snap M 0 - 0 Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d
/ySP null d/sW null d/sSU{N/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N
/sW ~ d/ySP ~ d/xSP ~ d}b/sT{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix
astore concat 0 0 M}b/eR/; , d/AddOrigFP{{&/FontInfo known{&/FontInfo get
length 6 add}{6}? dict `/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d
/OrigFontStyle ~ d/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS
{makefont Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2
copy ~ sub 1 add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for
& E/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}bind d/mF42{15 dict ` @
4 1 $/FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254
add 255 idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for
/FDepVector Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1
Encoding length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName
length 2 add string}{FontName length 3 add string}?}? @ 0 FontName @ length
string cvs putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~
putinterval cvn 1 ^ 256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1
$ put}for & @ E/FontName get ~ definefont ! ! ! mF}b/UmF{L2?
{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName
get undefinefont}forall undefinefont}b
%%EndResource
end reinitialize
Pscript_WinNT_Incr begin
%%BeginResource: file Pscript_Encoding256 5.0 0
/CharCol256Encoding[/.notdef/breve/caron/dotaccent/dotlessi/fi/fl/fraction
/hungarumlaut/Lslash/lslash/minus/ogonek/ring/Zcaron/zcaron/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/exclam/quotedbl/numbersign
/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma
/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S
/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave
/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright
/asciitilde/.notdef/.notdef/.notdef/quotesinglbase/florin/quotedblbase/ellipsis
/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/.notdef
/.notdef/.notdef/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet
/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/.notdef/.notdef
/Ydieresis/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/.notdef/registered
/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph
/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter
/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis
/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve
/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis]def EncodeDict/256 CharCol256Encoding put
%%EndResource
end reinitialize
%%IncludeResource: font Helvetica
F /F0 0 /256 T /Helvetica mF
/F0S21 F0 [33.09 0 0 -33.09 0 0 ] mFS
F0S21 Ji
1461 104 M (Instruction)[9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 1641 117 M 1431 117 I 1431 219 I 1641 219 I C
K
N 1641 212 M 1431 212 I 1431 219 I 1641 219 I C
K
0 0 0 1 scol 1478 153 M (tag)[9 17 0]xS
1478 191 M (length)[7 17 18 18 9 0]xS
: N 575 326 321 98 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 896 325 M 574 325 I 574 424 I 896 424 I C
K
0 0 0 1 scol 609 365 M (BranchInstruction)[22 11 17 18 17 18 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 896 378 M 574 378 I 574 424 I 896 424 I C
K
N 896 396 M 574 396 I 574 424 I 896 424 I C
K
: N 822 556 164 154 rp C
1 1 0.801 1 scol L ; N 986 555 M 821 555 I 821 710 I 986 710 I C
K
0 0 0 1 scol 859 595 M (Select)[22 17 7 17 17 0]xS
0.602 0 0.199 1 scol N 986 608 M 821 608 I 821 710 I 986 710 I C
K
N 986 702 M 821 702 I 821 710 I 986 710 I C
K
0 0 0 1 scol 868 644 M (targets)[9 17 11 18 17 9 0]xS
868 682 M (keys)[16 17 15 0]xS
: N 584 815 303 100 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 887 814 M 583 814 I 583 915 I 887 915 I C
K
0 0 0 1 scol 599 855 M (LOOKUPSWITCH)[18 26 26 22 24 22 22 34 9 21 24 0]xS
0.602 0 0.199 1 scol N 887 868 M 583 868 I 583 915 I 887 915 I C
K
N 887 886 M 583 886 I 583 915 I 887 915 I C
K
: N 964 815 267 100 rp C
1 1 0.801 1 scol L ; N 1231 814 M 963 814 I 963 915 I 1231 915 I C
K
0 0 0 1 scol 978 855 M (TABLESWITCH)[21 22 22 18 22 22 34 9 21 24 0]xS
0.602 0 0.199 1 scol N 1231 868 M 963 868 I 963 915 I 1231 915 I C
K
N 1231 886 M 963 886 I 963 915 I 1231 915 I C
K
: N 567 557 208 100 rp C
1 1 0.801 1 scol L ; N 775 556 M 566 556 I 566 657 I 775 657 I C
K
0 0 0 1 scol 587 597 M (IfInstruction)[9 10 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 775 609 M 566 609 I 566 657 I 775 657 I C
K
N 775 628 M 566 628 I 566 657 I 775 657 I C
K
: N 393 557 143 100 rp C
1 1 0.801 1 scol L ; N 536 556 M 392 556 I 392 657 I 536 657 I C
K
0 0 0 1 scol 415 597 M (GOTO)[26 26 21 0]xS
0.602 0 0.199 1 scol N 536 609 M 392 609 I 392 657 I 536 657 I C
K
N 536 628 M 392 628 I 392 657 I 536 657 I C
K
N 730 499 M 730 425 I K
N 469 499 M 910 499 I K
N 730 425 M 748 473 I 712 473 I C
: 1 1 1 1 scol O ; K
N 469 556 M 469 499 I K
: N 1843 118 290 100 rp C
1 1 0.801 1 scol L ; N 2133 117 M 1842 117 I 1842 218 I 2133 218 I C
K
0 0 0 1 scol 1865 158 M (ReturnInstruction)[24 17 9 18 11 18 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 2133 168 M 1842 168 I 1842 218 I 2133 218 I C
K
N 2133 186 M 1842 186 I 1842 218 I 2133 218 I C
K
: N 1004 325 264 99 rp C
1 1 0.801 1 scol L ; N 1268 324 M 1003 324 I 1003 424 I 1268 424 I C
K
0 0 0 1 scol 1023 364 M (ArrayInstruction)[22 11 11 17 15 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 1268 377 M 1003 377 I 1003 424 I 1268 424 I C
K
N 1268 396 M 1003 396 I 1003 424 I 1268 424 I C
K
: N 1704 332 232 188 rp C
1 1 0.801 1 scol L ; N 1936 331 M 1703 331 I 1703 520 I 1936 520 I C
K
0 0 0 1 scol 1722 372 M (CPInstruction)[24 22 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 1936 382 M 1703 382 I 1703 520 I 1936 520 I C
K
N 1936 438 M 1703 438 I 1703 520 I 1936 520 I C
K
0 0 0 1 scol 1751 418 M (index)[7 18 18 17 0]xS
1751 494 M (getType\(\))[18 17 9 21 15 18 17 11 0]xS
: N 1038 118 274 100 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1312 117 M 1037 117 I 1037 218 I 1312 218 I C
K
0 0 0 1 scol 1059 158 M (StackInstruction)[22 9 17 17 16 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 1312 170 M 1037 170 I 1037 218 I 1312 218 I C
K
N 1312 189 M 1037 189 I 1037 218 I 1312 218 I C
K
: N 1312 325 345 99 rp C
1 1 0.801 1 scol L ; N 1657 324 M 1311 324 I 1311 424 I 1657 424 I C
K
0 0 0 1 scol 1329 364 M (ConversionInstruction)[24 17 18 15 17 11 17 7 17 18 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 1657 377 M 1311 377 I 1311 424 I 1657 424 I C
K
N 1657 396 M 1311 396 I 1311 424 I 1657 424 I C
K
N 675 556 M 675 499 I K
: N 619 118 337 100 rp C
1 1 0.801 1 scol L ; N 956 117 M 618 117 I 618 218 I 956 218 I C
K
0 0 0 1 scol 641 158 M (ArithmeticInstruction)[22 11 7 9 18 27 17 9 7 17 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 956 170 M 618 170 I 618 218 I 956 218 I C
K
N 956 189 M 618 189 I 618 218 I 956 218 I C
K
: N 1974 326 390 148 rp C
1 1 0.801 1 scol L ; N 2364 325 M 1973 325 I 1973 474 I 2364 474 I C
K
0 0 0 1 scol 1998 366 M (LocalVariableInstruction)[18 17 17 17 7 22 17 11 7 17 18 7 17 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 2364 376 M 1973 376 I 1973 474 I 2364 474 I C
K
N 2364 433 M 1973 433 I 1973 474 I 2364 474 I C
K
0 0 0 1 scol 2020 412 M (index)[7 18 18 17 0]xS
: N 1392 869 263 148 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 1655 868 M 1391 868 I 1391 1017 I 1655 1017 I C
K
0 0 0 1 scol 1414 908 M (FieldInstruction)[20 7 17 7 18 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 1655 921 M 1391 921 I 1391 1017 I 1655 1017 I C
K
N 1655 940 M 1391 940 I 1391 1017 I 1655 1017 I C
K
0 0 0 1 scol 1439 995 M (getFieldType\(\))[18 17 9 20 7 17 7 18 21 15 18 17 11 0]xS
: N 1735 869 351 148 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 2086 868 M 1734 868 I 1734 1017 I 2086 1017 I C
K
0 0 0 1 scol 1790 908 M (InvokeInstruction)[9 18 15 17 16 17 9 18 17 9 11 18 17 9 7 17 0]xS
0.602 0 0.199 1 scol N 2086 919 M 1734 919 I 1734 1017 I 2086 1017 I C
K
N 2086 937 M 1734 937 I 1734 1017 I 2086 1017 I C
K
0 0 0 1 scol 1781 992 M (getArgumentTypes\(\))[18 17 9 22 11 18 18 27 17 18 9 21 15 18 17 17 11 0]xS
0.602 0 0.199 1 scol N 1539 293 M 1539 220 I K
N 703 293 M 2171 293 I K
N 1539 220 M 1557 269 I 1522 269 I C
: 1 1 1 1 scol O ; K
N 2171 325 M 2171 293 I K
N 1826 331 M 1826 293 I K
N 898 784 M 898 711 I K
N 737 784 M 1069 784 I K
N 898 711 M 916 760 I 880 760 I C
: 1 1 1 1 scol O ; K
N 737 814 M 737 784 I K
N 1116 324 M 1116 293 I K
N 792 219 M 792 293 I K
N 1487 324 M 1487 293 I K
N 1984 219 M 1984 293 I K
N 1166 219 M 1166 293 I K
: N 1554 623 248 148 rp C
1 1 0.801 1 scol L ; N 1802 622 M 1553 622 I 1553 771 I 1802 771 I C
K
0 0 0 1 scol 1572 663 M (FieldOrMethod)[20 7 17 7 18 26 11 27 17 9 18 17 0]xS
0.602 0 0.199 1 scol N 1802 676 M 1553 676 I 1553 771 I 1802 771 I C
K
N 1802 694 M 1553 694 I 1553 771 I 1802 771 I C
K
0 0 0 1 scol 1601 749 M (getName\(\))[18 17 9 24 17 27 17 11 0]xS
: N 2179 635 186 99 rp C
1 1 0.801 1 scol L ; 0.602 0 0.199 1 scol N 2365 634 M 2178 634 I 2178 734 I 2365 734 I C
K
0 0 0 1 scol 2232 674 M (NEW)[24 22 0]xS
0.602 0 0.199 1 scol N 2365 684 M 2178 684 I 2178 734 I 2365 734 I C
K
N 2365 703 M 2178 703 I 2178 734 I 2365 734 I C
K
N 703 325 M 703 293 I K
N 1820 594 M 1820 521 I K
N 1657 594 M 2249 594 I K
N 1820 521 M 1838 570 I 1802 570 I C
: 1 1 1 1 scol O ; K
: N 1889 635 250 99 rp C
1 1 0.801 1 scol L ; N 2139 634 M 1888 634 I 1888 734 I 2139 734 I C
K
0 0 0 1 scol 1907 674 M (INSTANCEOF)[9 24 22 21 22 24 24 22 26 0]xS
0.602 0 0.199 1 scol N 2139 684 M 1888 684 I 1888 734 I 2139 734 I C
K
N 2139 703 M 1888 703 I 1888 734 I 2139 734 I C
K
N 2014 634 M 2014 594 I K
N 2249 634 M 2249 594 I K
N 1657 622 M 1657 594 I K
N 1069 814 M 1069 784 I K
N 1677 845 M 1677 772 I K
N 1511 845 M 1907 845 I K
N 1677 772 M 1695 821 I 1660 821 I C
: 1 1 1 1 scol O ; K
N 1907 868 M 1907 845 I K
N 1511 868 M 1511 845 I K
N 910 555 M 910 499 I K
LH
%%PageTrailer
%%Trailer
%%DocumentNeededResources:
%%+ font Helvetica
%%DocumentSuppliedResources:
Pscript_WinNT_Incr dup /terminate get exec
%%EOF
grestore
%%EndDocument
@endspecial 880 5316 a Fq(Figur)n(e)26 b(9:)31 b(UML)25
b(diagram)g(for)g(the)h(Instr)o(uction)g(API)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF