blob: 1d1afe4d6930a68e5d2c123f47d52020476a94fc [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_FIELD_ACCESS_H
#define _VM_FIELD_ACCESS_H
#include "common.h"
#include "hycomp.h"
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @file
* Part of Class Support interface related to retrieving different
* properties of fields contained in class
*/
/**
* Returns the name of the field.
*
* @param field - the field handle
*
* @return The name of the field.
*/
DECLARE_OPEN(const char*, field_get_name, (Field_Handle field));
/**
* Returns the field <i>descriptor</i>.
*
* The descriptor is a string representation of the field types as
* defined by the JVM specification.
*
* @param field - the field handle
*
* @return The field descriptor.
*/
DECLARE_OPEN(const char*, field_get_descriptor, (Field_Handle field));
/**
* Returns the class that defined the given field.
*
* @param field - the field handle
*
* @return The class that defined the field.
*/
DECLARE_OPEN(Class_Handle, field_get_class, (Field_Handle field));
/**
* Returns the address of the given static field.
*
* @param field - the field handle
*
* @return The address of the static field.
*/
DECLARE_OPEN(void*, field_get_address, (Field_Handle field));
/**
* Returns the offset to the given instance field.
*
* @param field - the field handle
*
* @return The offset to the instance field.
*/
DECLARE_OPEN(unsigned, field_get_offset, (Field_Handle field));
/**
* Returns the type info that represents the type of the field.
*
* @param field - the field handle
*
* @return Type information.
*/
DECLARE_OPEN(Type_Info_Handle, field_get_type_info, (Field_Handle field));
/**
* Returns the class that represents the type of the field.
*
* @param field - the field handle
*
* @return the class that represents the type of the field.
*/
DECLARE_OPEN(Class_Handle, field_get_class_of_field_type, (Field_Handle field));
/**
* Checks whether the field is final.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is final.
*
* #note Extended
*/
DECLARE_OPEN(BOOLEAN, field_is_final, (Field_Handle field));
/**
* Checks whether the field is static.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is static; otherwise, <code>FALSE</code>.
*
* @ingroup Extended
*/
DECLARE_OPEN(BOOLEAN, field_is_static, (Field_Handle field));
/**
* Checks whether the field is private.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is private; otherwise, <code>FALSE</code>.
*
* @ingroup Extended
*/
DECLARE_OPEN(BOOLEAN, field_is_private, (Field_Handle field));
/**
* Checks whether the field is protected.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is protected; otherwise, <code>FALSE</code>.
*
* @ingroup Extended
*/
DECLARE_OPEN(BOOLEAN, field_is_protected, (Field_Handle field));
/**
* Checks whether the field is public.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is public; otherwise, <code>FALSE</code>.
*
* @ingroup Extended
*/
DECLARE_OPEN(BOOLEAN, field_is_public, (Field_Handle field));
/**
* Checks whether the field is volatile.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is volatile; otherwise, <code>FALSE</code>.
*
* @ingroup Extended
*/
DECLARE_OPEN(BOOLEAN, field_is_volatile, (Field_Handle field));
/**
* Checks whether the field is reference field.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is reference.
*
* #note Extended
*/
DECLARE_OPEN(BOOLEAN, field_is_reference, (Field_Handle field));
/**
* Checks whether the field is literal.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is literal.
*/
DECLARE_OPEN(BOOLEAN, field_is_literal, (Field_Handle field));
/**
* Checks whether the field is injected.
*
* @param field - the field handle
*
* @return <code>TRUE</code> if the field is injected; otherwise, <code>FALSE</code>.
*/
DECLARE_OPEN(BOOLEAN, field_is_injected, (Field_Handle field));
/**
* @return <code>TRUE</code> if the field is a magic type field
*
* This function doesn't cause resolution of the class of the field.
*/
DECLARE_OPEN(BOOLEAN, field_is_magic, (Field_Handle fh));
/**
* @return The address and bit mask, for the flag which determine whether field
* access event should be sent. JIT may use the following expression to
* determine if specified field access should be tracked:
* ( **address & *mask != 0 )
*
* @param field - handle of the field
* @param[out] address - pointer to the address of the byte which contains the flag
* @param[out] mask - pointer to the bit mask of the flag
*/
DECLARE_OPEN(void, field_get_track_access_flag, (Field_Handle field, char** address, char* mask));
/**
* @return the address and bit mask, for the flag which determine whether field
* modification event should be sent. JIT may use the following expression to
* determine if specified field modification should be tracked:
* ( **address & *mask != 0 )
*
* @param field - handle of the field
* @param[out] address - pointer to the address of the byte which contains the flag
* @param[out] mask - pointer to the bit mask of the flag
*/
DECLARE_OPEN(void, field_get_track_modification_flag, (Field_Handle field, char** address, char* mask));
}
#endif // _VM_FIELD_ACCESS_H