This file is indexed.

/usr/share/doc/libserp-java/api/serp/bytecode/package-summary.html is in libserp-java-doc 1.15.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>serp.bytecode (Serp 1.15.1 API)</title>
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="serp.bytecode (Serp 1.15.1 API)";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Package</li>
<li><a href="../../serp/bytecode/lowlevel/package-summary.html">Next Package</a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?serp/bytecode/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Package" class="title">Package&nbsp;serp.bytecode</h1>
<div class="docSummary">
<div class="block"><strong>Bytecode Manipuation</strong></div>
</div>
<p>See:&nbsp;<a href="#package_description">Description</a></p>
</div>
<div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Interface Summary table, listing interfaces, and an explanation">
<caption><span>Interface Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Interface</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/BCEntity.html" title="interface in serp.bytecode">BCEntity</a></td>
<td class="colLast">
<div class="block">Interface implemented by all bytecode entities.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Constants.html" title="interface in serp.bytecode">Constants</a></td>
<td class="colLast">
<div class="block">Interface to track constants used in bytecode.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/InstructionPtr.html" title="interface in serp.bytecode">InstructionPtr</a></td>
<td class="colLast">
<div class="block">An entity that maintains ptrs to instructions in a code block.</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/Annotated.html" title="class in serp.bytecode">Annotated</a></td>
<td class="colLast">
<div class="block">An annotated entity.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Annotation.html" title="class in serp.bytecode">Annotation</a></td>
<td class="colLast">
<div class="block">A declared annotation.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/Annotation.Property.html" title="class in serp.bytecode">Annotation.Property</a></td>
<td class="colLast">
<div class="block">An annotation property.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Annotations.html" title="class in serp.bytecode">Annotations</a></td>
<td class="colLast">
<div class="block">Java annotation data.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/ArrayInstruction.html" title="class in serp.bytecode">ArrayInstruction</a></td>
<td class="colLast">
<div class="block">Any array load or store instruction.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/ArrayLoadInstruction.html" title="class in serp.bytecode">ArrayLoadInstruction</a></td>
<td class="colLast">
<div class="block">Loads a value from an array onto the stack.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/ArrayStoreInstruction.html" title="class in serp.bytecode">ArrayStoreInstruction</a></td>
<td class="colLast">
<div class="block">Store a value from the stack into an array.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Attribute.html" title="class in serp.bytecode">Attribute</a></td>
<td class="colLast">
<div class="block">In bytecode attributes are used to represent anything that is not
 part of the class structure.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/Attributes.html" title="class in serp.bytecode">Attributes</a></td>
<td class="colLast">
<div class="block">Abstract superclass for all bytecode entities that hold attributes.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/BCClass.html" title="class in serp.bytecode">BCClass</a></td>
<td class="colLast">
<div class="block">The BCClass represents a class object in the bytecode framework, in many
 ways mirroring the <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> class of Java reflection.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/BCClassLoader.html" title="class in serp.bytecode">BCClassLoader</a></td>
<td class="colLast">
<div class="block">Class loader that will attempt to find requested classes in a given
 <a href="../../serp/bytecode/Project.html" title="class in serp.bytecode"><code>Project</code></a>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/BCField.html" title="class in serp.bytecode">BCField</a></td>
<td class="colLast">
<div class="block">A field of a class.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/BCMember.html" title="class in serp.bytecode">BCMember</a></td>
<td class="colLast">
<div class="block">A member field or method of a class.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/BCMethod.html" title="class in serp.bytecode">BCMethod</a></td>
<td class="colLast">
<div class="block">A method of a class.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/BootstrapMethodElement.html" title="class in serp.bytecode">BootstrapMethodElement</a></td>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/BootstrapMethods.html" title="class in serp.bytecode">BootstrapMethods</a></td>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/ClassConstantInstruction.html" title="class in serp.bytecode">ClassConstantInstruction</a></td>
<td class="colLast">
<div class="block">Pseudo-instruction used to place <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang"><code>Class</code></a> objects onto the stack.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/ClassInstruction.html" title="class in serp.bytecode">ClassInstruction</a></td>
<td class="colLast">
<div class="block">An instruction that takes as an argument a class to operate
 on.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/CmpInstruction.html" title="class in serp.bytecode">CmpInstruction</a></td>
<td class="colLast">
<div class="block">An instruction comparing two stack values.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Code.html" title="class in serp.bytecode">Code</a></td>
<td class="colLast">
<div class="block">Representation of a code block of a class.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/ConstantInstruction.html" title="class in serp.bytecode">ConstantInstruction</a></td>
<td class="colLast">
<div class="block">An instruction that that loads a constant onto the stack.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/ConstantValue.html" title="class in serp.bytecode">ConstantValue</a></td>
<td class="colLast">
<div class="block">A constant value for a member field.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/ConvertInstruction.html" title="class in serp.bytecode">ConvertInstruction</a></td>
<td class="colLast">
<div class="block">A conversion opcode such as <code>i2l, f2i</code>, etc.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Deprecated.html" title="class in serp.bytecode">Deprecated</a></td>
<td class="colLast">
<div class="block">Attribute signifying that a method or class is deprecated.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/ExceptionHandler.html" title="class in serp.bytecode">ExceptionHandler</a></td>
<td class="colLast">
<div class="block">Represents a <code>try {} catch() {}</code> statement in bytecode.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Exceptions.html" title="class in serp.bytecode">Exceptions</a></td>
<td class="colLast">
<div class="block">Attribute declaring the checked exceptions a method can throw.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/FieldInstruction.html" title="class in serp.bytecode">FieldInstruction</a></td>
<td class="colLast">
<div class="block">Instruction that takes as an argument a field to operate
 on.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/GetFieldInstruction.html" title="class in serp.bytecode">GetFieldInstruction</a></td>
<td class="colLast">
<div class="block">Loads a value from a field onto the stack.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/GotoInstruction.html" title="class in serp.bytecode">GotoInstruction</a></td>
<td class="colLast">
<div class="block">An instruction that specifies a position in the code block to jump to.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/IfInstruction.html" title="class in serp.bytecode">IfInstruction</a></td>
<td class="colLast">
<div class="block">An if instruction such as <code>ifnull, ifeq</code>, etc.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/IIncInstruction.html" title="class in serp.bytecode">IIncInstruction</a></td>
<td class="colLast">
<div class="block">The <code>iinc</code> instruction.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/InnerClass.html" title="class in serp.bytecode">InnerClass</a></td>
<td class="colLast">
<div class="block">Any referenced class that is not a package member is represented by
 this structure.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/InnerClasses.html" title="class in serp.bytecode">InnerClasses</a></td>
<td class="colLast">
<div class="block">Attribute describing all referenced classes that are not package
 members.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/Instruction.html" title="class in serp.bytecode">Instruction</a></td>
<td class="colLast">
<div class="block">An opcode in a method of a class.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/JumpInstruction.html" title="class in serp.bytecode">JumpInstruction</a></td>
<td class="colLast">
<div class="block">An instruction that specifies a position in the code block to jump to.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/LineNumber.html" title="class in serp.bytecode">LineNumber</a></td>
<td class="colLast">
<div class="block">A line number corresponds to a sequence of opcodes that map logically
 to a line of source code.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/LineNumberTable.html" title="class in serp.bytecode">LineNumberTable</a></td>
<td class="colLast">
<div class="block">Code blocks compiled from source have line number tables mapping
 opcodes to source lines.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/LoadInstruction.html" title="class in serp.bytecode">LoadInstruction</a></td>
<td class="colLast">
<div class="block">Loads a value from the locals table to the stack.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/Local.html" title="class in serp.bytecode">Local</a></td>
<td class="colLast">
<div class="block">A local variable or local variable type.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/LocalTable.html" title="class in serp.bytecode">LocalTable</a></td>
<td class="colLast">
<div class="block">Code blocks compiled from source have local tables mapping
 locals used in opcodes to their names and descriptions.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/LocalVariable.html" title="class in serp.bytecode">LocalVariable</a></td>
<td class="colLast">
<div class="block">A local variable contains the name, description, index and scope
 of a local used in opcodes.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/LocalVariableInstruction.html" title="class in serp.bytecode">LocalVariableInstruction</a></td>
<td class="colLast">
<div class="block">An instruction that has an argument of an index into the
 local variable table of the current frame.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/LocalVariableTable.html" title="class in serp.bytecode">LocalVariableTable</a></td>
<td class="colLast">
<div class="block">Code blocks compiled from source have local variable tables mapping
 locals used in opcodes to their names and descriptions.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/LocalVariableType.html" title="class in serp.bytecode">LocalVariableType</a></td>
<td class="colLast">
<div class="block">A local variable type contains the name, signature, index and scope
 of a generics-using local used in opcodes.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/LocalVariableTypeTable.html" title="class in serp.bytecode">LocalVariableTypeTable</a></td>
<td class="colLast">
<div class="block">Code blocks compiled from source have local variable type tables mapping
 generics-using locals used in opcodes to their names and signatures.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/LookupSwitchInstruction.html" title="class in serp.bytecode">LookupSwitchInstruction</a></td>
<td class="colLast">
<div class="block">The <code>lookupswitch</code> instruction.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/MathInstruction.html" title="class in serp.bytecode">MathInstruction</a></td>
<td class="colLast">
<div class="block">One of the math operations defined in the <a href="../../serp/bytecode/Constants.html" title="interface in serp.bytecode"><code>Constants</code></a> interface.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/MethodInstruction.html" title="class in serp.bytecode">MethodInstruction</a></td>
<td class="colLast">
<div class="block">An instruction that invokes a method.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/MonitorEnterInstruction.html" title="class in serp.bytecode">MonitorEnterInstruction</a></td>
<td class="colLast">
<div class="block">The <code>monitorenter</code> instruction.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/MonitorExitInstruction.html" title="class in serp.bytecode">MonitorExitInstruction</a></td>
<td class="colLast">
<div class="block">The <code>monitorexit</code> instruction.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/MonitorInstruction.html" title="class in serp.bytecode">MonitorInstruction</a></td>
<td class="colLast">
<div class="block">A synchronization instruction.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/MultiANewArrayInstruction.html" title="class in serp.bytecode">MultiANewArrayInstruction</a></td>
<td class="colLast">
<div class="block">The <code>multianewarray</code> instruction, which creates a new
 multi-dimensional array.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/NameCache.html" title="class in serp.bytecode">NameCache</a></td>
<td class="colLast">
<div class="block">Caching and conversion of names in both internal and external form.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/NewArrayInstruction.html" title="class in serp.bytecode">NewArrayInstruction</a></td>
<td class="colLast">
<div class="block">The <code>newarray</code> instruction, which is used to create new
 arrays of primitive types.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/Project.html" title="class in serp.bytecode">Project</a></td>
<td class="colLast">
<div class="block">The Project represents a working set of classes.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/PutFieldInstruction.html" title="class in serp.bytecode">PutFieldInstruction</a></td>
<td class="colLast">
<div class="block">Stores a value from the stack into a field.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/RetInstruction.html" title="class in serp.bytecode">RetInstruction</a></td>
<td class="colLast">
<div class="block">The <code>ret</code> instruction is used in the implementation of finally.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/ReturnInstruction.html" title="class in serp.bytecode">ReturnInstruction</a></td>
<td class="colLast">
<div class="block">Returns a value (or void) from a method.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/SourceFile.html" title="class in serp.bytecode">SourceFile</a></td>
<td class="colLast">
<div class="block">Attribute naming the source file for this class.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/StackInstruction.html" title="class in serp.bytecode">StackInstruction</a></td>
<td class="colLast">
<div class="block">Represents an instruction that manipulates the stack of the current
 frame.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/StoreInstruction.html" title="class in serp.bytecode">StoreInstruction</a></td>
<td class="colLast">
<div class="block">An instruction to store a value from a local variable onto the stack.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/SwitchInstruction.html" title="class in serp.bytecode">SwitchInstruction</a></td>
<td class="colLast">
<div class="block">Contains functionality common to the different switch types
 (TableSwitch and LookupSwitch).</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/Synthetic.html" title="class in serp.bytecode">Synthetic</a></td>
<td class="colLast">
<div class="block">Attribute marking a member as synthetic, or not present in the class
 source code.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/TableSwitchInstruction.html" title="class in serp.bytecode">TableSwitchInstruction</a></td>
<td class="colLast">
<div class="block">The <code>tableswitch</code> instruction.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/TypedInstruction.html" title="class in serp.bytecode">TypedInstruction</a></td>
<td class="colLast">
<div class="block">Any typed instruction.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../serp/bytecode/UnknownAttribute.html" title="class in serp.bytecode">UnknownAttribute</a></td>
<td class="colLast">
<div class="block">An unrecognized attribute; class files are allowed to contain
 attributes that are not recognized, and the JVM must ignore them.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../serp/bytecode/WideInstruction.html" title="class in serp.bytecode">WideInstruction</a></td>
<td class="colLast">
<div class="block">The <code>wide</code> instruction, which is used to allow other
 instructions to index values beyond what they can normally index baed
 on the length of their arguments.</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
<a name="package_description">
<!--   -->
</a>
<h2 title="Package serp.bytecode Description">Package serp.bytecode Description</h2>
<div class="block"><p><strong>Bytecode Manipuation</strong></p>
        <p>
                This package contains a framework for Java bytecode manipulation.
        </p>
        <p>
                Bytecode manipulation is a powerful tool in the arsenal of the Java
                developer.  It can be used for tasks from compiling alternative 
                programming languages to run in a JVM, to creating new classes on the
                fly at runtime, to instrumenting classes for performance analysis, to
                debugging, to altering or enhancing the capabilities of existing
                compiled classes.  Traditionally, however, this power has come at a
                price: modifying bytecode has required an in-depth knowledge of the
                class file structure and has necessitated very low-level programming
                techniques.  These costs have proven too much for most developers, and 
                bytecode manipulation has been largely ignored by the mainstream.
        </p>
        <p>
                The goal of the serp bytecode framework is to tap the full power of
                bytecode modification while lowering its associated costs.
                The framework provides a set of high-level APIs for manipulating all 
                aspects of bytecode, from large-scale structures like class member 
                fields to the individual instructions that comprise the code of 
                methods.  While in order to perform any advanced manipulation, some 
                understanding of the 
                <a href="http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html">
                class file format</a> and especially of the 
                <a href="http://java.sun.com/docs/books/vmspec/2nd-edition/html/Instructions.doc.html">
                JVM instruction set</a> is necessary, the framework makes it as easy
                as possible to enter the world of bytecode development.
        </p>
        <p>
                There are several other excellent bytecode frameworks available.   Serp
                excels, however, in the following areas:
                <ul>
                        <li>
                                <em>Ease of use.</em>  Serp provides very high-level APIs for 
                                all normal bytecode modification functionality.   Additionally,
                                the framework contains a large set of convenience methods to 
                                make code that uses it as clean as possible.  From overloading
                                its methods to prevent you from having to make type 
                                conversions, to making shortcuts for operations like adding 
                                default constructors, serp tries to take the pain out of 
                                bytecode development.
                        </li>
                        <li>
                                <em>Power.</em>  Serp does not hide any of the power of
                                bytecode manipulation behind a limited set of high-level 
                                functions.  In addition to its available high-level APIs, which
                                themselves cover the functionality all but the most advanced
                                users will ever need, serp gives you direct access to the 
                                low-level details of the class file and constant pool.  You 
                                can even switch back and
                                forth between low-level and high-level operations;
                                serp maintains complete consistency of the class structure
                                at all times.  A change to a method descriptor in the constant
                                pool, for example, will immediately change the return values
                                of all the high-level APIs that describe that method.
                        </li>
                        <li>
                                <em>Constant pool management.</em>  In the class file format,
                                all constant values are stored in a constant pool of shared
                                entries to minimize the size of class structures.  Serp gives
                                you access to the constant pool directly, but most of you
                                will never use it; serp's high-level APIs completely
                                abstract management of the constant pool.
                                Any time a new constant is needed, serp will automatically add
                                it to the pool while ensuring that no duplicates ever exist.
                                Serp also does its best to manipulate the pool so that the
                                effects of changing a constant are as expected: i.e. changing
                                one instruction to use the string "bar" instead of "foo" 
                                will not affect other instructions that use the string "foo",
                                but changing the name of a class field will instantly change
                                all instructions that reference that field to use the new name.
                        </li>
                        <li>
                                <em>Instruction morphing.</em>  Dealing with the individual
                                instructions that make up method code is the most difficult
                                part of bytecode manipulation.  To facilitate this process,
                                most serp instruction representations have the ability to
                                change their underlying low-level opcodes on the fly as the
                                you modify the parameters of the instruction.  For 
                                example, accessing the constant integer value 0 requires the
                                opcode <code>iconst0</code>, while accessing the string 
                                constant "foo" requires a different opcode, <code>ldc</code>,
                                followed by the constant pool index of "foo".  In serp, however,
                                there is only one instruction, <code>constant</code>.  This
                                instruction has <code>setValue</code> methods which use the
                                given value to automatically determine the correct opcodes and
                                arguments -- <code>iconst0</code> for a value of 0 and 
                                <code>ldc</code> plus the proper constant pool index for the
                                value of "foo".
                        </li>
                </ul> 
        </p>
        <p>
                Serp is not ideally suited to all applications.  Here are a few
                disadvantages of serp:
                <ul>
                        <li>
                                <em>Speed.</em>  Serp is not built for speed.  Though there
                                are plans for performing incremental parsing, serp currently
                                fully parses class files when a class is loaded, which is a 
                                slow process.
                                Also, serp's insistence on full-time consistency between the
                                low and high level class structures slows down both access and
                                mutator methods.  These factors are less of a concern, though,
                                when creating new classes at runtime (rather than modifying 
                                existing code), or when using serp as part of the compilation
                                process.  Serp excels in both of these scenarios.
                        </li>
                        <li>
                                <em>Memory.</em>  Serp's high-level structures for representing
                                class bytecode are very memory-hungry.
                        </li>
                        <li>
                                <em>Multi-threaded modifications.</em>  The serp toolkit is
                                not threadsafe.  Multiple threads cannot safely make
                                modifications to the same classes the same time.
                        </li>
                        <li>
                                <em>Project-level modifications.</em>  Changes made in one
                                class in a serp project are not yet automatically propogated
                                to other classes.  However, there are plans to implement this,
                                as well as plans to allow operations to modify bytecode based
                                on specified patterns, similar to aspect-oriented programming.
                        </li>
                </ul>
        </p>
        <p>
                The first class that you should study in this package is the 
                <a href="../../serp/bytecode/Project.html" title="class in serp.bytecode"><code>Project</code></a> type.  From there, move onto the 
                <a href="../../serp/bytecode/BCClass.html" title="class in serp.bytecode"><code>BCClass</code></a>, and trace its APIs into 
                <a href="../../serp/bytecode/BCField.html" title="class in serp.bytecode"><code>BCField</code></a>s, <a href="../../serp/bytecode/BCMethod.html" title="class in serp.bytecode"><code>BCMethod</code></a>s,
                and finally into actual <a href="../../serp/bytecode/Code.html" title="class in serp.bytecode"><code>Code</code></a>. 
        </p></div>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev Package</li>
<li><a href="../../serp/bytecode/lowlevel/package-summary.html">Next Package</a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?serp/bytecode/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2002&#x2013;2015. All rights reserved.</small></p>
</body>
</html>