1 /* 2 * Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #ifndef CLASSFILE_CONSTANTS_H 27 #define CLASSFILE_CONSTANTS_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 /* Classfile version number for this information */ 34 #define JVM_CLASSFILE_MAJOR_VERSION @@VERSION_CLASSFILE_MAJOR@@ 35 #define JVM_CLASSFILE_MINOR_VERSION @@VERSION_CLASSFILE_MINOR@@ 36 37 /* Flags */ 38 39 enum { 40 JVM_ACC_PUBLIC = 0x0001, 41 JVM_ACC_PRIVATE = 0x0002, 42 JVM_ACC_PROTECTED = 0x0004, 43 JVM_ACC_STATIC = 0x0008, 44 JVM_ACC_FINAL = 0x0010, 45 JVM_ACC_SYNCHRONIZED = 0x0020, 46 JVM_ACC_SUPER = 0x0020, 47 JVM_ACC_VOLATILE = 0x0040, 48 JVM_ACC_BRIDGE = 0x0040, 49 JVM_ACC_TRANSIENT = 0x0080, 50 JVM_ACC_VARARGS = 0x0080, 51 JVM_ACC_NATIVE = 0x0100, 52 JVM_ACC_INTERFACE = 0x0200, 53 JVM_ACC_ABSTRACT = 0x0400, 54 JVM_ACC_STRICT = 0x0800, 55 JVM_ACC_SYNTHETIC = 0x1000, 56 JVM_ACC_ANNOTATION = 0x2000, 57 JVM_ACC_ENUM = 0x4000, 58 JVM_ACC_MODULE = 0x8000 59 }; 60 61 #define JVM_ACC_PUBLIC_BIT 0 62 #define JVM_ACC_PRIVATE_BIT 1 63 #define JVM_ACC_PROTECTED_BIT 2 64 #define JVM_ACC_STATIC_BIT 3 65 #define JVM_ACC_FINAL_BIT 4 66 #define JVM_ACC_SYNCHRONIZED_BIT 5 67 #define JVM_ACC_SUPER_BIT 5 68 #define JVM_ACC_VOLATILE_BIT 6 69 #define JVM_ACC_BRIDGE_BIT 6 70 #define JVM_ACC_TRANSIENT_BIT 7 71 #define JVM_ACC_VARARGS_BIT 7 72 #define JVM_ACC_NATIVE_BIT 8 73 #define JVM_ACC_INTERFACE_BIT 9 74 #define JVM_ACC_ABSTRACT_BIT 10 75 #define JVM_ACC_STRICT_BIT 11 76 #define JVM_ACC_SYNTHETIC_BIT 12 77 #define JVM_ACC_ANNOTATION_BIT 13 78 #define JVM_ACC_ENUM_BIT 14 79 80 /* Used in newarray instruction. */ 81 82 enum { 83 JVM_T_BOOLEAN = 4, 84 JVM_T_CHAR = 5, 85 JVM_T_FLOAT = 6, 86 JVM_T_DOUBLE = 7, 87 JVM_T_BYTE = 8, 88 JVM_T_SHORT = 9, 89 JVM_T_INT = 10, 90 JVM_T_LONG = 11 91 }; 92 93 /* Constant Pool Entries */ 94 95 enum { 96 JVM_CONSTANT_Utf8 = 1, 97 JVM_CONSTANT_Unicode = 2, /* unused */ 98 JVM_CONSTANT_Integer = 3, 99 JVM_CONSTANT_Float = 4, 100 JVM_CONSTANT_Long = 5, 101 JVM_CONSTANT_Double = 6, 102 JVM_CONSTANT_Class = 7, 103 JVM_CONSTANT_String = 8, 104 JVM_CONSTANT_Fieldref = 9, 105 JVM_CONSTANT_Methodref = 10, 106 JVM_CONSTANT_InterfaceMethodref = 11, 107 JVM_CONSTANT_NameAndType = 12, 108 JVM_CONSTANT_MethodHandle = 15, // JSR 292 109 JVM_CONSTANT_MethodType = 16, // JSR 292 110 JVM_CONSTANT_Dynamic = 17, 111 JVM_CONSTANT_InvokeDynamic = 18, 112 JVM_CONSTANT_Module = 19, 113 JVM_CONSTANT_Package = 20, 114 JVM_CONSTANT_ExternalMax = 20 115 }; 116 117 /* JVM_CONSTANT_MethodHandle subtypes */ 118 enum { 119 JVM_REF_getField = 1, 120 JVM_REF_getStatic = 2, 121 JVM_REF_putField = 3, 122 JVM_REF_putStatic = 4, 123 JVM_REF_invokeVirtual = 5, 124 JVM_REF_invokeStatic = 6, 125 JVM_REF_invokeSpecial = 7, 126 JVM_REF_newInvokeSpecial = 8, 127 JVM_REF_invokeInterface = 9 128 }; 129 130 /* StackMapTable type item numbers */ 131 132 enum { 133 JVM_ITEM_Top = 0, 134 JVM_ITEM_Integer = 1, 135 JVM_ITEM_Float = 2, 136 JVM_ITEM_Double = 3, 137 JVM_ITEM_Long = 4, 138 JVM_ITEM_Null = 5, 139 JVM_ITEM_UninitializedThis = 6, 140 JVM_ITEM_Object = 7, 141 JVM_ITEM_Uninitialized = 8 142 }; 143 144 /* Type signatures */ 145 146 enum { 147 JVM_SIGNATURE_SLASH = '/', 148 JVM_SIGNATURE_DOT = '.', 149 JVM_SIGNATURE_SPECIAL = '<', 150 JVM_SIGNATURE_ENDSPECIAL = '>', 151 JVM_SIGNATURE_ARRAY = '[', 152 JVM_SIGNATURE_BYTE = 'B', 153 JVM_SIGNATURE_CHAR = 'C', 154 JVM_SIGNATURE_CLASS = 'L', 155 JVM_SIGNATURE_ENDCLASS = ';', 156 JVM_SIGNATURE_ENUM = 'E', 157 JVM_SIGNATURE_FLOAT = 'F', 158 JVM_SIGNATURE_DOUBLE = 'D', 159 JVM_SIGNATURE_FUNC = '(', 160 JVM_SIGNATURE_ENDFUNC = ')', 161 JVM_SIGNATURE_INT = 'I', 162 JVM_SIGNATURE_LONG = 'J', 163 JVM_SIGNATURE_SHORT = 'S', 164 JVM_SIGNATURE_VOID = 'V', 165 JVM_SIGNATURE_BOOLEAN = 'Z' 166 }; 167 168 /* Opcodes */ 169 170 enum { 171 JVM_OPC_nop = 0, 172 JVM_OPC_aconst_null = 1, 173 JVM_OPC_iconst_m1 = 2, 174 JVM_OPC_iconst_0 = 3, 175 JVM_OPC_iconst_1 = 4, 176 JVM_OPC_iconst_2 = 5, 177 JVM_OPC_iconst_3 = 6, 178 JVM_OPC_iconst_4 = 7, 179 JVM_OPC_iconst_5 = 8, 180 JVM_OPC_lconst_0 = 9, 181 JVM_OPC_lconst_1 = 10, 182 JVM_OPC_fconst_0 = 11, 183 JVM_OPC_fconst_1 = 12, 184 JVM_OPC_fconst_2 = 13, 185 JVM_OPC_dconst_0 = 14, 186 JVM_OPC_dconst_1 = 15, 187 JVM_OPC_bipush = 16, 188 JVM_OPC_sipush = 17, 189 JVM_OPC_ldc = 18, 190 JVM_OPC_ldc_w = 19, 191 JVM_OPC_ldc2_w = 20, 192 JVM_OPC_iload = 21, 193 JVM_OPC_lload = 22, 194 JVM_OPC_fload = 23, 195 JVM_OPC_dload = 24, 196 JVM_OPC_aload = 25, 197 JVM_OPC_iload_0 = 26, 198 JVM_OPC_iload_1 = 27, 199 JVM_OPC_iload_2 = 28, 200 JVM_OPC_iload_3 = 29, 201 JVM_OPC_lload_0 = 30, 202 JVM_OPC_lload_1 = 31, 203 JVM_OPC_lload_2 = 32, 204 JVM_OPC_lload_3 = 33, 205 JVM_OPC_fload_0 = 34, 206 JVM_OPC_fload_1 = 35, 207 JVM_OPC_fload_2 = 36, 208 JVM_OPC_fload_3 = 37, 209 JVM_OPC_dload_0 = 38, 210 JVM_OPC_dload_1 = 39, 211 JVM_OPC_dload_2 = 40, 212 JVM_OPC_dload_3 = 41, 213 JVM_OPC_aload_0 = 42, 214 JVM_OPC_aload_1 = 43, 215 JVM_OPC_aload_2 = 44, 216 JVM_OPC_aload_3 = 45, 217 JVM_OPC_iaload = 46, 218 JVM_OPC_laload = 47, 219 JVM_OPC_faload = 48, 220 JVM_OPC_daload = 49, 221 JVM_OPC_aaload = 50, 222 JVM_OPC_baload = 51, 223 JVM_OPC_caload = 52, 224 JVM_OPC_saload = 53, 225 JVM_OPC_istore = 54, 226 JVM_OPC_lstore = 55, 227 JVM_OPC_fstore = 56, 228 JVM_OPC_dstore = 57, 229 JVM_OPC_astore = 58, 230 JVM_OPC_istore_0 = 59, 231 JVM_OPC_istore_1 = 60, 232 JVM_OPC_istore_2 = 61, 233 JVM_OPC_istore_3 = 62, 234 JVM_OPC_lstore_0 = 63, 235 JVM_OPC_lstore_1 = 64, 236 JVM_OPC_lstore_2 = 65, 237 JVM_OPC_lstore_3 = 66, 238 JVM_OPC_fstore_0 = 67, 239 JVM_OPC_fstore_1 = 68, 240 JVM_OPC_fstore_2 = 69, 241 JVM_OPC_fstore_3 = 70, 242 JVM_OPC_dstore_0 = 71, 243 JVM_OPC_dstore_1 = 72, 244 JVM_OPC_dstore_2 = 73, 245 JVM_OPC_dstore_3 = 74, 246 JVM_OPC_astore_0 = 75, 247 JVM_OPC_astore_1 = 76, 248 JVM_OPC_astore_2 = 77, 249 JVM_OPC_astore_3 = 78, 250 JVM_OPC_iastore = 79, 251 JVM_OPC_lastore = 80, 252 JVM_OPC_fastore = 81, 253 JVM_OPC_dastore = 82, 254 JVM_OPC_aastore = 83, 255 JVM_OPC_bastore = 84, 256 JVM_OPC_castore = 85, 257 JVM_OPC_sastore = 86, 258 JVM_OPC_pop = 87, 259 JVM_OPC_pop2 = 88, 260 JVM_OPC_dup = 89, 261 JVM_OPC_dup_x1 = 90, 262 JVM_OPC_dup_x2 = 91, 263 JVM_OPC_dup2 = 92, 264 JVM_OPC_dup2_x1 = 93, 265 JVM_OPC_dup2_x2 = 94, 266 JVM_OPC_swap = 95, 267 JVM_OPC_iadd = 96, 268 JVM_OPC_ladd = 97, 269 JVM_OPC_fadd = 98, 270 JVM_OPC_dadd = 99, 271 JVM_OPC_isub = 100, 272 JVM_OPC_lsub = 101, 273 JVM_OPC_fsub = 102, 274 JVM_OPC_dsub = 103, 275 JVM_OPC_imul = 104, 276 JVM_OPC_lmul = 105, 277 JVM_OPC_fmul = 106, 278 JVM_OPC_dmul = 107, 279 JVM_OPC_idiv = 108, 280 JVM_OPC_ldiv = 109, 281 JVM_OPC_fdiv = 110, 282 JVM_OPC_ddiv = 111, 283 JVM_OPC_irem = 112, 284 JVM_OPC_lrem = 113, 285 JVM_OPC_frem = 114, 286 JVM_OPC_drem = 115, 287 JVM_OPC_ineg = 116, 288 JVM_OPC_lneg = 117, 289 JVM_OPC_fneg = 118, 290 JVM_OPC_dneg = 119, 291 JVM_OPC_ishl = 120, 292 JVM_OPC_lshl = 121, 293 JVM_OPC_ishr = 122, 294 JVM_OPC_lshr = 123, 295 JVM_OPC_iushr = 124, 296 JVM_OPC_lushr = 125, 297 JVM_OPC_iand = 126, 298 JVM_OPC_land = 127, 299 JVM_OPC_ior = 128, 300 JVM_OPC_lor = 129, 301 JVM_OPC_ixor = 130, 302 JVM_OPC_lxor = 131, 303 JVM_OPC_iinc = 132, 304 JVM_OPC_i2l = 133, 305 JVM_OPC_i2f = 134, 306 JVM_OPC_i2d = 135, 307 JVM_OPC_l2i = 136, 308 JVM_OPC_l2f = 137, 309 JVM_OPC_l2d = 138, 310 JVM_OPC_f2i = 139, 311 JVM_OPC_f2l = 140, 312 JVM_OPC_f2d = 141, 313 JVM_OPC_d2i = 142, 314 JVM_OPC_d2l = 143, 315 JVM_OPC_d2f = 144, 316 JVM_OPC_i2b = 145, 317 JVM_OPC_i2c = 146, 318 JVM_OPC_i2s = 147, 319 JVM_OPC_lcmp = 148, 320 JVM_OPC_fcmpl = 149, 321 JVM_OPC_fcmpg = 150, 322 JVM_OPC_dcmpl = 151, 323 JVM_OPC_dcmpg = 152, 324 JVM_OPC_ifeq = 153, 325 JVM_OPC_ifne = 154, 326 JVM_OPC_iflt = 155, 327 JVM_OPC_ifge = 156, 328 JVM_OPC_ifgt = 157, 329 JVM_OPC_ifle = 158, 330 JVM_OPC_if_icmpeq = 159, 331 JVM_OPC_if_icmpne = 160, 332 JVM_OPC_if_icmplt = 161, 333 JVM_OPC_if_icmpge = 162, 334 JVM_OPC_if_icmpgt = 163, 335 JVM_OPC_if_icmple = 164, 336 JVM_OPC_if_acmpeq = 165, 337 JVM_OPC_if_acmpne = 166, 338 JVM_OPC_goto = 167, 339 JVM_OPC_jsr = 168, 340 JVM_OPC_ret = 169, 341 JVM_OPC_tableswitch = 170, 342 JVM_OPC_lookupswitch = 171, 343 JVM_OPC_ireturn = 172, 344 JVM_OPC_lreturn = 173, 345 JVM_OPC_freturn = 174, 346 JVM_OPC_dreturn = 175, 347 JVM_OPC_areturn = 176, 348 JVM_OPC_return = 177, 349 JVM_OPC_getstatic = 178, 350 JVM_OPC_putstatic = 179, 351 JVM_OPC_getfield = 180, 352 JVM_OPC_putfield = 181, 353 JVM_OPC_invokevirtual = 182, 354 JVM_OPC_invokespecial = 183, 355 JVM_OPC_invokestatic = 184, 356 JVM_OPC_invokeinterface = 185, 357 JVM_OPC_invokedynamic = 186, 358 JVM_OPC_new = 187, 359 JVM_OPC_newarray = 188, 360 JVM_OPC_anewarray = 189, 361 JVM_OPC_arraylength = 190, 362 JVM_OPC_athrow = 191, 363 JVM_OPC_checkcast = 192, 364 JVM_OPC_instanceof = 193, 365 JVM_OPC_monitorenter = 194, 366 JVM_OPC_monitorexit = 195, 367 JVM_OPC_wide = 196, 368 JVM_OPC_multianewarray = 197, 369 JVM_OPC_ifnull = 198, 370 JVM_OPC_ifnonnull = 199, 371 JVM_OPC_goto_w = 200, 372 JVM_OPC_jsr_w = 201, 373 JVM_OPC_MAX = 201 374 }; 375 376 /* Opcode length initializer, use with something like: 377 * unsigned char opcode_length[JVM_OPC_MAX+1] = JVM_OPCODE_LENGTH_INITIALIZER; 378 */ 379 #define JVM_OPCODE_LENGTH_INITIALIZER { \ 380 1, /* nop */ \ 381 1, /* aconst_null */ \ 382 1, /* iconst_m1 */ \ 383 1, /* iconst_0 */ \ 384 1, /* iconst_1 */ \ 385 1, /* iconst_2 */ \ 386 1, /* iconst_3 */ \ 387 1, /* iconst_4 */ \ 388 1, /* iconst_5 */ \ 389 1, /* lconst_0 */ \ 390 1, /* lconst_1 */ \ 391 1, /* fconst_0 */ \ 392 1, /* fconst_1 */ \ 393 1, /* fconst_2 */ \ 394 1, /* dconst_0 */ \ 395 1, /* dconst_1 */ \ 396 2, /* bipush */ \ 397 3, /* sipush */ \ 398 2, /* ldc */ \ 399 3, /* ldc_w */ \ 400 3, /* ldc2_w */ \ 401 2, /* iload */ \ 402 2, /* lload */ \ 403 2, /* fload */ \ 404 2, /* dload */ \ 405 2, /* aload */ \ 406 1, /* iload_0 */ \ 407 1, /* iload_1 */ \ 408 1, /* iload_2 */ \ 409 1, /* iload_3 */ \ 410 1, /* lload_0 */ \ 411 1, /* lload_1 */ \ 412 1, /* lload_2 */ \ 413 1, /* lload_3 */ \ 414 1, /* fload_0 */ \ 415 1, /* fload_1 */ \ 416 1, /* fload_2 */ \ 417 1, /* fload_3 */ \ 418 1, /* dload_0 */ \ 419 1, /* dload_1 */ \ 420 1, /* dload_2 */ \ 421 1, /* dload_3 */ \ 422 1, /* aload_0 */ \ 423 1, /* aload_1 */ \ 424 1, /* aload_2 */ \ 425 1, /* aload_3 */ \ 426 1, /* iaload */ \ 427 1, /* laload */ \ 428 1, /* faload */ \ 429 1, /* daload */ \ 430 1, /* aaload */ \ 431 1, /* baload */ \ 432 1, /* caload */ \ 433 1, /* saload */ \ 434 2, /* istore */ \ 435 2, /* lstore */ \ 436 2, /* fstore */ \ 437 2, /* dstore */ \ 438 2, /* astore */ \ 439 1, /* istore_0 */ \ 440 1, /* istore_1 */ \ 441 1, /* istore_2 */ \ 442 1, /* istore_3 */ \ 443 1, /* lstore_0 */ \ 444 1, /* lstore_1 */ \ 445 1, /* lstore_2 */ \ 446 1, /* lstore_3 */ \ 447 1, /* fstore_0 */ \ 448 1, /* fstore_1 */ \ 449 1, /* fstore_2 */ \ 450 1, /* fstore_3 */ \ 451 1, /* dstore_0 */ \ 452 1, /* dstore_1 */ \ 453 1, /* dstore_2 */ \ 454 1, /* dstore_3 */ \ 455 1, /* astore_0 */ \ 456 1, /* astore_1 */ \ 457 1, /* astore_2 */ \ 458 1, /* astore_3 */ \ 459 1, /* iastore */ \ 460 1, /* lastore */ \ 461 1, /* fastore */ \ 462 1, /* dastore */ \ 463 1, /* aastore */ \ 464 1, /* bastore */ \ 465 1, /* castore */ \ 466 1, /* sastore */ \ 467 1, /* pop */ \ 468 1, /* pop2 */ \ 469 1, /* dup */ \ 470 1, /* dup_x1 */ \ 471 1, /* dup_x2 */ \ 472 1, /* dup2 */ \ 473 1, /* dup2_x1 */ \ 474 1, /* dup2_x2 */ \ 475 1, /* swap */ \ 476 1, /* iadd */ \ 477 1, /* ladd */ \ 478 1, /* fadd */ \ 479 1, /* dadd */ \ 480 1, /* isub */ \ 481 1, /* lsub */ \ 482 1, /* fsub */ \ 483 1, /* dsub */ \ 484 1, /* imul */ \ 485 1, /* lmul */ \ 486 1, /* fmul */ \ 487 1, /* dmul */ \ 488 1, /* idiv */ \ 489 1, /* ldiv */ \ 490 1, /* fdiv */ \ 491 1, /* ddiv */ \ 492 1, /* irem */ \ 493 1, /* lrem */ \ 494 1, /* frem */ \ 495 1, /* drem */ \ 496 1, /* ineg */ \ 497 1, /* lneg */ \ 498 1, /* fneg */ \ 499 1, /* dneg */ \ 500 1, /* ishl */ \ 501 1, /* lshl */ \ 502 1, /* ishr */ \ 503 1, /* lshr */ \ 504 1, /* iushr */ \ 505 1, /* lushr */ \ 506 1, /* iand */ \ 507 1, /* land */ \ 508 1, /* ior */ \ 509 1, /* lor */ \ 510 1, /* ixor */ \ 511 1, /* lxor */ \ 512 3, /* iinc */ \ 513 1, /* i2l */ \ 514 1, /* i2f */ \ 515 1, /* i2d */ \ 516 1, /* l2i */ \ 517 1, /* l2f */ \ 518 1, /* l2d */ \ 519 1, /* f2i */ \ 520 1, /* f2l */ \ 521 1, /* f2d */ \ 522 1, /* d2i */ \ 523 1, /* d2l */ \ 524 1, /* d2f */ \ 525 1, /* i2b */ \ 526 1, /* i2c */ \ 527 1, /* i2s */ \ 528 1, /* lcmp */ \ 529 1, /* fcmpl */ \ 530 1, /* fcmpg */ \ 531 1, /* dcmpl */ \ 532 1, /* dcmpg */ \ 533 3, /* ifeq */ \ 534 3, /* ifne */ \ 535 3, /* iflt */ \ 536 3, /* ifge */ \ 537 3, /* ifgt */ \ 538 3, /* ifle */ \ 539 3, /* if_icmpeq */ \ 540 3, /* if_icmpne */ \ 541 3, /* if_icmplt */ \ 542 3, /* if_icmpge */ \ 543 3, /* if_icmpgt */ \ 544 3, /* if_icmple */ \ 545 3, /* if_acmpeq */ \ 546 3, /* if_acmpne */ \ 547 3, /* goto */ \ 548 3, /* jsr */ \ 549 2, /* ret */ \ 550 99, /* tableswitch */ \ 551 99, /* lookupswitch */ \ 552 1, /* ireturn */ \ 553 1, /* lreturn */ \ 554 1, /* freturn */ \ 555 1, /* dreturn */ \ 556 1, /* areturn */ \ 557 1, /* return */ \ 558 3, /* getstatic */ \ 559 3, /* putstatic */ \ 560 3, /* getfield */ \ 561 3, /* putfield */ \ 562 3, /* invokevirtual */ \ 563 3, /* invokespecial */ \ 564 3, /* invokestatic */ \ 565 5, /* invokeinterface */ \ 566 5, /* invokedynamic */ \ 567 3, /* new */ \ 568 2, /* newarray */ \ 569 3, /* anewarray */ \ 570 1, /* arraylength */ \ 571 1, /* athrow */ \ 572 3, /* checkcast */ \ 573 3, /* instanceof */ \ 574 1, /* monitorenter */ \ 575 1, /* monitorexit */ \ 576 0, /* wide */ \ 577 4, /* multianewarray */ \ 578 3, /* ifnull */ \ 579 3, /* ifnonnull */ \ 580 5, /* goto_w */ \ 581 5 /* jsr_w */ \ 582 } 583 584 #ifdef __cplusplus 585 } /* extern "C" */ 586 #endif /* __cplusplus */ 587 588 #endif /* CLASSFILE_CONSTANTS */