constants.h

来自「kaffe Java 解释器语言,源码,Java的子集系统,开放源代码」· C头文件 代码 · 共 123 行

H
123
字号
/* * cnstants.h * Manage constants. * * Copyright (c) 1996, 1997 *	Transvirtual Technologies, Inc.  All rights reserved. * * See the file "license.terms" for information on usage and redistribution  * of this file.  */#ifndef __constant_h#define __constant_h#include "gtypes.h"/* * Constant pool definitions. */#define	CONSTANT_Class			7#define	CONSTANT_Fieldref		9#define	CONSTANT_Methodref		10#define	CONSTANT_InterfaceMethodref	11#define	CONSTANT_String			8#define	CONSTANT_Integer		3#define	CONSTANT_Float			4#define	CONSTANT_Long			5#define	CONSTANT_Double			6#define	CONSTANT_NameAndType		12#define	CONSTANT_Utf8			1#define	CONSTANT_Unicode		2#define	CONSTANT_Unknown		0#define	CONSTANT_Error			0#define CONSTANT_ResolvedString		(16+CONSTANT_String)#define CONSTANT_ResolvedClass		(16+CONSTANT_Class)#define WORDS_TO_LONG(HI, LO) (((uint64)(HI) << 32)|(uint64)(uint32)(LO))#define WORD2UTF(WORD) ((Utf8Const*) (WORD))typedef jword ConstSlot;typedef struct _constants {	u4		size;	u1*		tags;	ConstSlot*	data;} constants;/* * Macros to take constant pools apart.  XX prefix with CONST_ */#define CONST_TAG(idx, pool)                            (((idx) > 0 && (idx) < pool->size) ?  pool->tags[idx] : CONSTANT_Unknown)#define CLASS_CLASS(idx, pool)                          ((Hjava_lang_Class*)pool->data[idx])#define CLASS_NAME(idx, pool)                           ((uint16)pool->data[idx])#define CONST_STRING_NAME(idx, pool)                    CLASS_NAME(idx, pool)/* the actual character string pointed to by the data */#define UNRESOLVED_CLASS_NAMED(idx, pool)               (WORD2UTF(pool->data[idx])->data)#define RESOLVED_CLASS_NAMED(idx, pool)                 ((CLASS_CLASS(idx, pool))->name->data)#define CLASS_NAMED(idx, pool)                          ((pool->tags[idx] == CONSTANT_ResolvedClass || pool->tags[idx] == CONSTANT_ResolvedString) ? RESOLVED_CLASS_NAMED(idx, pool) : UNRESOLVED_CLASS_NAMED(idx, pool))#define CONST_STRING_NAMED(idx, pool)                   CLASS_NAMED(idx, pool)#define FIELDREF_CLASS(idx, pool)                       ((uint16)pool->data[idx])#define METHODREF_CLASS(idx, pool)                      FIELDREF_CLASS(idx, pool)#define INTERFACEMETHODREF_CLASS(idx, pool)             FIELDREF_CLASS(idx, pool)#define FIELDREF_NAMEANDTYPE(idx, pool)                 ((uint16)(pool->data[idx] >> 16))#define METHODREF_NAMEANDTYPE(idx, pool)                FIELDREF_NAMEANDTYPE(idx, pool)#define INTERFACEMETHODREF_NAMEANDTYPE(idx, pool)       FIELDREF_NAMEANDTYPE(idx, pool)#define NAMEANDTYPE_NAME(idx, pool)                     ((uint16)pool->data[idx])#define NAMEANDTYPE_SIGNATURE(idx, pool)                ((uint16)(pool->data[idx] >> 16))/* the actual character string pointed to by the data */#define NAMEANDTYPE_NAMED(idx, pool)                    (WORD2UTF(pool->data[NAMEANDTYPE_NAME(idx, pool)])->data)#define NAMEANDTYPE_SIGD(idx, pool)                     (WORD2UTF(pool->data[NAMEANDTYPE_SIGNATURE(idx, pool)])->data)#define FIELDREF_NAME(idx, pool)                        NAMEANDTYPE_NAME(FIELDREF_NAMEANDTYPE(idx, pool), pool)#define METHODREF_NAME(idx, pool)                       FIELDREF_NAME(idx, pool)#define INTERFACEMETHODREF_NAME(idx, pool)              FIELDREF_NAME(idx, pool)/* the actual character string pointed to by the data */#define FIELDREF_NAMED(idx, pool)                       (WORD2UTF(pool->data[FIELDREF_NAME(idx, pool)])->data)#define METHODREF_NAMED(idx, pool)                      FIELDREF_NAMED(idx, pool)#define INTERFACEMETHODREF_NAMED(idx, pool)             FIELDREF_NAMED(idx, pool)#define FIELDREF_SIGNATURE(idx, pool)                   NAMEANDTYPE_SIGNATURE(FIELDREF_NAMEANDTYPE(idx, pool), pool)#define METHODREF_SIGNATURE(idx, pool)                  FIELDREF_SIGNATURE(idx, pool)#define INTERFACEMETHODREF_SIGNATURE(idx, pool)         FIELDREF_SIGNATURE(idx, pool)/* aliases...make more sense in certain situations, like type checking */#define FIELDREF_TYPE(idx, pool)                        FIELDREF_SIGNATURE(idx, pool)#define METHODREF_TYPE(idx, pool)                       FIELDREF_TYPE(idx, pool)#define INTERFACEMETHODREF_TYPE(idx, pool)              FIELDREF_TYPE(idx, pool)/* the actual character string pointed to by the data */#define FIELDREF_SIGD(idx, pool)                        (WORD2UTF(pool->data[FIELDREF_SIGNATURE(idx, pool)])->data)#define METHODREF_SIGD(idx, pool)                       FIELDREF_SIGD(idx, pool)#define INTERFACEMETHODREF_SIGD(idx, pool)              FIELDREF_SIGD(idx, pool)#define CONST_UTF2CHAR(idx, pool)                       ((pool->data[idx] != 0) ? (((Utf8Const*)pool->data[idx])->data) : "")struct classFile;struct _errorInfo;struct Hjava_lang_Class;extern bool readConstantPool(struct Hjava_lang_Class*, struct classFile*, struct _errorInfo*);#endif

⌨️ 快捷键说明

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