gcc/libjava/gcj/javaprims.h

947 lines
30 KiB
C
Raw Normal View History

1999-04-07 16:42:40 +02:00
// javaprims.h - Main external header file for libgcj. -*- c++ -*-
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation
1999-04-07 16:42:40 +02:00
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
#ifndef __JAVAPRIMS_H__
#define __JAVAPRIMS_H__
// Force C++ compiler to use Java-style exceptions.
#pragma GCC java_exceptions
[multiple changes] 2001-05-23 Tom Tromey <tromey@redhat.com> * posix-threads.cc (_Jv_self_cache): Renamed from self_cache. * gcj/Makefile.in: Rebuilt. * gcj/Makefile.am (gcj_HEADERS): Added libgcj-config.h. * gcj/javaprims.h: Include gcj/libgcj-config.h. * gcj/libgcj-config.h.in: New file. * libgcj.spec.in (*jc1): Added @HASH_SYNC_SPEC@. * configure: Rebuilt. * configure.in: Enable hash synchronization by default on some platforms. (HASH_SYNC_SPEC): New subst. (AC_CONFIG_HEADER): Added gcj/libgcj-config.h. Correctly use `test -z' instead of `test -n' in a couple places. (JV_HASH_SYNCHRONIZATION): Use AC_DEFINE; don't add to LIBGCJ_CXXFLAGS. * configure.host (enable_java_net_default): Initialize. (enable_hash_synchronization_default): New variable. 2001-05-23 Hans Boehm <Hans_Boehm@hp.com> * boehm.cc (_Jv_MarkObj): Don't mark sync_info when hash synchronization in use. (_Jv_MarkArray): Likewise. (_Jv_AllocBytes): Don't check return result. (handle_out_of_memory): New function. (_Jv_InitGC): Set GC_oom_fn. (trace_one_vtable): New global. (_Jv_AllocTraceOne): New function. * configure.in: Added --enable-hash-synchronization. * defineclass.cc, prims.cc, resolve.cc, java/lang/natString.cc, java/net/natInetAddress.cc: Remove _Jv_AllocBytesChecked. * nogc.cc (_Jv_AllocObj): Throw out-of-memory. (_Jv_AllocArray): Likewise. (_Jv_AllocBytes): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_AllocTraceOne): Likewise. * posix-threads.cc (_Jv_ThreadRegister): Handle slow pthread_self(). (self_cache): New global. (_Jv_ThreadSelf_out_of_line): New function. * prims.cc (_Jv_AllocBytesChecked): Removed. (_Jv_ThrowNoMemory): New function. (_Jv_AllocObject): Don't check for null return from allocator. (_Jv_NewObjectArray): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_NewPrimArray): Allocate pointer-free object if possible. * include/javaprims.h (_Jv_AllocPtrFreeObject): Declare. (_Jv_MonitorEnter, _Jv_MonitorExit): Don't return value. * include/boehm-gc.h (_Jv_AllocObj): Define. (_Jv_AllocPtrFreeObj): Define. * include/jvm.h (_Jv_AllocPtrFreeObj): Declare. (_Jv_ThrowNoMemory): Declare. (_Jv_AllocTraceOne): Declare. (_Jv_AllocBytesChecked): Removed. * include/posix-threads.h (_Jv_MutexInit, _Jv_MutexLock, _Jv_MutexUnlock): Handle LOCK_DEBUG. (_Jv_ThreadSelf): Handle case where system pthread_self() is slow. * java/lang/Class.h (Class): Declare _Jv_AllocPtrFreeObj as friend. * java/lang/Object.h (sync_info): Conditional upon presence of hash synchronization. * java/lang/natObject.cc: Much new code to handle thin locks and hash synchronization. * java/lang/natString.cc (_Jv_AllocString): Allocate pointer-free object if possible. From-SVN: r42519
2001-05-24 07:40:37 +02:00
#include <gcj/libgcj-config.h>
// FIXME: this is a hack until we get a proper gcjh.
// It is needed to work around system header files that define TRUE
// and FALSE.
#undef TRUE
#define TRUE TRUE
#undef FALSE
#define FALSE FALSE
1999-04-07 16:42:40 +02:00
// To force selection of correct types that will mangle consistently
// across platforms.
extern "Java"
{
typedef __java_byte jbyte;
typedef __java_short jshort;
typedef __java_int jint;
typedef __java_long jlong;
typedef __java_float jfloat;
typedef __java_double jdouble;
typedef __java_char jchar;
typedef __java_boolean jboolean;
typedef jint jsize;
// The following class declarations are automatically generated by
// the `classes.pl' script.
namespace java
{
namespace io
{
class BufferedInputStream;
class BufferedOutputStream;
class BufferedReader;
class BufferedWriter;
class ByteArrayInputStream;
class ByteArrayOutputStream;
class CharArrayReader;
class CharArrayWriter;
class CharConversionException;
class Closeable;
1999-04-07 16:42:40 +02:00
class DataInput;
class DataInputStream;
class DataOutput;
class DataOutputStream;
class DeleteFileHelper;
class DeleteFileHelper$1;
1999-04-07 16:42:40 +02:00
class EOFException;
class Externalizable;
1999-04-07 16:42:40 +02:00
class File;
class FileDescriptor;
class FileFilter;
1999-04-07 16:42:40 +02:00
class FileInputStream;
class FileNotFoundException;
class FileOutputStream;
class FilePermission;
1999-04-07 16:42:40 +02:00
class FileReader;
class FileWriter;
class FilenameFilter;
class FilterInputStream;
class FilterOutputStream;
class FilterReader;
class FilterWriter;
class Flushable;
1999-04-07 16:42:40 +02:00
class IOException;
class InputStream;
class InputStreamReader;
class InterruptedIOException;
class InvalidClassException;
class InvalidObjectException;
1999-04-07 16:42:40 +02:00
class LineNumberInputStream;
class LineNumberReader;
class NotActiveException;
class NotSerializableException;
class ObjectInput;
class ObjectInputStream;
class ObjectInputStream$1;
class ObjectInputStream$2;
class ObjectInputStream$GetField;
class ObjectInputStream$ValidatorAndPriority;
class ObjectInputValidation;
class ObjectOutput;
class ObjectOutputStream;
class ObjectOutputStream$1;
class ObjectOutputStream$PutField;
class ObjectStreamClass;
class ObjectStreamClass$1;
class ObjectStreamClass$2;
class ObjectStreamClass$InterfaceComparator;
class ObjectStreamClass$MemberComparator;
class ObjectStreamConstants;
class ObjectStreamException;
class ObjectStreamField;
class ObjectStreamField$1;
class OptionalDataException;
1999-04-07 16:42:40 +02:00
class OutputStream;
class OutputStreamWriter;
class PipedInputStream;
class PipedOutputStream;
class PipedReader;
class PipedWriter;
class PrintStream;
class PrintWriter;
class PushbackInputStream;
class PushbackReader;
class RandomAccessFile;
class Reader;
class SequenceInputStream;
class Serializable;
class SerializablePermission;
class StreamCorruptedException;
1999-04-07 16:42:40 +02:00
class StreamTokenizer;
class StringBufferInputStream;
class StringReader;
class StringWriter;
class SyncFailedException;
class UTFDataFormatException;
class UnsupportedEncodingException;
class VMObjectInputStream;
class VMObjectStreamClass;
class WriteAbortedException;
1999-04-07 16:42:40 +02:00
class Writer;
}
1999-04-07 16:42:40 +02:00
namespace lang
{
class AbstractMethodError;
class Appendable;
1999-04-07 16:42:40 +02:00
class ArithmeticException;
class ArrayIndexOutOfBoundsException;
class ArrayStoreException;
class AssertionError;
1999-04-07 16:42:40 +02:00
class Boolean;
class Byte;
class CharSequence;
1999-04-07 16:42:40 +02:00
class Character;
class Character$Subset;
class Character$UnicodeBlock;
1999-04-07 16:42:40 +02:00
class Class;
class ClassCastException;
class ClassCircularityError;
class ClassFormatError;
class ClassLoader;
class ClassLoader$AnnotationsKey;
1999-04-07 16:42:40 +02:00
class ClassNotFoundException;
class CloneNotSupportedException;
class Cloneable;
class Comparable;
class Compiler;
class Deprecated;
1999-04-07 16:42:40 +02:00
class Double;
class EcosProcess;
class Enum;
class EnumConstantNotPresentException;
1999-04-07 16:42:40 +02:00
class Error;
class Exception;
class ExceptionInInitializerError;
class Float;
class IllegalAccessError;
class IllegalAccessException;
class IllegalArgumentException;
class IllegalMonitorStateException;
class IllegalStateException;
class IllegalThreadStateException;
class IncompatibleClassChangeError;
class IndexOutOfBoundsException;
class InheritableThreadLocal;
1999-04-07 16:42:40 +02:00
class InstantiationError;
class InstantiationException;
class Integer;
class InternalError;
class InterruptedException;
class Iterable;
1999-04-07 16:42:40 +02:00
class LinkageError;
class Long;
class Math;
class NegativeArraySizeException;
class NoClassDefFoundError;
class NoSuchFieldError;
class NoSuchFieldException;
class NoSuchMethodError;
class NoSuchMethodException;
class NullPointerException;
class Number;
class NumberFormatException;
class Object;
class OutOfMemoryError;
class Override;
decl.c (init_decl_processing): Add new class "protectionDomain" field. gcc/java: 2001-04-25 Bryce McKinlay <bryce@waitaki.otago.ac.nz> * decl.c (init_decl_processing): Add new class "protectionDomain" field. * class.c (make_class_data): Set initial value for "protectionDomain". libjava: 2001-04-25 Bryce McKinlay <bryce@albatross.co.nz> java.security merge and ClassLoader compliance fixes. * java/lang/Class.h (Class): Include ProtectionDomain.h. New protectionDomain field. (forName): Add initialize parameter. Fixes declaration to comply with JDK spec. * java/lang/natClass.cc (forName): Correct declaration of the three-arg variant. Honour "initialize" flag. (getProtectionDomain0): New method. * java/lang/Class.java: Fix forName() declaration. (getPackage): New method based on Classpath implementation. (getProtectionDomain0): New native method decl. (getProtectionDomain): New method. * java/lang/ClassLoader.java (getParent): Now final. (definedPackages): New field. (getPackage): New. (defineClass): New variant with protectionDomain argument. (definePackage): New. (getPackages): New. (findSystemClass): Now final. (getSystemResourceAsStream): Remove redundant "final" modifier. (getSystemResource): Remove redundant "final" modifier. (getResources): Now final. (protectionDomainPermission): New static field. (unknownProtectionDomain): Ditto. (defaultProtectionDomain): Ditto. (getSystemClassLoader): Now non-native. * java/util/ResourceBundle.java (tryGetSomeBundle): Use the correct arguments for Class.forName(). * java/lang/Package.java: New file. * gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): Removed. (instance): Static initialize singleton. (findClass): Override this, not findSystemClass. * java/lang/natClassLoader.cc (defineClass0): Set class's protectionDomain field as specified. (getSystemClassLoader): Removed. (findClass): Renamed from findSystemClass. Call the interpreter via URLClassLoader.findClass if loading class via dlopen fails. * java/security/*.java: java.security import/merge with Classpath. * java/security/acl/*.java: Likewise. * java/security/interfaces/*.java: Likewise. * java/security/spec/*.java: Likewise. * java/net/NetPermission.java: Likewise. * java/net/SocketPermission.java: Likewise. * gnu/java/security/provider/DefaultPolicy.java: Likewise. * Makefile.am: Add new classes. * Makefile.in: Rebuilt. * gcj/javaprims.h: CNI namespace rebuild. From-SVN: r41543
2001-04-25 17:45:15 +02:00
class Package;
class PosixProcess;
class PosixProcess$EOFInputStream;
class PosixProcess$ProcessManager;
1999-04-07 16:42:40 +02:00
class Process;
class ProcessBuilder;
class Readable;
1999-04-07 16:42:40 +02:00
class Runnable;
class Runtime;
class RuntimeException;
class RuntimePermission;
1999-04-07 16:42:40 +02:00
class SecurityException;
class SecurityManager;
class SecurityManager$1;
1999-04-07 16:42:40 +02:00
class Short;
class StackOverflowError;
class StackTraceElement;
class StrictMath;
1999-04-07 16:42:40 +02:00
class String;
class String$CaseInsensitiveComparator;
1999-04-07 16:42:40 +02:00
class StringBuffer;
class StringBuilder;
1999-04-07 16:42:40 +02:00
class StringIndexOutOfBoundsException;
class SuppressWarnings;
1999-04-07 16:42:40 +02:00
class System;
class System$EnvironmentCollection;
class System$EnvironmentMap;
class System$EnvironmentSet;
1999-04-07 16:42:40 +02:00
class Thread;
class Thread$State;
class Thread$UncaughtExceptionHandler;
1999-04-07 16:42:40 +02:00
class ThreadDeath;
class ThreadGroup;
class ThreadLocal;
1999-04-07 16:42:40 +02:00
class Throwable;
class Throwable$StaticData;
class TypeNotPresentException;
1999-04-07 16:42:40 +02:00
class UnknownError;
class UnsatisfiedLinkError;
class UnsupportedClassVersionError;
1999-04-07 16:42:40 +02:00
class UnsupportedOperationException;
class VMClassLoader;
class VMCompiler;
class VMDouble;
class VMFloat;
class VMThrowable;
1999-04-07 16:42:40 +02:00
class VerifyError;
class VirtualMachineError;
class Void;
class Win32Process;
namespace annotation
{
class Annotation;
class AnnotationFormatError;
class AnnotationTypeMismatchException;
class Documented;
class ElementType;
class IncompleteAnnotationException;
class Inherited;
class Retention;
class RetentionPolicy;
class Target;
}
namespace instrument
{
class ClassDefinition;
class ClassFileTransformer;
class IllegalClassFormatException;
class Instrumentation;
class UnmodifiableClassException;
}
namespace management
{
class ClassLoadingMXBean;
class CompilationMXBean;
class GarbageCollectorMXBean;
class ManagementFactory;
class ManagementPermission;
class MemoryMXBean;
class MemoryManagerMXBean;
class MemoryNotificationInfo;
class MemoryPoolMXBean;
class MemoryType;
class MemoryUsage;
class OperatingSystemMXBean;
class RuntimeMXBean;
class ThreadInfo;
class ThreadMXBean;
class VMManagementFactory;
}
namespace ref
{
class PhantomReference;
class Reference;
class ReferenceQueue;
class SoftReference;
class WeakReference;
}
1999-04-07 16:42:40 +02:00
namespace reflect
{
class AccessibleObject;
class AnnotatedElement;
1999-04-07 16:42:40 +02:00
class Array;
class Constructor;
class Field;
class GenericArrayType;
class GenericDeclaration;
class GenericSignatureFormatError;
class InvocationHandler;
1999-04-07 16:42:40 +02:00
class InvocationTargetException;
class MalformedParameterizedTypeException;
1999-04-07 16:42:40 +02:00
class Member;
class Method;
class Modifier;
class ParameterizedType;
class Proxy;
class Proxy$ClassFactory;
class Proxy$ProxyData;
class Proxy$ProxySignature;
class Proxy$ProxyType;
class ReflectPermission;
class Type;
class TypeVariable;
class UndeclaredThrowableException;
class VMProxy;
class WildcardType;
}
}
1999-04-07 16:42:40 +02:00
namespace util
{
class AbstractCollection;
class AbstractList;
class AbstractList$1;
class AbstractList$2;
class AbstractList$3;
class AbstractList$RandomAccessSubList;
class AbstractList$SubList;
class AbstractMap;
class AbstractMap$1;
class AbstractMap$2;
class AbstractMap$3;
class AbstractMap$4;
class AbstractMap$SimpleEntry;
class AbstractMap$SimpleImmutableEntry;
class AbstractQueue;
class AbstractSequentialList;
class AbstractSet;
class ArrayDeque;
class ArrayDeque$DeqIterator;
class ArrayDeque$DescendingIterator;
class ArrayList;
class Arrays;
class Arrays$ArrayList;
1999-04-07 16:42:40 +02:00
class BitSet;
class Calendar;
class Collection;
class Collections;
class Collections$1;
class Collections$1$SynchronizedMapEntry;
class Collections$2;
class Collections$3;
class Collections$4;
class Collections$5;
class Collections$6;
class Collections$7;
class Collections$8;
class Collections$9;
class Collections$CheckedCollection;
class Collections$CheckedIterator;
class Collections$CheckedList;
class Collections$CheckedListIterator;
class Collections$CheckedMap;
class Collections$CheckedMap$CheckedEntrySet;
class Collections$CheckedRandomAccessList;
class Collections$CheckedSet;
class Collections$CheckedSortedMap;
class Collections$CheckedSortedSet;
class Collections$CopiesList;
class Collections$EmptyList;
class Collections$EmptyMap;
class Collections$EmptySet;
decl.c (init_decl_processing): Add new class "protectionDomain" field. gcc/java: 2001-04-25 Bryce McKinlay <bryce@waitaki.otago.ac.nz> * decl.c (init_decl_processing): Add new class "protectionDomain" field. * class.c (make_class_data): Set initial value for "protectionDomain". libjava: 2001-04-25 Bryce McKinlay <bryce@albatross.co.nz> java.security merge and ClassLoader compliance fixes. * java/lang/Class.h (Class): Include ProtectionDomain.h. New protectionDomain field. (forName): Add initialize parameter. Fixes declaration to comply with JDK spec. * java/lang/natClass.cc (forName): Correct declaration of the three-arg variant. Honour "initialize" flag. (getProtectionDomain0): New method. * java/lang/Class.java: Fix forName() declaration. (getPackage): New method based on Classpath implementation. (getProtectionDomain0): New native method decl. (getProtectionDomain): New method. * java/lang/ClassLoader.java (getParent): Now final. (definedPackages): New field. (getPackage): New. (defineClass): New variant with protectionDomain argument. (definePackage): New. (getPackages): New. (findSystemClass): Now final. (getSystemResourceAsStream): Remove redundant "final" modifier. (getSystemResource): Remove redundant "final" modifier. (getResources): Now final. (protectionDomainPermission): New static field. (unknownProtectionDomain): Ditto. (defaultProtectionDomain): Ditto. (getSystemClassLoader): Now non-native. * java/util/ResourceBundle.java (tryGetSomeBundle): Use the correct arguments for Class.forName(). * java/lang/Package.java: New file. * gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): Removed. (instance): Static initialize singleton. (findClass): Override this, not findSystemClass. * java/lang/natClassLoader.cc (defineClass0): Set class's protectionDomain field as specified. (getSystemClassLoader): Removed. (findClass): Renamed from findSystemClass. Call the interpreter via URLClassLoader.findClass if loading class via dlopen fails. * java/security/*.java: java.security import/merge with Classpath. * java/security/acl/*.java: Likewise. * java/security/interfaces/*.java: Likewise. * java/security/spec/*.java: Likewise. * java/net/NetPermission.java: Likewise. * java/net/SocketPermission.java: Likewise. * gnu/java/security/provider/DefaultPolicy.java: Likewise. * Makefile.am: Add new classes. * Makefile.in: Rebuilt. * gcj/javaprims.h: CNI namespace rebuild. From-SVN: r41543
2001-04-25 17:45:15 +02:00
class Collections$ReverseComparator;
class Collections$SingletonList;
class Collections$SingletonMap;
class Collections$SingletonSet;
class Collections$SynchronizedCollection;
class Collections$SynchronizedIterator;
class Collections$SynchronizedList;
class Collections$SynchronizedListIterator;
class Collections$SynchronizedMap;
class Collections$SynchronizedRandomAccessList;
class Collections$SynchronizedSet;
class Collections$SynchronizedSortedMap;
class Collections$SynchronizedSortedSet;
class Collections$UnmodifiableCollection;
class Collections$UnmodifiableIterator;
class Collections$UnmodifiableList;
class Collections$UnmodifiableListIterator;
class Collections$UnmodifiableMap;
class Collections$UnmodifiableMap$UnmodifiableEntrySet;
class Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableMapEntry;
class Collections$UnmodifiableRandomAccessList;
class Collections$UnmodifiableSet;
class Collections$UnmodifiableSortedMap;
class Collections$UnmodifiableSortedSet;
class Comparator;
1999-04-07 16:42:40 +02:00
class ConcurrentModificationException;
class Currency;
1999-04-07 16:42:40 +02:00
class Date;
class Deque;
1999-04-07 16:42:40 +02:00
class Dictionary;
class DuplicateFormatFlagsException;
1999-04-07 16:42:40 +02:00
class EmptyStackException;
class EnumMap;
class EnumMap$1;
class EnumMap$2;
class EnumMap$3;
class EnumMap$4;
class EnumMap$5;
class EnumMap$6;
class EnumMap$7;
class EnumSet;
class EnumSet$1;
1999-04-07 16:42:40 +02:00
class Enumeration;
class EventListener;
class EventListenerProxy;
1999-04-07 16:42:40 +02:00
class EventObject;
class FormatFlagsConversionMismatchException;
class Formattable;
class FormattableFlags;
class Formatter;
class Formatter$BigDecimalLayoutForm;
class FormatterClosedException;
1999-04-07 16:42:40 +02:00
class GregorianCalendar;
class HashMap;
class HashMap$1;
class HashMap$2;
class HashMap$3;
class HashMap$HashEntry;
class HashMap$HashIterator;
class HashSet;
1999-04-07 16:42:40 +02:00
class Hashtable;
class Hashtable$1;
class Hashtable$2;
class Hashtable$3;
class Hashtable$EntryEnumerator;
class Hashtable$EntryIterator;
class Hashtable$HashEntry;
class Hashtable$KeyEnumerator;
class Hashtable$KeyIterator;
class Hashtable$ValueEnumerator;
class Hashtable$ValueIterator;
class IdentityHashMap;
class IdentityHashMap$1;
class IdentityHashMap$2;
class IdentityHashMap$3;
class IdentityHashMap$IdentityEntry;
class IdentityHashMap$IdentityIterator;
class IllegalFormatCodePointException;
class IllegalFormatConversionException;
class IllegalFormatException;
class IllegalFormatFlagsException;
class IllegalFormatPrecisionException;
class IllegalFormatWidthException;
class InputMismatchException;
class InvalidPropertiesFormatException;
class Iterator;
class LinkedHashMap;
class LinkedHashMap$1;
class LinkedHashMap$LinkedHashEntry;
class LinkedHashSet;
class LinkedList;
class LinkedList$Entry;
class LinkedList$LinkedListItr;
class List;
class ListIterator;
1999-04-07 16:42:40 +02:00
class ListResourceBundle;
class Locale;
class Map;
class Map$Entry;
class MissingFormatArgumentException;
class MissingFormatWidthException;
1999-04-07 16:42:40 +02:00
class MissingResourceException;
class NavigableMap;
class NavigableSet;
1999-04-07 16:42:40 +02:00
class NoSuchElementException;
class Observable;
class Observer;
class PriorityQueue;
class PriorityQueue$1;
1999-04-07 16:42:40 +02:00
class Properties;
class PropertyPermission;
class PropertyPermissionCollection;
class PropertyResourceBundle;
class Queue;
1999-04-07 16:42:40 +02:00
class Random;
class RandomAccess;
1999-04-07 16:42:40 +02:00
class ResourceBundle;
class ResourceBundle$1;
class ResourceBundle$BundleKey;
class Set;
1999-04-07 16:42:40 +02:00
class SimpleTimeZone;
class SortedMap;
class SortedSet;
1999-04-07 16:42:40 +02:00
class Stack;
class StringTokenizer;
class TimeZone;
class TimeZone$1;
class Timer;
class Timer$Scheduler;
class Timer$TaskQueue;
class TimerTask;
1999-04-07 16:42:40 +02:00
class TooManyListenersException;
decl.c (init_decl_processing): Add new class "protectionDomain" field. gcc/java: 2001-04-25 Bryce McKinlay <bryce@waitaki.otago.ac.nz> * decl.c (init_decl_processing): Add new class "protectionDomain" field. * class.c (make_class_data): Set initial value for "protectionDomain". libjava: 2001-04-25 Bryce McKinlay <bryce@albatross.co.nz> java.security merge and ClassLoader compliance fixes. * java/lang/Class.h (Class): Include ProtectionDomain.h. New protectionDomain field. (forName): Add initialize parameter. Fixes declaration to comply with JDK spec. * java/lang/natClass.cc (forName): Correct declaration of the three-arg variant. Honour "initialize" flag. (getProtectionDomain0): New method. * java/lang/Class.java: Fix forName() declaration. (getPackage): New method based on Classpath implementation. (getProtectionDomain0): New native method decl. (getProtectionDomain): New method. * java/lang/ClassLoader.java (getParent): Now final. (definedPackages): New field. (getPackage): New. (defineClass): New variant with protectionDomain argument. (definePackage): New. (getPackages): New. (findSystemClass): Now final. (getSystemResourceAsStream): Remove redundant "final" modifier. (getSystemResource): Remove redundant "final" modifier. (getResources): Now final. (protectionDomainPermission): New static field. (unknownProtectionDomain): Ditto. (defaultProtectionDomain): Ditto. (getSystemClassLoader): Now non-native. * java/util/ResourceBundle.java (tryGetSomeBundle): Use the correct arguments for Class.forName(). * java/lang/Package.java: New file. * gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): Removed. (instance): Static initialize singleton. (findClass): Override this, not findSystemClass. * java/lang/natClassLoader.cc (defineClass0): Set class's protectionDomain field as specified. (getSystemClassLoader): Removed. (findClass): Renamed from findSystemClass. Call the interpreter via URLClassLoader.findClass if loading class via dlopen fails. * java/security/*.java: java.security import/merge with Classpath. * java/security/acl/*.java: Likewise. * java/security/interfaces/*.java: Likewise. * java/security/spec/*.java: Likewise. * java/net/NetPermission.java: Likewise. * java/net/SocketPermission.java: Likewise. * gnu/java/security/provider/DefaultPolicy.java: Likewise. * Makefile.am: Add new classes. * Makefile.in: Rebuilt. * gcj/javaprims.h: CNI namespace rebuild. From-SVN: r41543
2001-04-25 17:45:15 +02:00
class TreeMap;
class TreeMap$1;
class TreeMap$2;
class TreeMap$3;
class TreeMap$4;
class TreeMap$5;
class TreeMap$6;
decl.c (init_decl_processing): Add new class "protectionDomain" field. gcc/java: 2001-04-25 Bryce McKinlay <bryce@waitaki.otago.ac.nz> * decl.c (init_decl_processing): Add new class "protectionDomain" field. * class.c (make_class_data): Set initial value for "protectionDomain". libjava: 2001-04-25 Bryce McKinlay <bryce@albatross.co.nz> java.security merge and ClassLoader compliance fixes. * java/lang/Class.h (Class): Include ProtectionDomain.h. New protectionDomain field. (forName): Add initialize parameter. Fixes declaration to comply with JDK spec. * java/lang/natClass.cc (forName): Correct declaration of the three-arg variant. Honour "initialize" flag. (getProtectionDomain0): New method. * java/lang/Class.java: Fix forName() declaration. (getPackage): New method based on Classpath implementation. (getProtectionDomain0): New native method decl. (getProtectionDomain): New method. * java/lang/ClassLoader.java (getParent): Now final. (definedPackages): New field. (getPackage): New. (defineClass): New variant with protectionDomain argument. (definePackage): New. (getPackages): New. (findSystemClass): Now final. (getSystemResourceAsStream): Remove redundant "final" modifier. (getSystemResource): Remove redundant "final" modifier. (getResources): Now final. (protectionDomainPermission): New static field. (unknownProtectionDomain): Ditto. (defaultProtectionDomain): Ditto. (getSystemClassLoader): Now non-native. * java/util/ResourceBundle.java (tryGetSomeBundle): Use the correct arguments for Class.forName(). * java/lang/Package.java: New file. * gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): Removed. (instance): Static initialize singleton. (findClass): Override this, not findSystemClass. * java/lang/natClassLoader.cc (defineClass0): Set class's protectionDomain field as specified. (getSystemClassLoader): Removed. (findClass): Renamed from findSystemClass. Call the interpreter via URLClassLoader.findClass if loading class via dlopen fails. * java/security/*.java: java.security import/merge with Classpath. * java/security/acl/*.java: Likewise. * java/security/interfaces/*.java: Likewise. * java/security/spec/*.java: Likewise. * java/net/NetPermission.java: Likewise. * java/net/SocketPermission.java: Likewise. * gnu/java/security/provider/DefaultPolicy.java: Likewise. * Makefile.am: Add new classes. * Makefile.in: Rebuilt. * gcj/javaprims.h: CNI namespace rebuild. From-SVN: r41543
2001-04-25 17:45:15 +02:00
class TreeMap$Node;
class TreeMap$SubMap;
class TreeMap$TreeIterator;
class TreeSet;
class UUID;
class UnknownFormatConversionException;
class UnknownFormatFlagsException;
class VMTimeZone;
1999-04-07 16:42:40 +02:00
class Vector;
class Vector$1;
class WeakHashMap;
class WeakHashMap$1;
class WeakHashMap$2;
class WeakHashMap$WeakBucket;
class WeakHashMap$WeakBucket$WeakEntry;
class WeakHashMap$WeakEntrySet;
namespace concurrent
{
class AbstractExecutorService;
class ArrayBlockingQueue;
class ArrayBlockingQueue$Itr;
class BlockingDeque;
class BlockingQueue;
class BrokenBarrierException;
class Callable;
class CancellationException;
class CompletionService;
class ConcurrentHashMap;
class ConcurrentHashMap$EntryIterator;
class ConcurrentHashMap$EntrySet;
class ConcurrentHashMap$HashEntry;
class ConcurrentHashMap$HashIterator;
class ConcurrentHashMap$KeyIterator;
class ConcurrentHashMap$KeySet;
class ConcurrentHashMap$Segment;
class ConcurrentHashMap$ValueIterator;
class ConcurrentHashMap$Values;
class ConcurrentHashMap$WriteThroughEntry;
class ConcurrentLinkedQueue;
class ConcurrentLinkedQueue$Itr;
class ConcurrentLinkedQueue$Node;
class ConcurrentMap;
class ConcurrentNavigableMap;
class ConcurrentSkipListMap;
class ConcurrentSkipListMap$ComparableUsingComparator;
class ConcurrentSkipListMap$EntryIterator;
class ConcurrentSkipListMap$EntrySet;
class ConcurrentSkipListMap$HeadIndex;
class ConcurrentSkipListMap$Index;
class ConcurrentSkipListMap$Iter;
class ConcurrentSkipListMap$KeyIterator;
class ConcurrentSkipListMap$KeySet;
class ConcurrentSkipListMap$Node;
class ConcurrentSkipListMap$SubMap;
class ConcurrentSkipListMap$SubMap$SubMapEntryIterator;
class ConcurrentSkipListMap$SubMap$SubMapIter;
class ConcurrentSkipListMap$SubMap$SubMapKeyIterator;
class ConcurrentSkipListMap$SubMap$SubMapValueIterator;
class ConcurrentSkipListMap$ValueIterator;
class ConcurrentSkipListMap$Values;
class ConcurrentSkipListSet;
class CopyOnWriteArrayList;
class CopyOnWriteArraySet;
class CountDownLatch;
class CountDownLatch$Sync;
class CyclicBarrier;
class CyclicBarrier$Generation;
class DelayQueue;
class DelayQueue$Itr;
class Delayed;
class Exchanger;
class Exchanger$Node;
class Exchanger$Slot;
class ExecutionException;
class Executor;
class ExecutorCompletionService;
class ExecutorCompletionService$QueueingFuture;
class ExecutorService;
class Executors;
class Executors$1;
class Executors$2;
class Executors$3;
class Executors$4;
class Executors$5;
class Executors$6;
class Executors$DefaultThreadFactory;
class Executors$DelegatedExecutorService;
class Executors$DelegatedScheduledExecutorService;
class Executors$FinalizableDelegatedExecutorService;
class Executors$PrivilegedCallable;
class Executors$PrivilegedCallableUsingCurrentClassLoader;
class Executors$PrivilegedThreadFactory;
class Executors$RunnableAdapter;
class Future;
class FutureTask;
class FutureTask$Sync;
class LinkedBlockingDeque;
class LinkedBlockingDeque$AbstractItr;
class LinkedBlockingDeque$DescendingItr;
class LinkedBlockingDeque$Itr;
class LinkedBlockingDeque$Node;
class LinkedBlockingQueue;
class LinkedBlockingQueue$Itr;
class LinkedBlockingQueue$Node;
class PriorityBlockingQueue;
class PriorityBlockingQueue$Itr;
class RejectedExecutionException;
class RejectedExecutionHandler;
class RunnableFuture;
class RunnableScheduledFuture;
class ScheduledExecutorService;
class ScheduledFuture;
class ScheduledThreadPoolExecutor;
class ScheduledThreadPoolExecutor$1;
class ScheduledThreadPoolExecutor$DelayedWorkQueue;
class ScheduledThreadPoolExecutor$ScheduledFutureTask;
class Semaphore;
class Semaphore$FairSync;
class Semaphore$NonfairSync;
class Semaphore$Sync;
class SynchronousQueue;
class SynchronousQueue$EmptyIterator;
class SynchronousQueue$FifoWaitQueue;
class SynchronousQueue$LifoWaitQueue;
class SynchronousQueue$TransferQueue;
class SynchronousQueue$TransferQueue$QNode;
class SynchronousQueue$TransferStack;
class SynchronousQueue$TransferStack$SNode;
class SynchronousQueue$Transferer;
class SynchronousQueue$WaitQueue;
class ThreadFactory;
class ThreadPoolExecutor;
class ThreadPoolExecutor$AbortPolicy;
class ThreadPoolExecutor$CallerRunsPolicy;
class ThreadPoolExecutor$DiscardOldestPolicy;
class ThreadPoolExecutor$DiscardPolicy;
class ThreadPoolExecutor$Worker;
class TimeUnit;
class TimeUnit$1;
class TimeUnit$2;
class TimeUnit$3;
class TimeUnit$4;
class TimeUnit$5;
class TimeUnit$6;
class TimeUnit$7;
class TimeoutException;
namespace atomic
{
class AtomicBoolean;
class AtomicInteger;
class AtomicIntegerArray;
class AtomicIntegerFieldUpdater;
class AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;
class AtomicLong;
class AtomicLongArray;
class AtomicLongFieldUpdater;
class AtomicLongFieldUpdater$CASUpdater;
class AtomicLongFieldUpdater$LockedUpdater;
class AtomicMarkableReference;
class AtomicMarkableReference$ReferenceBooleanPair;
class AtomicReference;
class AtomicReferenceArray;
class AtomicReferenceFieldUpdater;
class AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;
class AtomicStampedReference;
class AtomicStampedReference$ReferenceIntegerPair;
}
namespace locks
{
class AbstractOwnableSynchronizer;
class AbstractQueuedLongSynchronizer;
class AbstractQueuedLongSynchronizer$ConditionObject;
class AbstractQueuedLongSynchronizer$Node;
class AbstractQueuedSynchronizer;
class AbstractQueuedSynchronizer$ConditionObject;
class AbstractQueuedSynchronizer$Node;
class Condition;
class Lock;
class LockSupport;
class ReadWriteLock;
class ReentrantLock;
class ReentrantLock$FairSync;
class ReentrantLock$NonfairSync;
class ReentrantLock$Sync;
class ReentrantReadWriteLock;
class ReentrantReadWriteLock$FairSync;
class ReentrantReadWriteLock$NonfairSync;
class ReentrantReadWriteLock$ReadLock;
class ReentrantReadWriteLock$Sync;
class ReentrantReadWriteLock$Sync$HoldCounter;
class ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;
class ReentrantReadWriteLock$WriteLock;
}
}
namespace jar
{
class Attributes;
class Attributes$Name;
class JarEntry;
class JarException;
class JarFile;
class JarFile$EntryInputStream;
class JarFile$JarEnumeration;
class JarInputStream;
class JarOutputStream;
class Manifest;
}
namespace logging
{
class ConsoleHandler;
class ErrorManager;
class FileHandler;
class FileHandler$ostr;
class Filter;
class Formatter;
class Handler;
class Level;
class LogManager;
class LogManager$1;
class LogRecord;
class Logger;
class Logger$1;
class LoggingMXBean;
class LoggingPermission;
class MemoryHandler;
class SimpleFormatter;
class SocketHandler;
class StreamHandler;
class XMLFormatter;
}
namespace prefs
{
class AbstractPreferences;
class AbstractPreferences$1;
class AbstractPreferences$2;
class BackingStoreException;
class InvalidPreferencesFormatException;
class NodeChangeEvent;
class NodeChangeListener;
class PreferenceChangeEvent;
class PreferenceChangeListener;
class Preferences;
class Preferences$1;
class PreferencesFactory;
}
namespace regex
{
class MatchResult;
class Matcher;
class Pattern;
class PatternSyntaxException;
}
1999-04-07 16:42:40 +02:00
namespace zip
{
class Adler32;
class CRC32;
ZipOutputStream.java (level): Initial value is Deflater.DEFAULT_COMPRESSION. * java/util/zip/ZipOutputStream.java (level): Initial value is Deflater.DEFAULT_COMPRESSION. (close): New method. (closeEntry): Likewise. (finish): Likewise. (put_version): Likewise. (write_entry): Likewise. (put2, put4): Now return `int'. (comment): Default to empty string. (bytes_written): New instance variable. (chain): Likewise. * java/util/zip/ZipEntry.java (setComment): Limit length of comment string. (setCrc): Check CRC validity. (setExtra): Check argument validity. (setMethod): Likewise. (setSize): Likewise. (ZipEntry): Likewise. * include/javaprims.h: Updated namespace declarations. * Makefile.in: Rebuilt. * Makefile.am (ordinary_java_source_files): Mention new files. (nat_source_files): Likewise. * java/util/zip/ZipFile.java (readu2): Throw ZipException, not EOFException. (read4): Likewise. (getInputStream): Handle compressed entries. * java/util/zip/GZIPOutputStream.java: New file. * java/util/zip/GZIPInputStream.java: New file. * java/util/zip/DataFormatException.java: New file. * java/util/zip/CheckedInputStream.java: New file. * java/util/zip/CheckedOutputStream.java: New file. * java/util/zip/InflaterInputStream.java: Implemented. * java/util/zip/natInflater.cc: New file. * java/util/zip/Deflater.java: Implemented. * java/util/zip/natDeflater.cc: New file. * java/util/zip/DeflaterOutputStream.java: Implemented. * java/util/zip/ZipInputStream.java (closeZipEntry): Throw ZipException, not IOException. * java/util/zip/ZipFile.java (readDirectory): Throw ZipException, not IOException. From-SVN: r26996
1999-05-18 17:33:03 +02:00
class CheckedInputStream;
class CheckedOutputStream;
1999-04-07 16:42:40 +02:00
class Checksum;
ZipOutputStream.java (level): Initial value is Deflater.DEFAULT_COMPRESSION. * java/util/zip/ZipOutputStream.java (level): Initial value is Deflater.DEFAULT_COMPRESSION. (close): New method. (closeEntry): Likewise. (finish): Likewise. (put_version): Likewise. (write_entry): Likewise. (put2, put4): Now return `int'. (comment): Default to empty string. (bytes_written): New instance variable. (chain): Likewise. * java/util/zip/ZipEntry.java (setComment): Limit length of comment string. (setCrc): Check CRC validity. (setExtra): Check argument validity. (setMethod): Likewise. (setSize): Likewise. (ZipEntry): Likewise. * include/javaprims.h: Updated namespace declarations. * Makefile.in: Rebuilt. * Makefile.am (ordinary_java_source_files): Mention new files. (nat_source_files): Likewise. * java/util/zip/ZipFile.java (readu2): Throw ZipException, not EOFException. (read4): Likewise. (getInputStream): Handle compressed entries. * java/util/zip/GZIPOutputStream.java: New file. * java/util/zip/GZIPInputStream.java: New file. * java/util/zip/DataFormatException.java: New file. * java/util/zip/CheckedInputStream.java: New file. * java/util/zip/CheckedOutputStream.java: New file. * java/util/zip/InflaterInputStream.java: Implemented. * java/util/zip/natInflater.cc: New file. * java/util/zip/Deflater.java: Implemented. * java/util/zip/natDeflater.cc: New file. * java/util/zip/DeflaterOutputStream.java: Implemented. * java/util/zip/ZipInputStream.java (closeZipEntry): Throw ZipException, not IOException. * java/util/zip/ZipFile.java (readDirectory): Throw ZipException, not IOException. From-SVN: r26996
1999-05-18 17:33:03 +02:00
class DataFormatException;
1999-04-07 16:42:40 +02:00
class Deflater;
class DeflaterOutputStream;
ZipOutputStream.java (level): Initial value is Deflater.DEFAULT_COMPRESSION. * java/util/zip/ZipOutputStream.java (level): Initial value is Deflater.DEFAULT_COMPRESSION. (close): New method. (closeEntry): Likewise. (finish): Likewise. (put_version): Likewise. (write_entry): Likewise. (put2, put4): Now return `int'. (comment): Default to empty string. (bytes_written): New instance variable. (chain): Likewise. * java/util/zip/ZipEntry.java (setComment): Limit length of comment string. (setCrc): Check CRC validity. (setExtra): Check argument validity. (setMethod): Likewise. (setSize): Likewise. (ZipEntry): Likewise. * include/javaprims.h: Updated namespace declarations. * Makefile.in: Rebuilt. * Makefile.am (ordinary_java_source_files): Mention new files. (nat_source_files): Likewise. * java/util/zip/ZipFile.java (readu2): Throw ZipException, not EOFException. (read4): Likewise. (getInputStream): Handle compressed entries. * java/util/zip/GZIPOutputStream.java: New file. * java/util/zip/GZIPInputStream.java: New file. * java/util/zip/DataFormatException.java: New file. * java/util/zip/CheckedInputStream.java: New file. * java/util/zip/CheckedOutputStream.java: New file. * java/util/zip/InflaterInputStream.java: Implemented. * java/util/zip/natInflater.cc: New file. * java/util/zip/Deflater.java: Implemented. * java/util/zip/natDeflater.cc: New file. * java/util/zip/DeflaterOutputStream.java: Implemented. * java/util/zip/ZipInputStream.java (closeZipEntry): Throw ZipException, not IOException. * java/util/zip/ZipFile.java (readDirectory): Throw ZipException, not IOException. From-SVN: r26996
1999-05-18 17:33:03 +02:00
class GZIPInputStream;
class GZIPOutputStream;
class Inflater;
class InflaterInputStream;
1999-04-07 16:42:40 +02:00
class ZipConstants;
class ZipEntry;
class ZipException;
class ZipFile;
class ZipFile$1;
class ZipFile$PartialInputStream;
class ZipFile$ZipEntryEnumeration;
class ZipInputStream;
1999-04-07 16:42:40 +02:00
class ZipOutputStream;
}
}
}
}
1999-04-07 16:42:40 +02:00
typedef struct java::lang::Object* jobject;
typedef class java::lang::Class* jclass;
typedef class java::lang::Throwable* jthrowable;
typedef class java::lang::String* jstring;
struct _Jv_JNIEnv;
typedef struct _Jv_Field *jfieldID;
typedef struct _Jv_Method *jmethodID;
extern "C" jobject _Jv_AllocObject (jclass) __attribute__((__malloc__));
extern "C" jobject _Jv_AllocObjectNoFinalizer (jclass) __attribute__((__malloc__));
extern "C" jobject _Jv_AllocObjectNoInitNoFinalizer (jclass) __attribute__((__malloc__));
[multiple changes] 2001-05-23 Tom Tromey <tromey@redhat.com> * posix-threads.cc (_Jv_self_cache): Renamed from self_cache. * gcj/Makefile.in: Rebuilt. * gcj/Makefile.am (gcj_HEADERS): Added libgcj-config.h. * gcj/javaprims.h: Include gcj/libgcj-config.h. * gcj/libgcj-config.h.in: New file. * libgcj.spec.in (*jc1): Added @HASH_SYNC_SPEC@. * configure: Rebuilt. * configure.in: Enable hash synchronization by default on some platforms. (HASH_SYNC_SPEC): New subst. (AC_CONFIG_HEADER): Added gcj/libgcj-config.h. Correctly use `test -z' instead of `test -n' in a couple places. (JV_HASH_SYNCHRONIZATION): Use AC_DEFINE; don't add to LIBGCJ_CXXFLAGS. * configure.host (enable_java_net_default): Initialize. (enable_hash_synchronization_default): New variable. 2001-05-23 Hans Boehm <Hans_Boehm@hp.com> * boehm.cc (_Jv_MarkObj): Don't mark sync_info when hash synchronization in use. (_Jv_MarkArray): Likewise. (_Jv_AllocBytes): Don't check return result. (handle_out_of_memory): New function. (_Jv_InitGC): Set GC_oom_fn. (trace_one_vtable): New global. (_Jv_AllocTraceOne): New function. * configure.in: Added --enable-hash-synchronization. * defineclass.cc, prims.cc, resolve.cc, java/lang/natString.cc, java/net/natInetAddress.cc: Remove _Jv_AllocBytesChecked. * nogc.cc (_Jv_AllocObj): Throw out-of-memory. (_Jv_AllocArray): Likewise. (_Jv_AllocBytes): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_AllocTraceOne): Likewise. * posix-threads.cc (_Jv_ThreadRegister): Handle slow pthread_self(). (self_cache): New global. (_Jv_ThreadSelf_out_of_line): New function. * prims.cc (_Jv_AllocBytesChecked): Removed. (_Jv_ThrowNoMemory): New function. (_Jv_AllocObject): Don't check for null return from allocator. (_Jv_NewObjectArray): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_NewPrimArray): Allocate pointer-free object if possible. * include/javaprims.h (_Jv_AllocPtrFreeObject): Declare. (_Jv_MonitorEnter, _Jv_MonitorExit): Don't return value. * include/boehm-gc.h (_Jv_AllocObj): Define. (_Jv_AllocPtrFreeObj): Define. * include/jvm.h (_Jv_AllocPtrFreeObj): Declare. (_Jv_ThrowNoMemory): Declare. (_Jv_AllocTraceOne): Declare. (_Jv_AllocBytesChecked): Removed. * include/posix-threads.h (_Jv_MutexInit, _Jv_MutexLock, _Jv_MutexUnlock): Handle LOCK_DEBUG. (_Jv_ThreadSelf): Handle case where system pthread_self() is slow. * java/lang/Class.h (Class): Declare _Jv_AllocPtrFreeObj as friend. * java/lang/Object.h (sync_info): Conditional upon presence of hash synchronization. * java/lang/natObject.cc: Much new code to handle thin locks and hash synchronization. * java/lang/natString.cc (_Jv_AllocString): Allocate pointer-free object if possible. From-SVN: r42519
2001-05-24 07:40:37 +02:00
#ifdef JV_HASH_SYNCHRONIZATION
extern "C" jobject _Jv_AllocPtrFreeObject (jclass)
[multiple changes] 2001-05-23 Tom Tromey <tromey@redhat.com> * posix-threads.cc (_Jv_self_cache): Renamed from self_cache. * gcj/Makefile.in: Rebuilt. * gcj/Makefile.am (gcj_HEADERS): Added libgcj-config.h. * gcj/javaprims.h: Include gcj/libgcj-config.h. * gcj/libgcj-config.h.in: New file. * libgcj.spec.in (*jc1): Added @HASH_SYNC_SPEC@. * configure: Rebuilt. * configure.in: Enable hash synchronization by default on some platforms. (HASH_SYNC_SPEC): New subst. (AC_CONFIG_HEADER): Added gcj/libgcj-config.h. Correctly use `test -z' instead of `test -n' in a couple places. (JV_HASH_SYNCHRONIZATION): Use AC_DEFINE; don't add to LIBGCJ_CXXFLAGS. * configure.host (enable_java_net_default): Initialize. (enable_hash_synchronization_default): New variable. 2001-05-23 Hans Boehm <Hans_Boehm@hp.com> * boehm.cc (_Jv_MarkObj): Don't mark sync_info when hash synchronization in use. (_Jv_MarkArray): Likewise. (_Jv_AllocBytes): Don't check return result. (handle_out_of_memory): New function. (_Jv_InitGC): Set GC_oom_fn. (trace_one_vtable): New global. (_Jv_AllocTraceOne): New function. * configure.in: Added --enable-hash-synchronization. * defineclass.cc, prims.cc, resolve.cc, java/lang/natString.cc, java/net/natInetAddress.cc: Remove _Jv_AllocBytesChecked. * nogc.cc (_Jv_AllocObj): Throw out-of-memory. (_Jv_AllocArray): Likewise. (_Jv_AllocBytes): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_AllocTraceOne): Likewise. * posix-threads.cc (_Jv_ThreadRegister): Handle slow pthread_self(). (self_cache): New global. (_Jv_ThreadSelf_out_of_line): New function. * prims.cc (_Jv_AllocBytesChecked): Removed. (_Jv_ThrowNoMemory): New function. (_Jv_AllocObject): Don't check for null return from allocator. (_Jv_NewObjectArray): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_NewPrimArray): Allocate pointer-free object if possible. * include/javaprims.h (_Jv_AllocPtrFreeObject): Declare. (_Jv_MonitorEnter, _Jv_MonitorExit): Don't return value. * include/boehm-gc.h (_Jv_AllocObj): Define. (_Jv_AllocPtrFreeObj): Define. * include/jvm.h (_Jv_AllocPtrFreeObj): Declare. (_Jv_ThrowNoMemory): Declare. (_Jv_AllocTraceOne): Declare. (_Jv_AllocBytesChecked): Removed. * include/posix-threads.h (_Jv_MutexInit, _Jv_MutexLock, _Jv_MutexUnlock): Handle LOCK_DEBUG. (_Jv_ThreadSelf): Handle case where system pthread_self() is slow. * java/lang/Class.h (Class): Declare _Jv_AllocPtrFreeObj as friend. * java/lang/Object.h (sync_info): Conditional upon presence of hash synchronization. * java/lang/natObject.cc: Much new code to handle thin locks and hash synchronization. * java/lang/natString.cc (_Jv_AllocString): Allocate pointer-free object if possible. From-SVN: r42519
2001-05-24 07:40:37 +02:00
__attribute__((__malloc__));
#else
// Collector still needs to scan sync_info
static inline jobject _Jv_AllocPtrFreeObject (jclass klass)
[multiple changes] 2001-05-23 Tom Tromey <tromey@redhat.com> * posix-threads.cc (_Jv_self_cache): Renamed from self_cache. * gcj/Makefile.in: Rebuilt. * gcj/Makefile.am (gcj_HEADERS): Added libgcj-config.h. * gcj/javaprims.h: Include gcj/libgcj-config.h. * gcj/libgcj-config.h.in: New file. * libgcj.spec.in (*jc1): Added @HASH_SYNC_SPEC@. * configure: Rebuilt. * configure.in: Enable hash synchronization by default on some platforms. (HASH_SYNC_SPEC): New subst. (AC_CONFIG_HEADER): Added gcj/libgcj-config.h. Correctly use `test -z' instead of `test -n' in a couple places. (JV_HASH_SYNCHRONIZATION): Use AC_DEFINE; don't add to LIBGCJ_CXXFLAGS. * configure.host (enable_java_net_default): Initialize. (enable_hash_synchronization_default): New variable. 2001-05-23 Hans Boehm <Hans_Boehm@hp.com> * boehm.cc (_Jv_MarkObj): Don't mark sync_info when hash synchronization in use. (_Jv_MarkArray): Likewise. (_Jv_AllocBytes): Don't check return result. (handle_out_of_memory): New function. (_Jv_InitGC): Set GC_oom_fn. (trace_one_vtable): New global. (_Jv_AllocTraceOne): New function. * configure.in: Added --enable-hash-synchronization. * defineclass.cc, prims.cc, resolve.cc, java/lang/natString.cc, java/net/natInetAddress.cc: Remove _Jv_AllocBytesChecked. * nogc.cc (_Jv_AllocObj): Throw out-of-memory. (_Jv_AllocArray): Likewise. (_Jv_AllocBytes): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_AllocTraceOne): Likewise. * posix-threads.cc (_Jv_ThreadRegister): Handle slow pthread_self(). (self_cache): New global. (_Jv_ThreadSelf_out_of_line): New function. * prims.cc (_Jv_AllocBytesChecked): Removed. (_Jv_ThrowNoMemory): New function. (_Jv_AllocObject): Don't check for null return from allocator. (_Jv_NewObjectArray): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_NewPrimArray): Allocate pointer-free object if possible. * include/javaprims.h (_Jv_AllocPtrFreeObject): Declare. (_Jv_MonitorEnter, _Jv_MonitorExit): Don't return value. * include/boehm-gc.h (_Jv_AllocObj): Define. (_Jv_AllocPtrFreeObj): Define. * include/jvm.h (_Jv_AllocPtrFreeObj): Declare. (_Jv_ThrowNoMemory): Declare. (_Jv_AllocTraceOne): Declare. (_Jv_AllocBytesChecked): Removed. * include/posix-threads.h (_Jv_MutexInit, _Jv_MutexLock, _Jv_MutexUnlock): Handle LOCK_DEBUG. (_Jv_ThreadSelf): Handle case where system pthread_self() is slow. * java/lang/Class.h (Class): Declare _Jv_AllocPtrFreeObj as friend. * java/lang/Object.h (sync_info): Conditional upon presence of hash synchronization. * java/lang/natObject.cc: Much new code to handle thin locks and hash synchronization. * java/lang/natString.cc (_Jv_AllocString): Allocate pointer-free object if possible. From-SVN: r42519
2001-05-24 07:40:37 +02:00
{
return _Jv_AllocObject(klass);
[multiple changes] 2001-05-23 Tom Tromey <tromey@redhat.com> * posix-threads.cc (_Jv_self_cache): Renamed from self_cache. * gcj/Makefile.in: Rebuilt. * gcj/Makefile.am (gcj_HEADERS): Added libgcj-config.h. * gcj/javaprims.h: Include gcj/libgcj-config.h. * gcj/libgcj-config.h.in: New file. * libgcj.spec.in (*jc1): Added @HASH_SYNC_SPEC@. * configure: Rebuilt. * configure.in: Enable hash synchronization by default on some platforms. (HASH_SYNC_SPEC): New subst. (AC_CONFIG_HEADER): Added gcj/libgcj-config.h. Correctly use `test -z' instead of `test -n' in a couple places. (JV_HASH_SYNCHRONIZATION): Use AC_DEFINE; don't add to LIBGCJ_CXXFLAGS. * configure.host (enable_java_net_default): Initialize. (enable_hash_synchronization_default): New variable. 2001-05-23 Hans Boehm <Hans_Boehm@hp.com> * boehm.cc (_Jv_MarkObj): Don't mark sync_info when hash synchronization in use. (_Jv_MarkArray): Likewise. (_Jv_AllocBytes): Don't check return result. (handle_out_of_memory): New function. (_Jv_InitGC): Set GC_oom_fn. (trace_one_vtable): New global. (_Jv_AllocTraceOne): New function. * configure.in: Added --enable-hash-synchronization. * defineclass.cc, prims.cc, resolve.cc, java/lang/natString.cc, java/net/natInetAddress.cc: Remove _Jv_AllocBytesChecked. * nogc.cc (_Jv_AllocObj): Throw out-of-memory. (_Jv_AllocArray): Likewise. (_Jv_AllocBytes): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_AllocTraceOne): Likewise. * posix-threads.cc (_Jv_ThreadRegister): Handle slow pthread_self(). (self_cache): New global. (_Jv_ThreadSelf_out_of_line): New function. * prims.cc (_Jv_AllocBytesChecked): Removed. (_Jv_ThrowNoMemory): New function. (_Jv_AllocObject): Don't check for null return from allocator. (_Jv_NewObjectArray): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_NewPrimArray): Allocate pointer-free object if possible. * include/javaprims.h (_Jv_AllocPtrFreeObject): Declare. (_Jv_MonitorEnter, _Jv_MonitorExit): Don't return value. * include/boehm-gc.h (_Jv_AllocObj): Define. (_Jv_AllocPtrFreeObj): Define. * include/jvm.h (_Jv_AllocPtrFreeObj): Declare. (_Jv_ThrowNoMemory): Declare. (_Jv_AllocTraceOne): Declare. (_Jv_AllocBytesChecked): Removed. * include/posix-threads.h (_Jv_MutexInit, _Jv_MutexLock, _Jv_MutexUnlock): Handle LOCK_DEBUG. (_Jv_ThreadSelf): Handle case where system pthread_self() is slow. * java/lang/Class.h (Class): Declare _Jv_AllocPtrFreeObj as friend. * java/lang/Object.h (sync_info): Conditional upon presence of hash synchronization. * java/lang/natObject.cc: Much new code to handle thin locks and hash synchronization. * java/lang/natString.cc (_Jv_AllocString): Allocate pointer-free object if possible. From-SVN: r42519
2001-05-24 07:40:37 +02:00
}
#endif
1999-04-07 16:42:40 +02:00
extern "C" jboolean _Jv_IsInstanceOf(jobject, jclass);
extern "C" jstring _Jv_AllocString(jsize) __attribute__((__malloc__));
extern "C" jstring _Jv_NewString (const jchar*, jsize)
__attribute__((__malloc__));
extern jint _Jv_FormatInt (jchar* bufend, jint num);
1999-04-07 16:42:40 +02:00
extern "C" jchar* _Jv_GetStringChars (jstring str);
[multiple changes] 2001-05-23 Tom Tromey <tromey@redhat.com> * posix-threads.cc (_Jv_self_cache): Renamed from self_cache. * gcj/Makefile.in: Rebuilt. * gcj/Makefile.am (gcj_HEADERS): Added libgcj-config.h. * gcj/javaprims.h: Include gcj/libgcj-config.h. * gcj/libgcj-config.h.in: New file. * libgcj.spec.in (*jc1): Added @HASH_SYNC_SPEC@. * configure: Rebuilt. * configure.in: Enable hash synchronization by default on some platforms. (HASH_SYNC_SPEC): New subst. (AC_CONFIG_HEADER): Added gcj/libgcj-config.h. Correctly use `test -z' instead of `test -n' in a couple places. (JV_HASH_SYNCHRONIZATION): Use AC_DEFINE; don't add to LIBGCJ_CXXFLAGS. * configure.host (enable_java_net_default): Initialize. (enable_hash_synchronization_default): New variable. 2001-05-23 Hans Boehm <Hans_Boehm@hp.com> * boehm.cc (_Jv_MarkObj): Don't mark sync_info when hash synchronization in use. (_Jv_MarkArray): Likewise. (_Jv_AllocBytes): Don't check return result. (handle_out_of_memory): New function. (_Jv_InitGC): Set GC_oom_fn. (trace_one_vtable): New global. (_Jv_AllocTraceOne): New function. * configure.in: Added --enable-hash-synchronization. * defineclass.cc, prims.cc, resolve.cc, java/lang/natString.cc, java/net/natInetAddress.cc: Remove _Jv_AllocBytesChecked. * nogc.cc (_Jv_AllocObj): Throw out-of-memory. (_Jv_AllocArray): Likewise. (_Jv_AllocBytes): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_AllocTraceOne): Likewise. * posix-threads.cc (_Jv_ThreadRegister): Handle slow pthread_self(). (self_cache): New global. (_Jv_ThreadSelf_out_of_line): New function. * prims.cc (_Jv_AllocBytesChecked): Removed. (_Jv_ThrowNoMemory): New function. (_Jv_AllocObject): Don't check for null return from allocator. (_Jv_NewObjectArray): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_NewPrimArray): Allocate pointer-free object if possible. * include/javaprims.h (_Jv_AllocPtrFreeObject): Declare. (_Jv_MonitorEnter, _Jv_MonitorExit): Don't return value. * include/boehm-gc.h (_Jv_AllocObj): Define. (_Jv_AllocPtrFreeObj): Define. * include/jvm.h (_Jv_AllocPtrFreeObj): Declare. (_Jv_ThrowNoMemory): Declare. (_Jv_AllocTraceOne): Declare. (_Jv_AllocBytesChecked): Removed. * include/posix-threads.h (_Jv_MutexInit, _Jv_MutexLock, _Jv_MutexUnlock): Handle LOCK_DEBUG. (_Jv_ThreadSelf): Handle case where system pthread_self() is slow. * java/lang/Class.h (Class): Declare _Jv_AllocPtrFreeObj as friend. * java/lang/Object.h (sync_info): Conditional upon presence of hash synchronization. * java/lang/natObject.cc: Much new code to handle thin locks and hash synchronization. * java/lang/natString.cc (_Jv_AllocString): Allocate pointer-free object if possible. From-SVN: r42519
2001-05-24 07:40:37 +02:00
extern "C" void _Jv_MonitorEnter (jobject);
extern "C" void _Jv_MonitorExit (jobject);
extern "C" jstring _Jv_NewStringUTF (const char *bytes)
__attribute__((__malloc__));
extern "C" jstring _Jv_NewStringLatin1(const char*, jsize)
__attribute__((__malloc__));
1999-04-07 16:42:40 +02:00
extern "C" jsize _Jv_GetStringUTFLength (jstring);
extern "C" jsize _Jv_GetStringUTFRegion (jstring, jsize, jsize, char *);
extern "C" jint _Jv_hashUtf8String (const char*, int);
extern bool _Jv_is_proxy (void *pc);
1999-04-07 16:42:40 +02:00
struct _Jv_VMOption
{
// a VM initialization option
char* optionString;
// extra information associated with this option
void* extraInfo;
};
struct _Jv_VMInitArgs
{
// for compatibility with JavaVMInitArgs
jint version;
// number of VM initialization options
jint nOptions;
// an array of VM initialization options
struct _Jv_VMOption* options;
// true if the option parser should ignore unrecognized options
jboolean ignoreUnrecognized;
};
extern jint _Jv_CreateJavaVM (struct _Jv_VMInitArgs*);
void
_Jv_ThreadRun (java::lang::Thread* thread);
jint
_Jv_AttachCurrentThread(java::lang::Thread* thread);
extern "C" java::lang::Thread*
_Jv_AttachCurrentThread(jstring name, java::lang::ThreadGroup* group);
extern "C" java::lang::Thread*
_Jv_AttachCurrentThreadAsDaemon(jstring name, java::lang::ThreadGroup* group);
extern "C" jint _Jv_DetachCurrentThread (void);
extern "C" void _Jv_Throw (jthrowable) __attribute__ ((__noreturn__));
extern "C" void* _Jv_Malloc (jsize) __attribute__((__malloc__));
resolve.cc (_Jv_SearchMethodInClass): New function. 2000-03-07 Bryce McKinlay <bryce@albatross.co.nz> * resolve.cc (_Jv_SearchMethodInClass): New function. (_Jv_ResolvePoolEntry): Search superinterfaces for interface methods. * java/lang/Class.h (_Jv_SearchMethodInClass): New prototype. 2000-03-07 Bryce McKinlay <bryce@albatross.co.nz> * java/lang/Class.h (union _Jv_IDispatchTable): New declaration. (struct _Jv_ifaces): New declaration. JV_CLASS: New macro definition. (getComponentType): Relocate below isArray() for inlining. (getModifiers): Declare `inline'. (getSuperclass): Ditto. (isArray): Ditto. (isPrimitive): Ditto. (_Jv_IsAssignableFrom): New prototype. (_Jv_LookupInterfaceMethodIdx): New prototype. Predeclare with "C" linkage. (_Jv_InitClass): Move from natClass.cc. Declare `inline'. Check for JV_STATE_DONE before invoking initializeClass(). (_Jv_PrepareConstantTimeTables): New prototype. (_Jv_GetInterfaces): Ditto. (_Jv_GenerateITable): Ditto. (_Jv_GetMethodString): Ditto. (_Jv_AppendPartialITable): Ditto. (_Jv_FindIIndex): Ditto. depth, ancestors, idt: New class fields. * java/lang/natClass.cc (isAssignableFrom): Move functionality to inline function `_Jv_IsAssignableFrom'. Use that function. (isInstance): Declare `inline'. (initializeClass): Get lock on class before checking `state'. Unlock before calling resolveClass0. Call _Jv_PrepareConstantTimeTables with the lock held. (_Jv_LookupInterfaceMethod): Use _Jv_GetMessageString. (_Jv_IsAssignableFrom): New inline function. Test assignability using class->depth and ancestor table. (_Jv_IsInstanceOf): Use _Jv_IsAssignableFrom. (_Jv_CheckCast): Move from prims.cc. Use JV_CLASS and _Jv_IsAssignableFrom. (_Jv_CheckArrayStore): Ditto. (_Jv_LookupInterfaceMethodIdx): New function. INITIAL_IOFFSETS_LEN, INITIAL_IFACES_LEN: New #defines. (_Jv_PrepareConstantTimeTables): New function. (_Jv_IndexOf): Ditto. (_Jv_GetInterfaces): Ditto. (_Jv_GenerateITable): Ditto. (_Jv_GetMethodString): Ditto. (_Jv_AppendPartialITable): Ditto. iindex_mutex, iindex_mutex_initialized: New static fields. (_Jv_FindIIndex): New function. * java/lang/natClassLoader.cc (_Jv_NewClass): Set new jclass fields. * prims.cc (_Jv_CheckCast): Moved to natClass.cc. (_Jv_CheckArrayStore): Ditto. (JvNewCharArray, JvNewBooleanArray, JvNewByteArray, JvNewShortArray, JvNewIntArray, JvNewLongArray, JvNewFloatArray, JvNewDoubleArray): Moved to gcj/array.h. (_Jv_Realloc): New function. * gcj/cni.h: Move _Jv_PrimClass definitions to gcj/array.h. * gcj/array.h: _Jv_PrimClass definitions moved from gcj/cni.h. (JvNewCharArray, JvNewBooleanArray, JvNewByteArray, JvNewShortArray, JvNewIntArray, JvNewLongArray, JvNewFloatArray, JvNewDoubleArray): Implementations moved from prims.cc and declared `inline'. * gcj/javaprims.h (_Jv_Realloc): Prototype. * include/jvm.h (_Jv_LookupInterfaceMethodIdx): Prototype. From-SVN: r32382
2000-03-07 10:52:56 +01:00
extern "C" void* _Jv_Realloc (void *, jsize);
1999-04-07 16:42:40 +02:00
extern "C" void _Jv_Free (void*);
extern void (*_Jv_RegisterClassHook) (jclass cl);
extern "C" void _Jv_RegisterClassHookDefault (jclass);
1999-04-07 16:42:40 +02:00
typedef unsigned short _Jv_ushort __attribute__((__mode__(__HI__)));
typedef unsigned int _Jv_uint __attribute__((__mode__(__SI__)));
typedef unsigned int _Jv_ulong __attribute__((__mode__(__DI__)));
1999-04-07 16:42:40 +02:00
// The type to use when treating a pointer as an integer. Similar to
// uintptr_t in C99.
typedef unsigned int _Jv_uintptr_t __attribute__((__mode__(__pointer__)));
class _Jv_Utf8Const
1999-04-07 16:42:40 +02:00
{
_Jv_ushort hash;
_Jv_ushort length; /* In bytes, of data portion, without final '\0'. */
char data[1]; /* In Utf8 format, with final '\0'. */
public:
/** Return same value of java.lang.String's hashCode. */
jint hash32() { return _Jv_hashUtf8String(data, length); }
/** Return a hash code that has at least 16 bits of information. */
_Jv_ushort hash16 () { return hash; }
/** Return a hash code that has at least 8 bits of information. */
_Jv_ushort hash8 () { return hash; }
/** Length in bytes of the UTF8-encoding. */
_Jv_ushort len () const { return length; }
/** Pointer to the first byte in the NUL-terminated UTF8-encoding. */
char* chars() { return data; }
/** Pointer to the NUL byte that terminated the UTF8-encoding. */
char* limit() { return data+length; }
/** Return the first byte in the UTF8-encoding. */
char first() const { return data[0]; }
/** Create a (non-interned) java.lang.String from this UTF8Const. */
jstring toString() { return _Jv_NewStringUTF(data); }
/** Given an UTF8 string, how many bytes needed for a UTF8Const,
including struct header, and final NUL. I.e. what to pas to malloc. */
static int space_needed (const char *, int len)
{ return sizeof (_Jv_Utf8Const) + len + 1; }
/** Given an allocated _Jv_Utf8Const, copy / fill it in. */
void init (const char *s, int len);
friend jboolean _Jv_equalUtf8Consts (const _Jv_Utf8Const*, const _Jv_Utf8Const *);
friend jboolean _Jv_equal (_Jv_Utf8Const*, jstring, jint);
friend jboolean _Jv_equaln (_Jv_Utf8Const*, jstring, jint);
friend jboolean _Jv_equalUtf8Classnames (const _Jv_Utf8Const*,
const _Jv_Utf8Const*);
friend jboolean _Jv_isPrimitiveOrDerived (const _Jv_Utf8Const*);
friend _Jv_Utf8Const *_Jv_makeUtf8Const (const char*, int);
friend _Jv_Utf8Const *_Jv_makeUtf8Const (jstring);
friend jstring _Jv_NewStringUtf8Const (_Jv_Utf8Const*);
1999-04-07 16:42:40 +02:00
};
[multiple changes] 2001-05-23 Tom Tromey <tromey@redhat.com> * posix-threads.cc (_Jv_self_cache): Renamed from self_cache. * gcj/Makefile.in: Rebuilt. * gcj/Makefile.am (gcj_HEADERS): Added libgcj-config.h. * gcj/javaprims.h: Include gcj/libgcj-config.h. * gcj/libgcj-config.h.in: New file. * libgcj.spec.in (*jc1): Added @HASH_SYNC_SPEC@. * configure: Rebuilt. * configure.in: Enable hash synchronization by default on some platforms. (HASH_SYNC_SPEC): New subst. (AC_CONFIG_HEADER): Added gcj/libgcj-config.h. Correctly use `test -z' instead of `test -n' in a couple places. (JV_HASH_SYNCHRONIZATION): Use AC_DEFINE; don't add to LIBGCJ_CXXFLAGS. * configure.host (enable_java_net_default): Initialize. (enable_hash_synchronization_default): New variable. 2001-05-23 Hans Boehm <Hans_Boehm@hp.com> * boehm.cc (_Jv_MarkObj): Don't mark sync_info when hash synchronization in use. (_Jv_MarkArray): Likewise. (_Jv_AllocBytes): Don't check return result. (handle_out_of_memory): New function. (_Jv_InitGC): Set GC_oom_fn. (trace_one_vtable): New global. (_Jv_AllocTraceOne): New function. * configure.in: Added --enable-hash-synchronization. * defineclass.cc, prims.cc, resolve.cc, java/lang/natString.cc, java/net/natInetAddress.cc: Remove _Jv_AllocBytesChecked. * nogc.cc (_Jv_AllocObj): Throw out-of-memory. (_Jv_AllocArray): Likewise. (_Jv_AllocBytes): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_AllocTraceOne): Likewise. * posix-threads.cc (_Jv_ThreadRegister): Handle slow pthread_self(). (self_cache): New global. (_Jv_ThreadSelf_out_of_line): New function. * prims.cc (_Jv_AllocBytesChecked): Removed. (_Jv_ThrowNoMemory): New function. (_Jv_AllocObject): Don't check for null return from allocator. (_Jv_NewObjectArray): Likewise. (_Jv_AllocPtrFreeObject): New function. (_Jv_NewPrimArray): Allocate pointer-free object if possible. * include/javaprims.h (_Jv_AllocPtrFreeObject): Declare. (_Jv_MonitorEnter, _Jv_MonitorExit): Don't return value. * include/boehm-gc.h (_Jv_AllocObj): Define. (_Jv_AllocPtrFreeObj): Define. * include/jvm.h (_Jv_AllocPtrFreeObj): Declare. (_Jv_ThrowNoMemory): Declare. (_Jv_AllocTraceOne): Declare. (_Jv_AllocBytesChecked): Removed. * include/posix-threads.h (_Jv_MutexInit, _Jv_MutexLock, _Jv_MutexUnlock): Handle LOCK_DEBUG. (_Jv_ThreadSelf): Handle case where system pthread_self() is slow. * java/lang/Class.h (Class): Declare _Jv_AllocPtrFreeObj as friend. * java/lang/Object.h (sync_info): Conditional upon presence of hash synchronization. * java/lang/natObject.cc: Much new code to handle thin locks and hash synchronization. * java/lang/natString.cc (_Jv_AllocString): Allocate pointer-free object if possible. From-SVN: r42519
2001-05-24 07:40:37 +02:00
1999-04-07 16:42:40 +02:00
#endif /* __JAVAPRIMS_H__ */