blob: f5138306ea3f8900a273c69009fe3c5411cf67d0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Intel, Pavel Pervov
*/
#ifndef _VM_CLASS_MANIPULATION_H
#define _VM_CLASS_MANIPULATION_H
#include "open/types.h"
#include "open/common.h"
/**
* @file
* Part of Class Support interface related to retrieving and changing
* different class properties.
*
* The list of properties includes, but is not limited to, class name
* class super class, fields, methods and so on.
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* Returns the class name.
*
* @param klass - the class handle
*
* @return Class name bytes.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(const char*, class_get_name, (Class_Handle klass));
/**
* Returns class major version.
*
* @param klass - class handler
*
* @return Class major version.
*
* @note Assertion is raised if <code>klass</code> is equal
* to <code>NULL</code>.
*/
DECLARE_OPEN(unsigned short, class_get_version, (Class_Handle klass));
/**
* Returns the class name.
*
* @param klass - the class handle
*
* @return Class name bytes.
*
* @ingroup Extended
*/
const char*
class_get_java_name(Class_Handle klass);
/**
* Returns the super class of the current class.
*
* @param klass - the class handle
*
* @return The class handle of the super class.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(Class_Handle, class_get_super_class, (Class_Handle klass));
/**
* Returns non-zero value if the class represented by Class_Handle
* is a descendant of java.lang.ref.Reference. The particular type
* of reference (weak, soft or phantom) is encoded by the return
* value as WeakReferenceType.
*
* @param clss - the class handle
*
* @return Type of weak reference represented by the class handle;
* <code>NOT_REFERENCE</code> (0) otherwise
*/
VMEXPORT WeakReferenceType class_is_reference(Class_Handle clss);
/**
* Returns the class loader of the current class.
*
* @param klass - the class handle
*
* @return The class loader.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(Class_Loader_Handle, class_get_class_loader, (Class_Handle klass));
/**
* Checks whether the current class is a primitive type.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> for a primitive class; otherwise, <code>FALSE</code>.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_primitive, (Class_Handle klass));
/**
* Checks whether the current class is an array.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> for an array; otherwise, <code>FALSE</code>.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_array, (Class_Handle klass));
/**
* Checks whether the current class is an instance of another class.
*
* @param klass - the class handle
* @param super_klass - super class handle
*
* @return <code>TRUE</code> if <i>klass</i> is an instance of a <i>super_class</i>; otherwise, <code>FALSE</code>.
*
* @note An assertion is raised if <i>klass</i> or <i>super_klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_instanceof, (Class_Handle klass, Class_Handle super_klass));
/**
* Checks whether the current class is abstract.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> for an abstract class; otherwise, <code>FALSE</code>.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
* @note Replaces the class_is_abstract function.
*/
DECLARE_OPEN(BOOLEAN, class_is_abstract, (Class_Handle klass));
/**
* Checks whether the current class is an interface class.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> for an interface class; otherwise, <code>FALSE</code>.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_interface, (Class_Handle klass));
/**
* Checks whether the current class is final.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> for a final class; otherwise, <code>FALSE</code>.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_final, (Class_Handle klass));
/**
* Checks whether the given classes are the same.
*
* @param klass1 - the first class handle
* @param klass2 - the second class handle
*
* @return <code>TRUE</code> for the same classes; otherwise, <code>FALSE</code>.
*
* @note An assertion is raised if <i>klass1</i> or <i>klass2</i> equal to <code>NULL</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_same_class, (Class_Handle klass1, Class_Handle klass2));
/**
* Checks whether the given classes have the same package.
*
* @param klass1 - class handler
* @param klass2 - class handler
*
* @return If classes have the same package returns <code>true</code>, else returns <code>false</code>.
*
* @note Assertion is raised if klass1 or klass2 are equal to null.
*/
DECLARE_OPEN(BOOLEAN, class_is_same_package, (Class_Handle klass1, Class_Handle klass2));
/**
* Returns number of super interfaces of the class.
*
* @param klass - class handler
*
* @return Number of super interfaces of class.
*
* @note Assertion is raised if klass is equal to null.
*/
DECLARE_OPEN(unsigned short, class_get_superinterface_number, (Class_Handle klass));
/**
* Returns superinterface of class by the given number.
*
* @param klass - class handler
* @param index - super interface number
*
* @return Super interface of class.
*
* @note Assertion is raised if klass is equal to null or index is out of range.
*/
DECLARE_OPEN(Class_Handle, class_get_superinterface, (Class_Handle klass, unsigned short index));
/**
* Returns the offset of the referent field
* in the <code>java.lang.ref.Reference</code> object.
*
* It is assumed that the class represents the reference object,
* that is, running the class_is_reference function returns a non-zero value.
*
* @note The returned value is most probably a constant
* and does not depend on the class.
*
* @note This interface allows only one weak, soft or phantom reference per object.
* It seems to be sufficient for the JVM spec.
*/
DECLARE_OPEN(unsigned, class_get_referent_offset, (Class_Handle clss));
/**
* Returns the VM_Data_Type value for the given class.
*
* @param klass - the class handle
*
* @return The VM_Data_Type value.
*/
DECLARE_OPEN(VM_Data_Type, class_get_primitive_type_of_class, (Class_Handle klass));
/**
* Returns the class corresponding to the primitive type.
*
* @param type - the primitive type
*
* @return The class corresponding to a primitive type.
*
* @note For all primitive types <i>type</i> is:
* <code>type == class_get_primitive_type_of_class(class_get_class_of_primitive_type(type))</code>
*/
DECLARE_OPEN(Class_Handle, class_get_class_of_primitive_type, (VM_Data_Type type));
/**
* For given a class handle <i>klass</i> constructs a class of
* the type representing on-dimentional array of <i>klass</i>.
* For example, given the class of Ljava/lang/String; this function
* will return array class [Ljava/lang/String;.
*
* @param klass - the class handle
*
* @return The class handle of the type representing the array of <i>klass</i>.
*/
DECLARE_OPEN(Class_Handle, class_get_array_of_class, (Class_Handle klass));
/**
* Returns the class of the array element of the given class.
*
* @param klass - the class handle
*
* @return The class of the array element of the given class.
*
* @note The behavior is undefined if the parameter does not represent
* an array class.
*/
DECLARE_OPEN(Class_Handle, class_get_array_element_class, (Class_Handle klass));
/**
* Returns class with the given name extended by the given class.
*
* @param klass - checked klass
* @param super_name - parent class name
*
* @return If the given class extends the class with given name,
* function returns extended class handle, otherwise <code>NULL</code> is returned.
*
* @note Assertion is raised if <i>klass</i> or <i>super_name</i> are equal to null.
*/
DECLARE_OPEN(Class_Handle, class_get_extended_class, (Class_Handle klass, const char* super_name));
/**
* Function returns number of methods for current class.
* @param klass - class handler
* @return Number of methods for class.
* @note Assertion is raised if klass is equal to null.
*/
DECLARE_OPEN(unsigned short, class_get_method_number, (Class_Handle klass));
/**
* Function returns method of current class.
* @param klass - class handler
* @param index - method index
* @return Method handler.
* @note Assertion is raised if klass is equal to null or index is out of range.
*/
DECLARE_OPEN(Method_Handle, class_get_method, (Class_Handle klass, unsigned short index));
/**
* Returns the type info for the elements of the array for array classes.
*
* @param klass - the class handle
*
* @return Type information for the elements of the array.
*/
DECLARE_OPEN(Type_Info_Handle, class_get_element_type_info, (Class_Handle klass));
/**
* Gets the handle for the field.
*
* @param klass - the class handle
* @param index - this value is the sequence number of field in the set of fields
* both inherited and defined in this class.
*
* @return The handle for the field. If <i>index</i> is greater than or equal to
* <code>class_num_instance_fields_recursive</code>, function returns NULL.
*/
DECLARE_OPEN(Field_Handle, class_get_instance_field_recursive, (Class_Handle klass, unsigned index));
/**
* Returns the size of the element of the array for class handles that represent an array.
*
* This function is a combination of functions class_get_instance_size and
* class_get_array_element_class.
*
* @param klass - the class handle
*
* @return The size of the element of the array.
*
* @ingroup Extended
*/
DECLARE_OPEN(unsigned, class_get_array_element_size, (Class_Handle klass));
/**
* Returns the vtable handle for the given class.
*
* @param klass - the class handle
*
* @return The vtable handle for the given class.
*/
DECLARE_OPEN(VTable_Handle, class_get_vtable, (Class_Handle klass));
/**
* Verifies that the class is fully initialized.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> if the class is already fully
* initialized; otherwise, <code>FALSE</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_initialized, (Class_Handle klass));
/**
* Gets the alignment of the class.
*
* @param klass - the class handle
*
* @return The alignment of the class.
*/
DECLARE_OPEN(unsigned, class_get_alignment, (Class_Handle klass));
/**
* Checks whether the class has a non-trivial finalizer.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> if the class has a non-trivial finalizer.
* : otherwise, <code>FALSE</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_finalizable, (Class_Handle klass));
/**
* Checks whether the class is an array of primitives.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> if this is an array of primitives.
* : otherwise, <code>FALSE</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_non_ref_array, (Class_Handle klass));
/**
* Checks whether the class represented by Class_Handle
* is a descendant of <code>java.lang.ref.Reference</code>.
*
* The type of reference (weak, soft or phantom) is encoded in the return
* value of WeakReferenceType.
*
* @param klass - the class handle
*
* @return One of WEAK_REFERENCE, SOFT_REFERENCE, or PHANTOM_REFERENCE if
* the given class is corresponding descendant of <code>java.lang.ref.Reference</code>.
* NOT_REFERENCE (0) is returned otherwise.
*/
WeakReferenceType
class_get_reference_type(Class_Handle klass);
/**
* Checks whether the class is likely to be used as an exception object.
*
* This is a hint only. Even if this function returns <code>FALSE</code>,
* the class might still be used for exceptions.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> if the class is likely to be used
* as an exception object; otherwise, <code>FALSE</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_throwable, (Class_Handle klass));
/**
* Checks whether the class represents an enumerator.
*
* @param klass - the class handle
*
* @return <code>TRUE</code> if the class represents an enum.
* : otherwise, <code>FALSE</code>.
*/
DECLARE_OPEN(BOOLEAN, class_is_enum, (Class_Handle klass));
/**
* Returns the number of instance fields defined in the given class.
* This number includes inherited fields.
*
* @param klass - the class handle
*
* @return The number of instance fields defined in a class.
*
* @note Replaces the class_num_instance_fields_recursive function.
*/
unsigned
class_get_all_instance_fields_number(Class_Handle klass);
/**
* Returns the name of the package containing the class.
*
* @param klass - the class handle
*
* @return The name of the package containing the class.
*
* @note Not used
*/
DECLARE_OPEN(const char*, class_get_package_name, (Class_Handle klass));
/**
* Returns the pointer to the location of the constant.
*
* @param klass - the class handle
* @param index - interpreted as a constant pool index
*
* @return The pointer to the location of the constant in the
* constant pool of the class.
*
* @note This function must not be called for constant strings.
* Instead, one of the following can be done:
* <ol>
* <li>JIT-compiled code gets the string object at run time by calling
* VM_RT_LDC_STRING
* <li>The class_get_const_string_intern_addr() function is used.
* </ol>
*/
DECLARE_OPEN(const void *, class_cp_get_const_addr, (Class_Handle klass, unsigned short index));
/**
* Returns the type of the compile-time constant.
*
* @param klass - the class handle
* @param index - interpreted as a constant pool index
*
* @return The type of a compile-time constant.
*/
DECLARE_OPEN(VM_Data_Type, class_cp_get_const_type, (Class_Handle ch, unsigned short idx));
/**
* Returns the address of the interned version of the string.
*
* Calling this function has a side-effect of interning the string,
* so that the JIT compiler can load a reference to the interned string
* without checking whether it is <code>NULL</code>.
*
* @param klass - the class handle
* @param index - interpreted as a constant pool index
*
* @return The address of the interned version of the string.
*
* @note Not used
* FIXME the above side effect is no longer true.
*/
DECLARE_OPEN(const void*, class_get_const_string_intern_addr, (Class_Handle ch, unsigned short idx));
/**
* Checks whether the entry by the specified constant pool index is resolved.
*
* @param klass - the class handle
* @param cp_index - interpreted as a constant pool index
*
* @return <code>TRUE</code> if the constant pool entry is resolved; <code>FALSE</code> otherwise.
*/
DECLARE_OPEN(BOOLEAN, class_cp_is_entry_resolved, (Class_Handle klass, unsigned short cp_index));
/**
* Returns the name for the field or method/interface in the constant pool entry.
*
* @param klass - the class handle
* @param cp_index - interpreted as a constant pool index
*
* @return The name for field or method/interface in constant pool entry.
*/
DECLARE_OPEN(const char*, class_cp_get_entry_name, (Class_Handle cl, unsigned short index));
/**
* Returns the descriptor for the field or method/interface in the constant pool entry.
*
* @param klass - the class handle
* @param cp_index - interpreted as a constant pool index
*
* @return The descriptor for field or method/interface in constant pool entry.
*/
DECLARE_OPEN(const char*, class_cp_get_entry_descriptor, (Class_Handle klass, unsigned short cp_index));
/**
* Returns the name of the class of the field or method/interface in the constant pool entry.
*
* @param klass - the class handle
* @param cp_index - interpreted as a constant pool index
*
* @return The name of the class of field or method/interface in constant pool entry.
*/
DECLARE_OPEN(const char *, class_cp_get_entry_class_name, (Class_Handle cl, unsigned short index));
/**
* Returns number of dimentions of symbolic link to an array class
*
* @param klass - the class handle
* @param cp_index - index into the constant pool of the <code>klass</code>
*
* @return The number of dimentions in array linked from the constant pool
*/
DECLARE_OPEN(unsigned, class_cp_get_num_array_dimensions, (Class_Handle klass, unsigned short cp_index));
/**
* Returns the data type for the field in the constant pool entry.
*
* @param klass - the class handle
* @param cp_index - interpreted as a constant pool index
*
* @return The data type for the field in the constant pool entry.
*/
DECLARE_OPEN(VM_Data_Type, class_cp_get_field_type, (Class_Handle src_class, unsigned short cp_index));
/**
* Returns the class constant pool size.
*
* @param klass - the class handle
*
* @return Constant pool size.
*
* @note An assertion is raised if <i>klass</i> equals to <code>NULL</code>.
*/
DECLARE_OPEN(unsigned short, class_cp_get_size, (Class_Handle klass));
/**
* Returns the constant pool entry tag.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The constant pool entry tag.
*
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(unsigned char, class_cp_get_tag, (Class_Handle klass, unsigned short index));
/**
* Returns the class name entry index in the constant pool.
* This function is only legal for constant pool entries with CONSTANT_Class tag.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The class name entry index.
*
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(unsigned short, class_cp_get_class_name_index, (Class_Handle klass, unsigned short index));
/**
* Returns the class name from the constant pool.
* This function is only legal for constant pool entries with CONSTANT_Class tag.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The class name.
*
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(const char*, class_cp_get_class_name, (Class_Handle cl, unsigned short index));
/**
* Returns the class name entry index in the constant pool.
*
* The function is legal for constant pool entries with CONSTANT_Fieldref,
* CONSTANT_Methodref and CONSTANT_InterfaceMethodref tags.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The class name entry index.
*
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(unsigned short, class_cp_get_ref_class_index, (Class_Handle klass, unsigned short index));
/**
* Returns the name and type entry index in the constant pool.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The name_and_type entry index.
*
* @note Function is valid for constant pool entries with
* CONSTANT_Fieldref, CONSTANT_Methodref and CONSTANT_InterfaceMethodref tags.
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(unsigned short, class_cp_get_ref_name_and_type_index, (Class_Handle klass, unsigned short index));
/**
* Returns the string entry index in the constant pool.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The string entry index.
*
* @note Function is valid for constant pool entries with CONSTANT_String tag.
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(unsigned short, class_cp_get_string_index, (Class_Handle klass, unsigned short index));
/**
* Returns the name entry index in the constant pool.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The name entry index.
*
* @note Function is valid for constant pool entries with CONSTANT_NameAndType tag.
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(unsigned short, class_cp_get_name_index, (Class_Handle klass, unsigned short index));
/**
* Returns the descriptor entry index in the constant pool.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return The descriptor entry index.
*
* @note Function is valid for constant pool entries with CONSTANT_NameAndType tag.
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(unsigned short, class_cp_get_descriptor_index, (Class_Handle klass, unsigned short index));
/**
* Returns bytes for the UTF8 constant pool entry.
* This function is legal for constant pool entries with CONSTANT_UTF8 tags.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return Bytes for the UTF8 constant pool entry.
*
* @note Function is valid for constant pool entries with CONSTANT_UTF8 tag.
* @note An assertion is raised if <i>klass</i> equals to
* <code>NULL</code> or if <i>index</i> is out of range.
*/
DECLARE_OPEN(const char*, class_cp_get_utf8_bytes, (Class_Handle klass, unsigned short index));
/**
* Function sets verify data to a given class.
*
* @param klass - class handler
* @param data - verify data
*
* @note Assertion is raised if class is equal to null.
* @note Function makes non thread safe operation and
* must be called in thread safe manner.
*/
DECLARE_OPEN(void, class_set_verify_data_ptr, (Class_Handle klass, void* data));
/**
* Function returns verify data for a given class.
*
* @param klass - class handler
*
* @return Verify data for a given class.
*
* @note Assertion is raised if klass is equal to null.
*/
DECLARE_OPEN(void*, class_get_verify_data_ptr, (Class_Handle klass));
/**
* Resolves the class for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
* @param exc - the pointer to exception
*
* @return The class resolved for the constant pool entry.
*
* @note Replaces the vm_resolve_class and resolve_class functions.
*/
Class_Handle
class_resolve_class(Class_Handle klass, unsigned short index);
/**
* Resolves the class for the constant pool entry
* and checks whether an instance can be created.
*
* @param klass - the class handle
* @param index - the constant pool entry index
* @param exc - the pointer to the exception
*
* @return The class resolved for the constant pool entry. If no instances
* of the class can be created, returns <code>NULL</code> and raises and exception.
*
* @note Replaces the vm_resolve_class_new and resolve_class_new functions.
*
*/
Class_Handle
class_resolve_class_new(Class_Handle klass, unsigned short index);
/**
* Resolves the class method for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return interface method resolved for the constant pool entry.
*/
DECLARE_OPEN(Method_Handle, class_resolve_method, (Class_Handle klass, unsigned short index));
/**
* Resolves the class interface method for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
*
* @return interface method resolved for the constant pool entry.
*
* @note Replace the resolve_interface_method function.
*/
Method_Handle
class_resolve_interface_method(Class_Handle klass, unsigned short index);
/**
* Resolves class static method for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
* @param exc - the pointer to exception
*
* @return The static method resolved for the constant pool entry.
*
* @note Replaces the resolve_static_method function.
*/
Method_Handle
class_resolve_static_method(Class_Handle klass, unsigned short index);
/**
* Resolves the class virtual method for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
* @param exc - the pointer to exception
*
* @return The virtual method resolved for the constant pool entry.
*
* @note Replaces the resolve_virtual_method function.
*/
Method_Handle
class_resolve_virtual_method(Class_Handle klass, unsigned short index);
/**
* Resolves the class special method for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
* @param exc - pointer to exception
*
* @return The special method resolved for the constant pool entry.
*
* @note Replaces the resolve_special_method function.
*/
Method_Handle
class_resolve_special_method(Class_Handle klass, unsigned short index);
/**
* Resolves the class static field for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
* @param exc - pointer to exception
*
* @return The static field resolved for the constant pool entry.
*
* @note Replaces the resolve_static_field function.
*/
Field_Handle
class_resolve_static_field(Class_Handle klass, unsigned short index);
/**
* Resolves the class non-static field for the constant pool entry.
*
* @param klass - the class handle
* @param index - the constant pool entry index
* @param exc - pointer to exception
*
* @return The non-static field resolved for the constant pool entry.
*
* @note Replaces the resolve_nonstatic_field function.
*/
DECLARE_OPEN(Field_Handle, class_resolve_nonstatic_field, (Class_Handle klass, unsigned short index));
/**
* Provides the initialization phase for the given class.
*
* @param klass - class handle
*
* @note For interpreter use only.
*/
DECLARE_OPEN(void, class_initialize, (Class_Handle klass));
#ifdef __cplusplus
}
#endif
#endif // _VM_CLASS_MANIPULATION_H