OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libjava/] [gcj/] [field.h] - Blame information for rev 14

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 jlechner
// field.h - Header file for fieldID instances.  -*- c++ -*-
2
 
3
/* Copyright (C) 1998, 1999, 2000, 2004  Free Software Foundation
4
 
5
   This file is part of libgcj.
6
 
7
This software is copyrighted work licensed under the terms of the
8
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
9
details.  */
10
 
11
#ifndef __GCJ_FIELD_H__
12
#define __GCJ_FIELD_H__
13
 
14
#include <java/lang/Class.h>
15
#include <java/lang/reflect/Field.h>
16
#include <java/lang/reflect/Modifier.h>
17
#include <gnu/gcj/RawData.h>
18
 
19
#define _Jv_FIELD_UNRESOLVED_FLAG       0x8000
20
#define _Jv_FIELD_CONSTANT_VALUE        0x4000
21
 
22
struct _Jv_Field
23
{
24
  struct _Jv_Utf8Const* name;
25
 
26
  /* The type of the field, if isResolved().
27
     If !isResolved():  The fields's signature as a (Utf8Const*). */
28
  jclass                type;
29
 
30
  _Jv_ushort            flags;
31
 
32
  _Jv_ushort            bsize;  /* not really needed ... */
33
 
34
  union {
35
    jint                boffset;  /* offset in bytes for instance field */
36
    char*               addr;  /* address of static field */
37
 
38
    jobject* object_addr;  /* address of static object field... etc */
39
    jbyte* byte_addr;
40
    jshort* short_addr;
41
    jchar* char_addr;
42
    jint* int_addr;
43
    jlong* long_addr;
44
    jfloat* float_addr;
45
    jdouble* double_addr;
46
  } u;
47
 
48
#ifdef __cplusplus
49
  jboolean isResolved ()
50
  { return ! (flags & _Jv_FIELD_UNRESOLVED_FLAG); }
51
 
52
  public:
53
 
54
  int getOffset () { return u.boffset; }
55
 
56
  jobject getObjectField (jobject obj)
57
  { return *(jobject *)((char *)obj + getOffset ()); }
58
 
59
  jfieldID getNextField () { return this + 1; }
60
 
61
  jboolean isRef ()
62
    {
63
      if (!isResolved ())
64
        {
65
          char first = ((_Jv_Utf8Const*)type)->first();
66
          return first == '[' || first == 'L';
67
        }
68
      else
69
        {
70
          return ! type->isPrimitive ();
71
        }
72
    }
73
 
74
  jclass getClass ()
75
  {
76
    // We can't use JvAssert here because it is not in a public
77
    // header.
78
    // JvAssert (isResolved ());
79
    return type;
80
  }
81
 
82
  // Need to mask off all unknown/internal flags before returning.
83
  int getModifiers()
84
  {
85
    return flags & java::lang::reflect::Modifier::ALL_FLAGS;
86
  }
87
 
88
  _Jv_Utf8Const * getNameUtf8Const (jclass) { return name; }
89
#endif
90
};
91
 
92
#ifdef __cplusplus
93
 
94
inline jbyte
95
_Jv_GetStaticByteField (jclass, _Jv_Field* field)
96
{
97
  return * (jbyte *) field->u.addr;
98
}
99
 
100
inline jshort
101
_Jv_GetStaticShortField (jclass, _Jv_Field* field)
102
{
103
  return * (jshort *) field->u.addr;
104
}
105
 
106
inline jint
107
_Jv_GetStaticIntField (jclass, _Jv_Field* field)
108
{
109
  return * (jint *) field->u.addr;
110
}
111
 
112
inline jlong
113
_Jv_GetStaticLongField (jclass, _Jv_Field* field)
114
{
115
  return * (jlong *) field->u.addr;
116
}
117
 
118
inline jobject
119
_Jv_GetObjectField (jobject obj, _Jv_Field* field)
120
{
121
  return field->getObjectField (obj);
122
}
123
 
124
inline jbyte
125
_Jv_GetByteField (jobject obj, _Jv_Field* field)
126
{
127
  return * (jbyte *) ((char*) obj + field->getOffset ());
128
}
129
 
130
inline jshort
131
_Jv_GetShortField (jobject obj, _Jv_Field* field)
132
{
133
  return * (jshort *) ((char*) obj + field->getOffset ());
134
}
135
inline jint
136
_Jv_GetIntField (jobject obj, _Jv_Field* field)
137
{
138
  return * (jint *) ((char*) obj + field->getOffset ());
139
}
140
inline jlong
141
_Jv_GetLongField (jobject obj, _Jv_Field* field)
142
{
143
  return * (jlong *) ((char*) obj + field->getOffset ());
144
}
145
 
146
extern inline jfieldID
147
_Jv_FromReflectedField (java::lang::reflect::Field *field)
148
{
149
  return (jfieldID) ((char *) field->declaringClass->fields + field->offset);
150
}
151
 
152
 
153
#ifdef __GCJ_CNI_H__
154
extern inline jfieldID
155
JvGetFirstInstanceField (jclass klass)
156
{
157
  return &(klass->fields[klass->static_field_count]);
158
}
159
 
160
extern inline jint
161
JvNumInstanceFields (jclass klass)
162
{
163
  return klass->field_count - klass->static_field_count;
164
}
165
 
166
extern inline jfieldID
167
JvGetFirstStaticField (jclass klass)
168
{
169
  return &(klass->fields[0]);
170
}
171
 
172
extern inline jint
173
JvNumStaticFields (jclass klass)
174
{
175
  return klass->static_field_count;
176
}
177
 
178
extern inline jboolean
179
JvFieldIsRef (jfieldID field)
180
{
181
  return field->isRef () && field->type != &gnu::gcj::RawData::class$;
182
}
183
 
184
extern inline jobject
185
JvGetObjectField (jobject obj, _Jv_Field* field)
186
{
187
  return _Jv_GetObjectField (obj, field);
188
}
189
#endif /* defined (__GCJ_CNI_H__) */
190
 
191
#endif /* __cplusplus */
192
 
193
#endif /* __GCJ_FIELD_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.