#include <assert.h>
#include <string.h>
#include "spvm_field.h"
#include "spvm_allocator.h"
#include "spvm_type.h"
#include "spvm_op.h"
#include "spvm_compiler.h"
#include "spvm_basic_type.h"
SPVM_FIELD* SPVM_FIELD_new(SPVM_COMPILER* compiler) {
return
SPVM_ALLOCATOR_alloc_memory_block_permanent(compiler->current_each_compile_allocator,
sizeof
(SPVM_FIELD));
}
int32_t SPVM_FIELD_get_size(SPVM_COMPILER* compiler, SPVM_FIELD* field) {
SPVM_TYPE* field_type = field->type;
int32_t size;
if
(field_type->dimension == 0 && field_type->basic_type->id >= SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE && field_type->basic_type->id <= SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE) {
if
(field_type->basic_type->id == SPVM_NATIVE_C_BASIC_TYPE_ID_BYTE) {
size =
sizeof
(int8_t);
}
else
if
(field_type->basic_type->id == SPVM_NATIVE_C_BASIC_TYPE_ID_SHORT) {
size =
sizeof
(int16_t);
}
else
if
(field_type->basic_type->id == SPVM_NATIVE_C_BASIC_TYPE_ID_INT || field_type->basic_type->id == SPVM_NATIVE_C_BASIC_TYPE_ID_FLOAT) {
size =
sizeof
(int32_t);
}
else
if
(field_type->basic_type->id == SPVM_NATIVE_C_BASIC_TYPE_ID_LONG || field_type->basic_type->id == SPVM_NATIVE_C_BASIC_TYPE_ID_DOUBLE) {
size =
sizeof
(int64_t);
}
else
{
assert
(0);
}
}
else
{
size =
sizeof
(
void
*);
}
return
size;
}