From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- libjava/gcj/field.h | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 libjava/gcj/field.h (limited to 'libjava/gcj/field.h') diff --git a/libjava/gcj/field.h b/libjava/gcj/field.h new file mode 100644 index 000000000..2f483eb38 --- /dev/null +++ b/libjava/gcj/field.h @@ -0,0 +1,192 @@ +// field.h - Header file for fieldID instances. -*- c++ -*- + +/* Copyright (C) 1998, 1999, 2000, 2004, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __GCJ_FIELD_H__ +#define __GCJ_FIELD_H__ + +#include +#include +#include +#include + +#define _Jv_FIELD_UNRESOLVED_FLAG 0x8000 + +struct _Jv_Field +{ + struct _Jv_Utf8Const* name; + + /* The type of the field, if isResolved(). + If !isResolved(): The fields's signature as a (Utf8Const*). */ + jclass type; + + _Jv_ushort flags; + + _Jv_ushort bsize; /* not really needed ... */ + + union { + jint boffset; /* offset in bytes for instance field */ + char* addr; /* address of static field */ + + jobject* object_addr; /* address of static object field... etc */ + jbyte* byte_addr; + jshort* short_addr; + jchar* char_addr; + jint* int_addr; + jlong* long_addr; + jfloat* float_addr; + jdouble* double_addr; + } u; + +#ifdef __cplusplus + jboolean isResolved () + { return ! (flags & _Jv_FIELD_UNRESOLVED_FLAG); } + + public: + + int getOffset () { return u.boffset; } + + jobject getObjectField (jobject obj) + { return *(jobject *)((char *)obj + getOffset ()); } + + jfieldID getNextField () { return this + 1; } + + jboolean isRef () + { + if (!isResolved ()) + { + char first = ((_Jv_Utf8Const*)type)->first(); + return first == '[' || first == 'L'; + } + else + { + return ! type->isPrimitive (); + } + } + + jclass getClass () + { + // We can't use JvAssert here because it is not in a public + // header. + // JvAssert (isResolved ()); + return type; + } + + // Need to mask off all unknown/internal flags before returning. + int getModifiers() + { + return flags & java::lang::reflect::Modifier::ALL_FLAGS; + } + + _Jv_Utf8Const * getNameUtf8Const (jclass) { return name; } +#endif +}; + +#ifdef __cplusplus + +inline jbyte +_Jv_GetStaticByteField (jclass, _Jv_Field* field) +{ + return * (jbyte *) field->u.addr; +} + +inline jshort +_Jv_GetStaticShortField (jclass, _Jv_Field* field) +{ + return * (jshort *) field->u.addr; +} + +inline jint +_Jv_GetStaticIntField (jclass, _Jv_Field* field) +{ + return * (jint *) field->u.addr; +} + +inline jlong +_Jv_GetStaticLongField (jclass, _Jv_Field* field) +{ + return * (jlong *) field->u.addr; +} + +inline jobject +_Jv_GetObjectField (jobject obj, _Jv_Field* field) +{ + return field->getObjectField (obj); +} + +inline jbyte +_Jv_GetByteField (jobject obj, _Jv_Field* field) +{ + return * (jbyte *) ((char*) obj + field->getOffset ()); +} + +inline jshort +_Jv_GetShortField (jobject obj, _Jv_Field* field) +{ + return * (jshort *) ((char*) obj + field->getOffset ()); +} +inline jint +_Jv_GetIntField (jobject obj, _Jv_Field* field) +{ + return * (jint *) ((char*) obj + field->getOffset ()); +} +inline jlong +_Jv_GetLongField (jobject obj, _Jv_Field* field) +{ + return * (jlong *) ((char*) obj + field->getOffset ()); +} + +extern inline jfieldID +_Jv_FromReflectedField (java::lang::reflect::Field *field) +{ + return (jfieldID) ((char *) field->declaringClass->fields + field->offset); +} + + +#ifdef __GCJ_CNI_H__ +extern inline jfieldID +JvGetFirstInstanceField (jclass klass) +{ + return &(klass->fields[klass->static_field_count]); +} + +extern inline jint +JvNumInstanceFields (jclass klass) +{ + return klass->field_count - klass->static_field_count; +} + +extern inline jfieldID +JvGetFirstStaticField (jclass klass) +{ + return &(klass->fields[0]); +} + +extern inline jint +JvNumStaticFields (jclass klass) +{ + return klass->static_field_count; +} + +extern inline jboolean +JvFieldIsRef (jfieldID field) +{ + return field->isRef () && field->type != &gnu::gcj::RawData::class$; +} + +extern inline jobject +JvGetObjectField (jobject obj, _Jv_Field* field) +{ + return _Jv_GetObjectField (obj, field); +} +#endif /* defined (__GCJ_CNI_H__) */ + +#endif /* __cplusplus */ + +#endif /* __GCJ_FIELD_H */ -- cgit v1.2.3