⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class.h

📁 一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
 * Copyright (c) 1998-2001 Sun Microsystems, Inc. All Rights Reserved.
 *
 * This software is the confidential and proprietary information of Sun
 * Microsystems, Inc. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Sun.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
 * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
 * THIS SOFTWARE OR ITS DERIVATIVES.
 *
 */

/*=========================================================================
 * SYSTEM:    KVM
 * SUBSYSTEM: Internal runtime structures
 * FILE:      class.h
 * OVERVIEW:  Internal runtime class structures.
 * AUTHOR:    Antero Taivalsaari, Sun Labs
 *            Edited by Doug Simon 11/1998 (added the string pool)
 *            Frank Yellin
 *=======================================================================*/

/*=========================================================================
 * COMMENTS:
 * This file defines the VM-specific internal runtime structures
 * needed for representing classes and their instances in the system.
 *=======================================================================*/

/*=========================================================================
 * Include files
 *=======================================================================*/

/*=========================================================================
 * Global definitions
 *=======================================================================*/

/* Class status flags */
#define CLASS_RAW       0 /* this value must be 0 */
#define CLASS_LOADING   1
#define CLASS_LOADED    2
#define CLASS_LINKED    3
#define CLASS_VERIFIED  4
#define CLASS_READY     5
#define CLASS_ERROR    -1

/* A class is considered initialized if it's ready or being initialized
 * by the current thread.
 */
#define CLASS_INITIALIZED(c) \
    ((c)->status == CLASS_READY || (c)->initThread == CurrentThread)

#define IS_ARRAY_CLASS(c) (( ((CLASS)(c))->accessFlags & ACC_ARRAY_CLASS) != 0)

/* Use the 13th bit to indicate whether a class instance has been
 * initialized.
 */
#define ITEM_NewObject_Flag 0x1000
#define ITEM_NewObject_Mask 0x0FFF

#define ENCODE_NEWOBJECT(pc) ((((pc) & 0x7000)<<1) | 0x1000 | ((pc) & 0x0FFF)) 
#define DECODE_NEWOBJECT(no) ((((no) & 0xE000)>>1) | ((no) & 0x0FFF))

/* Abstract types used by the byte code verifier. */
enum {
    ITEM_Bogus,       /* Unused */
    ITEM_Integer,
    ITEM_Float,
    ITEM_Double,
    ITEM_Long,
    ITEM_Null,        /* Result of aconst_null */
    ITEM_InitObject,  /* "this" is in <init> method, before call to super() */

    ITEM_Object,      /* Extra info field gives name. */
    ITEM_NewObject,   /* Like object, but uninitialized. */

    /* The following codes are used by the verifier but don't actually occur in
     * class files.
     */
    ITEM_Long_2,      /* 2nd word of long in register */
    ITEM_Double_2,    /* 2nd word of double in register */

    ITEM_Category1,
    ITEM_Category2,
    ITEM_DoubleWord,
    ITEM_Reference
};

/*=========================================================================
 * Internal runtime class and instance data structures
 *=======================================================================*/

/*=========================================================================
 * Every object in KVM looks roughly like this:
 * 
 *               +--------------------------+
 *               | GC header word (32 bits) |
 *               +==========================+
 * object ptr -> | class pointer            |
 *               +--------------------------+
 *               | monitorOrHashCode field  |
 *               +--------------------------+
 *               | ... the rest of the      |
 *               .     data ...             .
 *               .                          .
 *
 * The data type declarations below define the various 
 * class and instance data structures that the KVM uses
 * internally at runtime.
 * 
 * The "real" (upper-caps) names for these data types 
 * are defined in file 'global.h'.
 *
 * IMPORTANT: If you change the order of any of the data elements
 * in these data structures, make sure that the order matches
 * with the corresponding data structures in 'rom.h'.
 *=======================================================================*/

/** 
 * The low two bits of the monitorOrHashCode (mhc) field of an object
 * say what it is.  See thread.h for more information.
 */
typedef union monitorOrHashCode { 
    void *address;          /* low 2 bits MHC_MONITOR,  
                                          MHC_SIMPLE_LOCK, 
                                          MHC_EXTENDED_LOCK */
    long  hashCode;         /* low 2 bits MHC_UNLOCKED */
} monitorOrHashCode;

/* Macro that defines the most common part of the objects */
#define COMMON_OBJECT_INFO(_type_) \
    _type_ ofClass; /*  Pointer to the class of the instance */ \
    monitorOrHashCode mhc;

/* CLASS */
struct classStruct {
    COMMON_OBJECT_INFO(INSTANCE_CLASS)

    /* Note that arrays classes have the same packageName as their base
     * class.  the baseName for arrays is [...[L<className>; or
     * [...[<primitive type>, where [...[ indicates the appropriate
     * number of left brackets for the depth */
    UString packageName;            /* Everything before the final '/' */
    UString baseName;               /* Everything after the final '/' */
    CLASS   next;                   /* Next item in this hash table bucket */
    
    unsigned short accessFlags;     /* Access information */
    unsigned short key;             /* Class key */
};

/* INSTANCE_CLASS */
struct instanceClassStruct {
    struct classStruct clazz;       /* common info */

    /* And specific to instance classes */
    INSTANCE_CLASS superClass;      /* Superclass, unless java.lang.Object */
    CONSTANTPOOL constPool;         /* Pointer to constant pool */
    FIELDTABLE  fieldTable;         /* Pointer to instance variable table */
    METHODTABLE methodTable;        /* Pointer to virtual method table */
    unsigned short* ifaceTable;     /* Pointer to interface table */
    POINTERLIST staticFields;       /* Holds static fields of the class */
    short   instSize;               /* The size of class instances */
    short status;                   /* Class readiness status */
    THREAD initThread;              /* Thread performing class initialization */
};

/* ARRAY_CLASS */
struct arrayClassStruct {
    struct classStruct clazz;       /* Common info */

    /* And stuff specific to an array class */
    union {
        CLASS elemClass;            /* Element class of object arrays */
        long primType;              /* Element type for primitive arrays */
    } u;
    long itemSize;                  /* Size (bytes) of individual elements */
                                    /* wants to be GCT_ObjectType rather than */
                                    /* an int. But the Palm makes enumerations*/
                                    /* into "short" */
    long gcType;                    /* GCT_ARRAY or GCT_OBJECTARRAY */
    long flags;                     /*   */
};

#define ARRAY_FLAG_BASE_NOT_LOADED 1

/* OBJECT (Generic Java object) */
struct objectStruct {
    COMMON_OBJECT_INFO(CLASS)
};

/*  INSTANCE */
struct instanceStruct {
    COMMON_OBJECT_INFO(INSTANCE_CLASS)
    union {
        cell *cellp;
        cell cell;
    } data[1];
};

/* These are never created directly. */
/* It's what a java.lang.String looks like */
/* STRING_INSTANCE */
struct stringInstanceStruct {
    COMMON_OBJECT_INFO(INSTANCE_CLASS)

    SHORTARRAY array;
    cell offset;
    cell length;
};

/* INTERNED_STRING_INSTANCE */
struct internedStringInstanceStruct { 
    COMMON_OBJECT_INFO(INSTANCE_CLASS)

    SHORTARRAY array;
    cell offset;
    cell length;
    struct internedStringInstanceStruct *next;
};

struct throwableInstanceStruct { 
    COMMON_OBJECT_INFO(INSTANCE_CLASS)

    STRING_INSTANCE message;
    ARRAY   backtrace;
};

typedef union cellOrPointer {
    cell cell;
    cell *cellp;
    cell **cellpp;              /* For global roots */

    /* Occasionally needed by GC */
    char *charp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -