package com.oracle.svm.core.c.function;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.util.Arrays;
import org.graalvm.util.DirectAnnotationAccess;
import com.oracle.svm.core.util.VMError;
public final class CEntryPointErrors {
private CEntryPointErrors() {
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
private @interface Description {
String value();
}
@Description("No error occurred.")
public static final int NO_ERROR = 0;
@Description("An unspecified error occurred.")
public static final int UNSPECIFIED = 1;
@Description("An argument was NULL.")
public static final int NULL_ARGUMENT = 2;
@Description("The specified thread is not attached to the isolate.")
public static final int UNATTACHED_THREAD = 4;
@Description("The specified isolate is unknown.")
public static final int UNINITIALIZED_ISOLATE = 5;
@Description("Locating the image file failed.")
public static final int LOCATE_IMAGE_FAILED = 6;
@Description("Opening the located image file failed.")
public static final int OPEN_IMAGE_FAILED = 7;
@Description("Mapping the heap from the image file into memory failed.")
public static final int MAP_HEAP_FAILED = 8;
@Description("Reserving address space for the new isolate failed.")
public static final int RESERVE_ADDRESS_SPACE_FAILED = 801;
@Description("The image heap does not fit in the available address space.")
public static final int INSUFFICIENT_ADDRESS_SPACE = 802;
@Description("Setting the protection of the heap memory failed.")
public static final int PROTECT_HEAP_FAILED = 9;
@Description("The version of the specified isolate parameters is unsupported.")
public static final int UNSUPPORTED_ISOLATE_PARAMETERS_VERSION = 10;
@Description("Initialization of threading in the isolate failed.")
public static final int THREADING_INITIALIZATION_FAILED = 11;
@Description("Some exception is not caught.")
public static final int UNCAUGHT_EXCEPTION = 12;
@Description("Initialization the isolate failed.")
public static final int ISOLATE_INITIALIZATION_FAILED = 13;
@Description("Opening the located auxiliary image file failed.")
public static final int OPEN_AUX_IMAGE_FAILED = 14;
@Description("Reading the opened auxiliary image file failed.")
public static final int READ_AUX_IMAGE_META_FAILED = 15;
@Description("Mapping the auxiliary image file into memory failed.")
public static final int MAP_AUX_IMAGE_FAILED = 16;
@Description("Insufficient memory for the auxiliary image.")
public static final int INSUFFICIENT_AUX_IMAGE_MEMORY = 17;
@Description("Auxiliary images are not supported on this platform or edition.")
public static final int AUX_IMAGE_UNSUPPORTED = 18;
@Description("Releasing the isolate's address space failed.")
public static final int FREE_ADDRESS_SPACE_FAILED = 19;
@Description("Releasing the isolate's image heap memory failed.")
public static final int FREE_IMAGE_HEAP_FAILED = 20;
public static String getDescription(int code) {
String result = null;
if (code >= 0 && code < DESCRIPTIONS.length) {
result = DESCRIPTIONS[code];
}
if (result == null) {
return "(Unknown error)";
}
return result;
}
private static final String[] DESCRIPTIONS;
static {
try {
String[] array = new String[16];
int maxValue = 0;
for (Field field : CEntryPointErrors.class.getDeclaredFields()) {
if (!field.getType().equals(int.class)) {
continue;
}
int value = field.getInt(null);
String description = DirectAnnotationAccess.getAnnotation(field, CEntryPointErrors.Description.class).value();
maxValue = Math.max(value, maxValue);
if (maxValue >= array.length) {
array = Arrays.copyOf(array, 2 * maxValue);
}
array[value] = description;
}
DESCRIPTIONS = Arrays.copyOf(array, maxValue + 1);
} catch (IllegalAccessException e) {
throw VMError.shouldNotReachHere(e);
}
}
}