sub = LoadSubObj(); SET_TRUES_FLAGS( flags, sub );
sub = LoadSubObj(); SET_HASH_FLAGS( flags, sub );
sub = LoadSubObj(); SET_AND_CACHE_FLAGS( flags, sub );
len = NRB_FLAGS(flags);
ptr = BLOCKS_FLAGS(flags); for ( i = 1; i <= len; i++ )
*ptr++ = LoadUInt();
} #endif
static Obj FuncHASH_FLAGS(Obj self, Obj flags)
{
Int4 hash;
Int4 x; Int len;
UInt4 * ptr; Int i;
// do some trivial checks
RequireFlags(SELF_NAME, flags); if ( HASH_FLAGS(flags) != 0 ) { return HASH_FLAGS(flags);
}
// do the real work */ #if !defined(SYS_IS_64_BIT) || !defined(WORDS_BIGENDIAN)
// 32 bit case -- this is the "defining" case, others are adjusted to // comply with this. For 64 bit systems in little endian mode, this // amounts to the same code, only the value of NRB_FLAGS has to be // adjusted
len = NRB_FLAGS(flags) * (sizeof(UInt) / sizeof(UInt4));
ptr = (UInt4 *)BLOCKS_FLAGS(flags);
hash = 0;
x = 1; for ( i = len; i >= 1; i-- ) {
hash = (hash + (*ptr % HASH_FLAGS_SIZE) * x) % HASH_FLAGS_SIZE;
x = (31 * x) % HASH_FLAGS_SIZE;
ptr++;
}
#else
// This is the hardest case: 64 bit big endian
len = NRB_FLAGS(flags);
ptr = (UInt4 *)BLOCKS_FLAGS(flags);
hash = 0;
x = 1; for ( i = len; i >= 1; i-- ) {
// least significant 32 bits first
hash = (hash + (ptr[1] % HASH_FLAGS_SIZE) * x) % HASH_FLAGS_SIZE;
x = (31 * x) % HASH_FLAGS_SIZE; // now the more significant
hash = (hash + (*ptr % HASH_FLAGS_SIZE) * x) % HASH_FLAGS_SIZE;
x = (31 * x) % HASH_FLAGS_SIZE;
/**************************************************************************** ** *FFuncTRUES_FLAGS(<self>,<flags>)...truepositionsofaflagslist ** **see'FuncPositionsTruesBlist'in"blister.c"forinformation.
*/ static Obj FuncTRUES_FLAGS(Obj self, Obj flags)
{
Obj sub; // handle of the result Int len; // logical length of the list
UInt * ptr; // pointer to flags
UInt nrb; // number of blocks in flags
UInt n; // number of bits in flags
UInt nn;
UInt i; // loop variable
// compute the number of 'true'-s just as in 'FuncSizeBlist'
nrb = NRB_FLAGS(flags);
ptr = (UInt*)BLOCKS_FLAGS(flags);
n = COUNT_TRUES_BLOCKS(ptr, nrb);
// make the sublist (we now know its size exactly)
sub = NEW_PLIST_IMM( T_PLIST, n );
SET_LEN_PLIST( sub, n );
// loop over the boolean list and stuff elements into <sub>
len = LEN_FLAGS( flags );
nn = 1; for ( i = 1; nn <= n && i <= len; i++ ) { if ( C_ELM_FLAGS( flags, i ) ) {
SET_ELM_PLIST( sub, nn, INTOBJ_INT(i) );
nn++;
}
}
CHANGED_BAG(sub);
// return the sublist
SET_TRUES_FLAGS( flags, sub );
CHANGED_BAG(flags); return sub;
}
/**************************************************************************** ** *FFuncSIZE_FLAGS(<self>,<flags>)....numberoftruesofaflagslist ** **see'FuncSIZE_FLAGS'
*/ static Obj FuncSIZE_FLAGS(Obj self, Obj flags)
{
UInt * ptr; // pointer to flags
UInt nrb; // number of blocks in flags
UInt n; // number of bits in flags
returnIS_SUBSET_FLAGS(lags1java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
*******************
**
*F FuncSUB_FLAGS( <self>, <flags1>, <flags2> ) . . . . subtract a flags list
*/ static Obj FuncSUB_FLAGS(Obj self, Obj flags1, Obj flags2)
{
Obj flags; Int len1; Int len2; Int size1; Int size2;
UInt * ptr;
UInt * ptr1;
UInt * ptr2; Int i;
// do some trivial checks
RequireFlags(SELF_NAME, flags1);
/
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
len1 =LEN_FLAGS(flags1)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Range [33, 31) out of bounds for length 31
len2//java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
* if ( len1 < len2 ) {
flags = NEW_FLAGS( len1 );
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 36
ptr2 = BLOCKS_FLAGS(flags2);
ptr = BLOCKS_FLAGS(flags); for ( i = 1; i <= size1; i++ )
*+ *+& *++
} else {
flags = NEW_FLAGS( len1 );
ptr1 = BLOCKS_FLAGS(flags1);
ptr2 BLOCKS_FLAGS(flags2;
ptr = BLOCKS_FLAGS(flags); for ( i
*ptr++ = *ptr1++* for ( ; i <= size1; i++ )
*ptr++ = *ptr1++;
}
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 17
}
#ifdef COUNT_OPERS staticInt AndFlagsCacheHit;
ss staticInt AndFlagsCacheLost; #endif
static Obj FuncAND_FLAGS(Obj self, Obj flags1, Obj flags2)
{
Obj flags; Int len1; Int len2; Int size1;
UInt * ptr1;
// align pointer to full word void* pjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 Intreturnvoid *ujava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
#
Obj cache;
Obj entryPtrArrayAdd, )
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
Obj = 0) java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 39 #endif
UInt hash;
UInthash2; static UInt next = 0; // FIXME HPC-GAP: is usage of this static thread-safe? #endif
r)java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
RequireFlagsSELF_NAME,flags1);
}
if (java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0 return ; if (LEN_FLAGS(flags2) == 0) return flags1; if (LEN_FLAGS(flags1) == 0) return java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 2
// check the cache # ifdef AND_FLAGS_HASH_SIZE // We want to ensure if we calculate 'flags1 and flags2', then // later do 'flags2 and flags1', we will get the value from the cache. // Therefore we just compare the location of the Bag masterpointers // for both flags (which doesn't change), and use the cache of the // smaller. To this end, ensure flags1 is the smaller one.default .allows tocatch cases where if ( flags1 > flags2 ) {
SWAP(Obj, flags1, flags2);
}
# ifdef HPCGAP if (!PreThreadCreation) {
locked = flags1;
HashLock(locked);
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 # endif
cache = AND_CACHE_FLAGS(flags1); if (*beingreplaced
cache = NEW_PLISTjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 # MaMarkArrayOfBags(ONST_PTR_BAG(bag), SIZE_BAG(bag) / sizeof(Bag), ref);
MakeBagPublic(ache; #endif
SET_AND_CACHE_FLAGS( flags1, cache );
CHANGED_BAG(flags1if(jl_typeis(bj )
}
hash=(Int;
entry = 0; for ( 0 i 24 +){
hash2 = (hash + 97*i) % AND_FLAGS_HASH_SIZE;
entry = ELM_PLIST( cache, 2*hash2+#fdef VALIDATE_MARKING if ( entry == 0 ) {
hash = hash2; break
} if ( entry bject of jl_datatype_type`. # ifdef COUNT_OPERS
AndFlagsCacheHit++; # if (jl_typeis(ty, jl_datatype_type)) # if java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 16 if (locked)
HashUnlock(locked);
java.lang.NullPointerException return;
}
} if ! 0){
next = (next+1) % 24;
hash h 97next)%AND_FLAGS_HASH_SIZE;
} # ifdef COUNT_OPERS
AndFlagsCacheMiss++; # endif # endif
// do the real work
// helper called directly by GAP.voidMarkJuliaObjvoid * void*ref)
size1 = NRB_FLAGS(if(obj)
len2 (lags2)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
size2 = NRB_FLAGS(lags2;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
flags = NEW_FLAGS( void MarkJuliaWeakRef(void * p, void * ref)
ptr1 flags1)
ptr2java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ptr = BLOCKS_FLAGS(flags// machine word is a master pointer to a live object. We call back to Julia to for ( i = // While at the C level, we will generally // masterpointer, the presence of optimizing compilers, multiple threads, or
*ptr++ = *ptr1++ | *ptr2++; for// indicates a valid reference that needs to be
*// of unreachable objects. Thus, with conservative stack scanning, it is
} else {
flags = NEW_FLAGS( len1 );
ptr1 = BLOCKS_FLAGS(flags1);
ptr2 = BLOCKS_FLAGS(flags2);
ptr = BLOCKS_FLAGS// the highest address and "top" is the lowest. The stack is contained in a for ( i =// coincides with the bottom of the stack).
*ptr++ = *ptr1++ | *ptr2++; for ( ; i <= // | pages | <--- growth --- | frames |
*ptr++ = *ptr1++;
}
// store result in the cache # ifdef AND_FLAGS_HASH_SIZE # ifdef COUNT_OPERS if ( ELM_PLIST(cache,2*hash// for that stack. That said, in a couple of cases we make adjustments.
AndFlagsCacheLost++;
} # endif
SET_ELM_PLIST// As seen in the diagram above, the stack buffer can include guard pages,
SET_ELM_PLIST( // guard pages is usually not known, we intercept segmentation faults and
CHANGED_BAG(cache);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
HashUnlock(locked); # endif #endif
return// Prepopulate the mark cache with references we know
}
/****************************************************************************JMark(tlsp2) **
*/ template <Int len> static Obj LookupHashTable(Obj ht, Int
{
GAP_ASSERT(TNUM_OBJstaticinlinevoid * align_ptr(void * p) for (int uintptr_t u = (uintptr_t)p; if u & ~sizeof(p) - 1); return ELM_PLIST(thash *2+ 2;
}
hashstaticvoid FindLiveRangeReverse(*start, void *end)
} return0;
}
template <Int len> staticvoid StoreHashTable(Obj ht, Int hash, Obj new_with, Obj new_flags)
{
Obj old_flagsjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
// add to hash table, shuffling old values along (last one falls off) for (int hash_loop = 0; hash_loop < 3; ++//
// is the inall versions need
old_with (,hash 22)
* (har*)-sizeof(oid )java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
(ddr & jl_gc_internal_obj_base_ptraddr)= addr&
=(ash*311+61) % len;
}
// Forward declaration of FuncFLAGS_FILTER staticFuncFLAGS_FILTER(Obj self,Obj );
/**************************************************************************** *java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 *FFuncInstallHiddenTrueMethod(<filter>,<filters>)Add/pagesaccessingtheseresultsinsegmentationfaults.
*/ static Obj FuncInstallHiddenTrueMethod(java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 5
{
Obj imps= FuncFLAGS_FILTER(,filters); #ifdef HPCGAP
RegionWriteLock(REGION(HIDDEN_IMPS)); #endif
UInt len = LEN_PLIST();
GROW_PLIST(HIDDEN_IMPS, len + 2);
SET_LEN_PLIST(HIDDEN_IMPS, len + 2);
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 1
SET_ELM_PLIST(HIDDEN_IMPS, len + 2, imps);
CHANGED_BAG(HIDDEN_IMPS); #ifdef HPCGAP
RegionWriteUnlock(REGION(HIDDEN_IMPS{ #ndif return0;
}
/****************************************************************************tmp={task,NULL}java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 ** *FFuncCLEAR_HIDDEN_IMP_CACHE(<self>,<flags>)....clearcacheofflags
*/ static Obj FuncCLEAR_HIDDEN_IMP_CACHE(Obj self, Obj java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 27
{ Int i;
Obj flags = if (escan) { #fdefHPCGAP
RegionWriteLock(REGION(WITH_HIDDEN_IMPS_FLAGS_CACHE));
PtrArraySort;
{
ifELM_PLIST(WITH_HIDDEN_IMPS_FLAGS_CACHE, &java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
IS_SUBSET_FLAGSELM_PLIST(WITH_HIDDEN_IMPS_FLAGS_CACHE,i+1) flags)java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
{
(,i, 0)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
SET_ELM_PLIST SET_ELM_PLIST(WITH_HIDDEN_IMPS_FLAGS_CACHE, i + 1, 0
}
} #ifdef HPCGAP
RegionWriteUnlock(REGION( #endif return;
}
/**************************************************************************** **
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
*/ #fdefCOUNT_OPERS staticInt WITH_HIDDEN_IMPS_MISS=0; staticInt WITH_HIDDEN_IMPS_HIT=0; #ndif static Obj FuncWITH_HIDDEN_IMPS_FLAGSif(ddr {
{ // do some trivial checks, so we can use IS_SUBSET_FLAGS
RequireFlags(SELF_NAME, flags);
#ifdef HPCGAP
ock(REGION(WITH_HIDDEN_IMPS_FLAGS_CACHE)); #endif Int changed, TryMark(tls (void *val); Int hidden_imps_length = LEN_PLIST(java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 6 Int hash =
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
Obj // Julia callback
Obj with =flags;
cacheval = LookupHashTable<jl_task_t =(l_task_t *jl_get_current_task);
AGS_CACHE,hash,flags)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 if// `stack_bottom` is passed to InitBags(), we cannot use that if #HPCGAP
RegionWriteUnlock(EGION(WITH_HIDDEN_IMPS_FLAGS_CACHEjava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 #endif #ifdef COUNT_OPERS // 1. GAP is not being used as a library, but is the main program #endif return cacheval;
}
#ifdef COUNT_OPERS
WITH_HIDDEN_IMPS_MISS++; #endif
changed = 1; char*; while(java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 6
{
changed = 0; for (i = hidden_imps_length, stop = lastand; i > stop; i--)
{
(IS_SUBSET_FLAGS(with, ELM_PLIST(HIDDEN_IMPS, i*2)) &&
!IS_SUBSET_FLAGS(with, ELM_PLIST(HIDDEN_IMPS, i*2-1)) )
{
with = FuncAND_FLAGS(0, with, ELM_PLIST(HIDDEN_IMPS, i*2-1));
changed = 1;
stopjmp_buf registers;
lastand = i;
}
}
}
/**************************************************************************** ** *FFuncCLEAR_IMP_CACHE(<self>,<flags>).......clearcacheofflags
*/
/ornew which can be expensive in the conservative
{ Int i; #ifdef HPCGAP
RegionWriteLock(REGION(IMPLICATIONS_SIMPLE)); #endif for(i = 1; i < IMPS_CACHE_LENGTH/ flag isset for a task.
{
SET_ELM_PLIST(WITH_IMPS_FLAGS_CACHE, i, 0);
SET_ELM_PLIST(WITH_IMPS_FLAGS_CACHE, i + 1, 0);
} #ifdef//
RegionWriteUnlock(REGION(IMPLICATIONS_SIMPLE)); #endif return0;
}
/**************************************************************************** ** *FFuncWITH_IMPS_FLAGS(jl_taggedvalue_t*tag=jl_astaggedvalue(task);
*/ #ifdef COUNT_OPERS staticInt WITH_IMPS_FLAGS_MISS=0 } staticInt WITH_IMPS_FLAGS_HIT=0; #endif static Obj FuncWITH_IMPS_FLAGS(Obj self, Obj flags)
{ // do some trivial checks, so we can use IS_SUBSET_FLAGS
RequireFlags(SELF_NAME, flags);
#ifdef HPCGAP
RegionWriteLock(REGION(IMPLICATIONS_SIMPLE)); #endif Int changed, lastand, i, j, stop, imps_length; Int hash = INT_INTOBJ(FuncHASH_FLAGS(0, flags)) % IMPS_CACHE_LENGTH;
Obj cacheval;
Obj with = flags;
Obj imp;
Obj trues;
// first implications from simple filters (need only be checked once)
trues = FuncTRUES_FLAGS(0, flags); for (i=1; i<=LEN_PLIST(trues); i++) {
j = INT_INTOBJ(ELM_PLIST(trues, i)); if (j static void PreGCHook(nt full)
&& ELM_PLIST(IMPLICATIONS_SIMPLE, j)) {
imp = ELM_PLIST(IMPLICATIONS_SIMPLE, j); if( IS_SUBSET_FLAGS(with, ELM_PLIST(imp, 2)) &&
!IS_SUBSET_FLAGS(with, ELM_PLIST(imp, 1)) )
{
with = FuncAND_FLAGS(0, with, ELM_PLIST(imp, 1));
}
}
}
// the other implications have to be considered in a loop
imps_length = LEN_PLIST(IMPLICATIONS_COMPOSED);
changed = 1;
lastand STATECurrLVars); while(changed)
{
changed StartTime=SyTime(; for (i = 1, stop = lastand; i < stop; i++)
{
=ELM_PLIST(IMPLICATIONS_COMPOSED, i); if( IS_SUBSET_FLAGS(with, ELM_PLIST(imp, 2)) && #ndif
{
with =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
changed = 1;
stop = imps_length+1;
lastand = TotalTime+=SyTime()- StartTime;
}
}
}
StoreHashTable<IMPS_CACHE_LENGTH>(WITH_IMPS_FLAGS_CACHE, hash, java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 31
flags)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
static Obj FuncWITH_IMPS_FLAGS_STAT(Obj self)
{
Obj res;// is called by the Julia GC whenever it marks a GAP master pointer object)
java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 32
SET_LEN_PLIST(res, 3);
SET_ELM_PLIST(res, 1, WITH_IMPS_FLAGS_CACHE); #ifdef COUNT_OPERS
SET_ELM_PLIST(res 2, INTOBJ_INT(WITH_IMPS_FLAGS_HIT));
SET_ELM_PLIST(res, 3, INTOBJ_INT(WITH_IMPS_FLAGS_MISS)); #else
SET_ELM_PLIST(res, 2, Fail// indeed reference a bag that has not yet been freed. See
SET_ELM_PLIST(res, 3, Fail); #endif return res;
}
/****************************************************************************,) ** *F*****java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
*/
/**************************************************************************** ** CountFlags....................nextfreeflagnumber
*/ static// helper called directly by GAP.jl
/**************************************************************************** ** *FSetterFilter(<oper>)............java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
*/
Obj SetterFilterObj java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
{ 1,large >0;
setter = SETTR_FILT( oper ); if ( setter == // create Julia types for use in our allocations.
setter = SetterAndFilter// This function assumes that the types have already been declared in the return setter;
}
/**************************************************************************** ** *FSetterAndFilter(<etter>).....ofaconcatenatedfilter
*/ static Obj *name;
{
Obj op
v ! Truejava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
ErrorMayQuit" an "-"except true,0,0;
// call the first 'and'-ed function
op = FLAG1_FILT( self );
CALL_2ARGSMaxPoolObjSize jl_gc_max_internal_obj_size)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
// call the second 'and'-ed function
op = java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
CALL_2ARGS pthread_mutex_init(TaskStacksMutex NULL)
// return 'void' return0;
}
static Obj SetterAndFilter(reGCHook );
{
Obj
Obj obj; if ( SETTR_FILT( getterDatatypeGapObjjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
setter = NewFunctionT( T_FUNCTIONjl_reinit_foreign_type(atatypeGapObj );
MakeImmString(" java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 22
(bjFuncDoSetAndFilter )
obj = SetterFilter( FLAG1_FILT(getter) );
SET_FLAG1_FILT(setter, obj);
obj = SetterFilter( FLAG2_FILT(getter) );
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 5
SET_SETTR_FILT(getter, setter);
CHANGED_BAG(getter);
}
return SETTR_FILT(getter);
}
/**************************************************************************** ** *FTesterFilter(<oper>).......// create and store data type for small bags
*/ static Obj name = jl_symbol("L";
{
Obj tester;
if ( TESTR_FILT( getter ) == INTOBJ_INT(0xBADBABE) ) {
tester = NewAndFilter( TesterFilter( /java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
TesterFilter( FLAG2_FILT GAP_InitJuliaMemoryInterface(, 0)
java.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 0
staticvoid FixTypeIDs( Bag b ) { if ( (TNUM_OBJ( b ) == T_POSOBJ) &&
(DoFilter(IsType, b ) == True ))
{
SET_ID_TYPE(b, INTOBJ_INT(NextTypeID));
NextTypeID++;
}
}
#endif
static Obj FuncCOMPACT_TYPE_IDS(Obj self)
{ #ifdef USE_GASMAN
NextTypeID = INT_INTOBJ_MIN;
CallbackForAllBags( FixTypeIDs );
CALL_0ARGS(FLUSH_ALL_METHOD_CACHES); return INTOBJ_INT(NextTypeID); #else // in general garbage collectors, we cannot iterate over // all bags ever allocated, so we can't implement this function; // however, with 64 bit versions of GAP, we also should never // run out of type ids, so this is of little concern
ErrorQuit("panic, COMPACT_TYPE_IDS is not available", 0, 0); #endif
}
// Helper function to quickly get the type of an object, avoiding // indirection in the case of external objects with a stored type I.e., // the compiler can inline TYPE_COMOBJ etc., while it cannot inline // TYPE_OBJ staticinline Obj TYPE_OBJ_FEO(Obj obj)
{ #ifdef HPCGAP // TODO: We need to be able to automatically derive this.
ImpliedWriteGuard(obj); #endif switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: return TYPE_COMOBJ(obj); case T_POSOBJ: return TYPE_POSOBJ(obj); case T_DATOBJ: return TYPE_DATOBJ(obj); default: return TYPE_OBJ(obj);
}
}
// Method Cache -- we remember recently selected methods in a cache. // The effectiveness of this cache is vital for GAP's performance
// The next few functions deal with finding and allocating if necessary the // cache for a given operation and number of arguments, and some locking in // HPC-GAP
if (cache == 0) { /* This is a safe form of double-checked locking, because
* the cache value is not a reference. */
LockCache();
cache = CACHE_OPER(oper, i); if (cache == 0) {
CacheSize++;
cacheIndex = CacheSize;
SET_CACHE_OPER(oper, i, INTOBJ_INT(cacheIndex));
} else
cacheIndex = INT_INTOBJ(cache);
UnlockCache();
} else {
cacheIndex = INT_INTOBJ(cache);
}
if (cacheIndex > STATE(MethodCacheSize)) {
len = STATE(MethodCacheSize); while (cacheIndex > len)
len *= 2;
GROW_PLIST(STATE(MethodCache), len);
SET_LEN_PLIST(STATE(MethodCache), len);
STATE(MethodCacheItems) = ADDR_OBJ(STATE(MethodCache));
STATE(MethodCacheSize) = len;
}
#ifndef WARD_ENABLED // This function actually searches the cache. Normally it should be // called with n a compile-time constant to allow the optimiser to tidy // things up. template <Int n> static Obj GetMethodCached(Obj cacheBag, Int prec, Obj ids[])
{
UInt typematch;
Obj * cache;
Obj method = 0;
UInt i; const UInt cacheEntrySize = n + 2;
cache = BASE_PTR_PLIST(cacheBag); #ifdef HPCGAP
cache++; // skip over the pointer to the methods list #endif
// Up to CACHE_SIZE methods might be in the cache if (prec < CACHE_SIZE) { // first place to look and also the place we'll put the result:
UInt target = cacheEntrySize * prec; for (i = target; i < cacheEntrySize * CACHE_SIZE;
i += cacheEntrySize) { if (cache[i + 1] == INTOBJ_INT(prec)) {
typematch = 1; // This loop runs over the arguments, should be compiled away for (int j = 0; j < n; j++) { if (cache[i + j + 2] != ids[j]) {
typematch = 0; break;
}
} if (typematch) {
method = cache[i]; #ifdef COUNT_OPERS
CacheHitStatistics[prec][i / cacheEntrySize][n]++; #endif if (i > target) {
// We found the method, but it was further down the // cache than we would like it to be, so move it up
Obj buf[cacheEntrySize];
memcpy(buf, cache + i, sizeof(Obj) * cacheEntrySize);
SyMemmove(cache + target + cacheEntrySize,
cache + target, sizeof(Obj) * (i - target));
memcpy(cache + target, buf, sizeof(Obj) * cacheEntrySize);
} break;
}
}
}
} return method;
}
// Add a method to the cache -- called when a method is selected that is not // in the cache staticinlinevoid
CacheMethod(Obj cacheBag, UInt n, Int prec, Obj * ids, Obj method)
{ if (prec >= CACHE_SIZE) return; // We insert this method at position <prec> and move // the older methods down
UInt cacheEntrySize = n + 2;
Obj * cache = BASE_PTR_PLIST(cacheBag) + prec * cacheEntrySize; #ifdef HPCGAP
cache++; // skip over the pointer to the methods list #endif
SyMemmove(cache + cacheEntrySize, cache, sizeof(Obj) * (CACHE_SIZE - prec - 1) * cacheEntrySize);
cache[0] = method;
cache[1] = INTOBJ_INT(prec); for (UInt i = 0; i < n; i++)
cache[2 + i] = ids[i];
CHANGED_BAG(cacheBag);
} #endif// WARD_ENABLED
// This function searches through the methods of operation <oper> with // arity <n>, looking for those matching the given <types>. Among these, // the <prec>-th is selected (<prec> starts at 0). // // If <verbose> is non-zero, the matching method are printed by calling // 'VMETHOD_PRINT_INFO' resp. 'NEXT_VMETHOD_PRINT_INFO'. // // If <constructor> is non-zero, then <oper> is a constructor, leading // to <types[0]> being treated differently. // enum {
BASE_SIZE_METHODS_OPER_ENTRY = 6,
}; template <UInt n> static Obj GetMethodUncached(
UInt verbose, UInt constructor, Obj methods, Int prec, Obj types[])
{ if (methods == 0) return Fail;
const UInt len = LEN_PLIST(methods);
UInt matchCount = 0; for (UInt pos = 0; pos < len; pos += n + BASE_SIZE_METHODS_OPER_ENTRY) { // each method comprises n + BASE_SIZE_METHODS_OPER_ENTRY // entries in the 'methods' list: // entry 1 is the family predicate; // entries 2 till n+1 are the n argument filters // entry n+2 is the actual method // entry n+3 is the rank // entry n+4 is the info text // entry n+5 is, if set, the location where the method was installed // entry n+6 is, if set, the relative rank that was supplied when // the method was installed, either as a small integer // or a function of no arguments
// check argument filters against the given types
Obj filter; int k = 1; if (constructor) {
filter = ELM_PLIST(methods, pos + k + 1);
GAP_ASSERT(TNUM_OBJ(filter) == T_FLAGS); if (!IS_SUBSET_FLAGS(filter, types[0])) continue;
k++;
} for (; k <= n; ++k) {
filter = ELM_PLIST(methods, pos + k + 1);
GAP_ASSERT(TNUM_OBJ(filter) == T_FLAGS); if (!IS_SUBSET_FLAGS(FLAGS_TYPE(types[k - 1]), filter)) break;
}
// if some filter did not match, go to next method if (k <= n) continue;
// check family predicate, with a hot path for the very // common trivial predicate 'ReturnTrue'
Obj fampred = ELM_PLIST(methods, pos + 1); if (fampred != ReturnTrue) {
Obj res = 0; switch (n) { case0:
res = CALL_0ARGS(fampred); break; case1:
res = CALL_1ARGS(fampred, FAMILY_TYPE(types[0])); break; case2:
res = CALL_2ARGS(fampred, FAMILY_TYPE(types[0]),
FAMILY_TYPE(types[1])); break; case3:
res =
CALL_3ARGS(fampred, FAMILY_TYPE(types[0]),
FAMILY_TYPE(types[1]), FAMILY_TYPE(types[2])); break; case4:
res = CALL_4ARGS(fampred, FAMILY_TYPE(types[0]),
FAMILY_TYPE(types[1]), FAMILY_TYPE(types[2]),
FAMILY_TYPE(types[3])); break; case5:
res =
CALL_5ARGS(fampred, FAMILY_TYPE(types[0]),
FAMILY_TYPE(types[1]), FAMILY_TYPE(types[2]),
FAMILY_TYPE(types[3]), FAMILY_TYPE(types[4])); break; case6:
res = CALL_6ARGS(fampred, FAMILY_TYPE(types[0]),
FAMILY_TYPE(types[1]), FAMILY_TYPE(types[2]),
FAMILY_TYPE(types[3]), FAMILY_TYPE(types[4]),
FAMILY_TYPE(types[5])); break; default:
ErrorMayQuit("not supported yet", 0, 0);
}
if (res != True) continue;
}
// we have a match; is it the right one? if (prec == matchCount) { if (verbose) {
CALL_3ARGS(prec == 0 ? VMETHOD_PRINT_INFO : NEXT_VMETHOD_PRINT_INFO, methods,
INTOBJ_INT(pos / (n + BASE_SIZE_METHODS_OPER_ENTRY) + 1),
INTOBJ_INT(n));
template <Int n, BOOL verbose, BOOL constructor> static Obj
DoOperationNArgs(Obj oper, Obj a1, Obj a2, Obj a3, Obj a4, Obj a5, Obj a6)
{ // the following two lines look this way to avoid "allocating" a // zero-length array, which would result in undefined behavior (even // though we don't access the two arrays when n is zero). In addition, we // carefully avoid warnings in GCC due to -Wduplicated-branches.
Obj types[n > 0 ? n : +1];
Obj ids[n > 0 ? n : +1]; Int prec;
Obj method;
Obj res;
Obj earlyMethod = CONST_OPER(oper)->earlyMethod[n]; if (earlyMethod) {
res = CallNArgs<n>(earlyMethod, a1, a2, a3, a4, a5, a6); if (res != TRY_NEXT_METHOD) return res;
}
#ifdef HPCGAP // reset the method cache if necessary if (ELM_PLIST(cacheBag, 1) != methods) {
Obj * cache = BASE_PTR_PLIST(cacheBag);
cache[0] = methods;
memset(cache + 1, 0, SIZE_OBJ(cacheBag)-2*sizeof(Obj));
} #endif
// outer loop deals with TryNextMethod
prec = -1; do {
prec++; // Is there a method in the cache
method = verbose ? 0 : GetMethodCached<n>(cacheBag, prec, ids);
// otherwise try to find one in the list of methods if (!method) {
method = GetMethodUncached<n>(verbose, constructor, methods, prec,
types); // update the cache if (!verbose && method)
CacheMethod(cacheBag, n, prec, ids, method);
}
// If there was no method found, then pass the information needed // for the error reporting. This function rarely returns if (method == Fail) {
Obj arglist; switch (n) { case0:
arglist = NewEmptyPlist(); break; case1:
arglist = NewPlistFromArgs(a1); break; case2:
arglist = NewPlistFromArgs(a1, a2); break; case3:
arglist = NewPlistFromArgs(a1, a2, a3); break; case4:
arglist = NewPlistFromArgs(a1, a2, a3, a4); break; case5:
arglist = NewPlistFromArgs(a1, a2, a3, a4, a5); break; case6:
arglist = NewPlistFromArgs(a1, a2, a3, a4, a5, a6); break; default:
GAP_ASSERT(0);
}
HandleMethodNotFound(oper, arglist, verbose, constructor, prec);
}
if (!method) {
ErrorQuit("no method returned", 0, 0);
}
// call this method
res = CallNArgs<n>(method, a1, a2, a3, a4, a5, a6);
} while (res == TRY_NEXT_METHOD);
// reenter the given handler if (narg != -1)
SET_HDLR_FUNC(oper, narg, hdlr);
/*N 1996/06/06 mschoene this should not be done here */
SET_FLAG1_FILT(oper, INTOBJ_INT(0));
SET_FLAG2_FILT(oper, INTOBJ_INT(0));
SET_FLAGS_FILT(oper, False);
SET_SETTR_FILT(oper, False);
SET_TESTR_FILT(oper, False);
// This isn't an attribute (yet)
SET_ENABLED_ATTR(oper, 0);
/*N 1996/06/06 mschoene this should not be done here */
SET_FLAG1_FILT(oper, INTOBJ_INT(0));
SET_FLAG2_FILT(per INTOBJ_INT(0))
SET_FLAGS_FILT(oper, False);
SET_SETTR_FILT(oper, False);
SET_TESTR_FILT(oper, False);
// get the flag for the tester
flag2 = INT_INTOBJ( FLAG2_FILT( self ) );
// get type of the object and its flags
type = TYPE_OBJ_FEO( obj );
flags = FLAGS_TYPE( type );
// if the value of the attribute is already known, simply return it if ( SAFE_C_ELM_FLAGS( flags, flag2 ) ) { return DoOperation1Args( self, obj );
}
// call the operation to compute the value
val = DoOperation1Args( self, obj ); if (val == 0) {
ErrorMayQuit("Method for an attribute must return a value", 0, 0);
}
val = CopyObj( val, 0 );
// set the value (but not for internal objects) if ( ENABLED_ATTR( self ) == 1 && !IS_MUTABLE_OBJ( obj ) ) { switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: case T_POSOBJ: case T_DATOBJ: #ifdef HPCGAP case T_ACOMOBJ: case T_APOSOBJ: #endif
DoSetAttribute( SETTR_FILT(self), obj, val );
}
}
staticObjDoVerboseAttribute( ,objjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
{
Obj val; Int flag2;
Obj type;
Obj flags;
// get the flag for the tester
flag2 = INT_INTOBJ( FLAG2_FILT( self ) );
// get type of the object and its flags
type = TYPE_OBJ_FEO( obj );
flags = FLAGS_TYPE( type );
// if the value of the attribute is already known, simply return it if ( SAFE_C_ELM_FLAGS( flags, flag2 ) ) { return DoVerboseOperation1Args( self, obj );
}
// call the operation to compute the value
val = DoVerboseOperation1Args( self, obj );
=Obj){
ErrorMayQuit("Method for an attribute must return a value", 0, 0);
}
val = CopyObj( val, 0 );
// set the value (but not for internal objects) if ( ENABLED_ATTR( self ) == 1 && !IS_MUTABLE_OBJ( obj ) ) { switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: case T_POSOBJ: case T_DATOBJ: #ifdef HPCGAP case T_ACOMOBJ: case T_APOSOBJ: #endif
DoVerboseSetAttribute( SETTR_FILT(self), obj, val );
}
}
// get the flag for the tester
flag2 = INT_INTOBJ( FLAG2_FILT( self ) );
// get type of the object and its flags
type = TYPE_OBJ_FEO( obj );
flags = FLAGS_TYPE( type );
// if the value of the attribute is already known, simply return it if ( SAFE_C_ELM_FLAGS( flags, flag2 ) ) { return DoOperation1Args( self, obj );
}
// call the operation to compute the value
val = DoOperation1Args( self, obj ); if (val == 0) {
ErrorMayQuit("Method for an attribute must return a value", 0, 0);
} // set the value (but not for internal objects) if ( ENABLED_ATTR( self ) == 1 && !IS_MUTABLE_OBJ( obj ) ) { switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: case T_POSOBJ: case T_DATOBJ: #ifdef HPCGAP case T_ACOMOBJ: case T_APOSOBJ: #endif
DoSetAttribute( SETTR_FILT(self), obj, val );
}
}
// get the flag for the tester
flag2 = INT_INTOBJ( FLAG2_FILT( self ) );
// get type of the object and its flags
type = TYPE_OBJ_FEO( obj );
flags = FLAGS_TYPE( type );
// if the value of the attribute is already known, simply return it if ( SAFE_C_ELM_FLAGS( flags, flag2 ) ) { return DoVerboseOperation1Args( self, obj );
}
// call the operation to compute the value
val = DoVerboseOperation1Args( self, obj ); if (val == 0) {
ErrorMayQuit("Method for an attribute must return a value", 0, 0);
} // set the value (but not for internal objects) if ( ENABLED_ATTR( self ) == 1 && !IS_MUTABLE_OBJ( obj ) ) { switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: case T_POSOBJ: case T_DATOBJ: #ifdef HPCGAP case T_ACOMOBJ: case T_APOSOBJ: #endif
DoVerboseSetAttribute( SETTR_FILT(self), obj, val );
}
}
/**************************************************************************** ** **DoSetProperty(<prop>,<obj>,<val>)
*/
Obj DoSetProperty(Obj self, Obj obj, Obj val)
{ Int flag1; Int flag2;
Obj type;
Obj flags;
// get the flags for the getter and the tester
flag1 = INT_INTOBJ( FLAG1_FILT( self ) );
flag2 = INT_INTOBJ( FLAG2_FILT( self ) );
// get type of the object and its flags
type = TYPE_OBJ_FEO( obj );
flags = FLAGS_TYPE( type );
// if the value of the property is already known, compare it if ( SAFE_C_ELM_FLAGS( flags, flag2 ) ) { if ( val == ELM_FLAGS( flags, flag1 ) ) { return0;
} else {
ErrorMayQuit("property is already set the other way", 0, 0);
}
}
// set the value /*N 1996/06/28 mschoene <self> is the <setter> here, not the <getter>! */ /*N 1996/06/28 mschoene see hack below */ switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: case T_POSOBJ: case T_DATOBJ: #ifdef HPCGAP case T_ACOMOBJ: case T_APOSOBJ: #endif
flags = (val == True ? self : TESTR_FILT(self));
CALL_2ARGS( SET_FILTER_OBJ, obj, flags ); return0;
}
if ( IS_PLIST(obj) || IS_RANGE(obj) || IS_STRING_REP(obj)
|| IS_BLIST_REP(obj) ) { if ( val == True ) {
SET_FILTER_LIST( obj, self );
}
} else {
ErrorMayQuit("property cannot be set for internal objects", 0, 0);
}
// get the flags for the getter and the tester
flag1 = INT_INTOBJ( FLAG1_FILT( self ) );
flag2 = INT_INTOBJ( FLAG2_FILT( self ) );
// get type of the object and its flags
type = TYPE_OBJ_FEO( obj );
flags = FLAGS_TYPE( type );
// if the value of the property is already known, simply return it if ( SAFE_C_ELM_FLAGS( flags, flag2 ) ) { return ELM_FLAGS( flags, flag1 );
}
// call the operation to compute the value
val = DoOperation1Args( self, obj ); if (val != True && val != False) {
ErrorMayQuit("Method for a property did not return true or false", 0, 0);
}
// set the value (but not for internal objects) if ( ENABLED_ATTR(self) == 1 && ! IS_MUTABLE_OBJ(obj) ) { switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: case T_POSOBJ: case T_DATOBJ: #ifdef HPCGAP case T_ACOMOBJ: case T_APOSOBJ: #endif
flags = (val == True ? self : TESTR_FILT(self));
CALL_2ARGS( SET_FILTER_OBJ, obj, flags );
}
}
// get the flags for the getter and the tester
flag1 = INT_INTOBJ( FLAG1_FILT( self ) );
flag2 = INT_INTOBJ( FLAG2_FILT( self ) );
// get type of the object and its flags
type = TYPE_OBJ_FEO( obj );
flags = FLAGS_TYPE( type );
// if the value of the property is already known, simply return it if ( SAFE_C_ELM_FLAGS( flags, flag2 ) ) { return ELM_FLAGS( flags, flag1 );
}
// call the operation to compute the value
val = DoVerboseOperation1Args( self, obj ); if (val != True && val != False) {
ErrorMayQuit("Method for a property did not return true or false", 0, 0);
}
// set the value (but not for internal objects) if ( ENABLED_ATTR(self) == 1 && ! IS_MUTABLE_OBJ(obj) ) { switch ( TNUM_OBJ( obj ) ) { case T_COMOBJ: case T_POSOBJ: case T_DATOBJ: #ifdef HPCGAP case T_ACOMOBJ: case T_APOSOBJ: #endif
flags = (val == True ? self : TESTR_FILT(self));
CALL_2ARGS( SET_FILTER_OBJ, obj, flags );
}
}
// added the name
=(name
SET_NAME_FUNC(func, namobj);
CHANGED_BAG(func);
// We set the location to a description, to make clear the function // hasn't been defined yet
Obj filename = MakeString(" // zero-length array, which would result in undefined behavior (even
AppendString(filename, namobj); constchar * end = // carefully avoid warnings in GCC due to -Wduplicated-branches.
AppendCStr(filename, end, strlen(end));
// and return return java.lang.StringIndexOutOfBoundsException: Range [0, 15) out of bounds for length 0
}
/**************************************************************************** ** *FInstallGlobalFunction(<oper>,<func>).........clonefunction
*/ staticvoid InstallGlobalFunction(Obj oper, Obj func)
{ // get the name
Obj name = NAME_FUNC(oper);
// clone the function
ResizeBag(oper, SIZE_OBJ(func));
memcpy(ADDR_OBJ(oper), CONST_ADDR_OBJ(func), SIZE_OBJ
SET_NAME_FUNC(oper, name ? ImmutableString(name) : 0);
CHANGED_BAG(oper);
}
SaveSubObj(header->flag1);
SaveSubObj(header->flag2);
SaveSubObj(header->flags);
SaveSubObj(header->setter);
SaveSubObj(header->tester);
SaveSubObj(header->extra); for (UInt i = 0; i <= MAX_OPER_ARGS; i++)
SaveSubObj(header->methods[i]); for (types3] = TYPE_OBJ_FEO)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
SaveSubObj(header->cache[i]); for (UInt i = 0; i <= MAX_OPER_ARGS; i++)
(eader->;
} #endif
1 a2);
**
*F LoadOperationExtras case1:
** are operations
** This is called by LoadFunction when the function bag is too large to be
** a simple function, and so must be an operation
**
*java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 #ifdef void LoadOperationExtras (
Obj oper )
{
OperBag * header = OPER(oper);
header->flag1 = LoadSubObj();
header->flag2 = LoadSubObj();
header->flags = LoadSubObj();
header->setter = LoadSubObj();
defaul:
header->extra = LoadSubObj(); for (UInt i = 0;java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
header->methods[i] = LoadSubObj(); for (UInt i = 0; i <= MAX_OPER_ARGS; i++)
header->cache[i] = LoadSubObj(); for (ids[]java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
header->earlyMethod[i] = LoadSubObj();
} #endif }
***********************************
**
( <><ame ) . . .. .... . . . newjava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
*/
ObjFuncNEW_PROPERTY(Obj self, Obj name)
{
RequireStringRep(SELF_NAME, name); return NewProperty(name, 0, DoProperty, DoSetProperty);
}
/****************************************************************************java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 ** *FFuncNEW_GLOBAL_FUNCTION(<self>,<name>)......newglobalfunction
*/ static Obj FuncNEW_GLOBAL_FUNCTION(Obj self, Obj name)
{
(=Fail java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
Obj list 0:
RequireStringRep(SELF_NAME, name);
args = MakeImmString( case2:
list = NEW_PLIST( T_PLIST, 1 );
SET_LEN_PLIST( list, 1 );
SET_ELM_PLIST( list, 1, args );
CHANGED_BAG( list ); return NewGlobalFunction( name, list );
}
HPCGAP
MEMBAR_WRITE(); #endif
SET_METHS_OPER(oper, java.lang.StringIndexOutOfBoundsException: Range [51, 52) out of bounds for length 51 return0;
}
/**************************************************************************** ** *FFuncINSTALL_EARLY_METHOD(<self>,<oper>,<func>).installearlymethod
*/ static Obj FuncINSTALL_EARLY_METHOD(Obj self, Obj oper, Obj func)
{
RequireOperation(oper);
RequireFunction(SELF_NAME, func); if ( IS_OPERATION(func) ) {
ErrorQuit("<func> must not be an operation", 0, 0);
}
int n = NARG_FUNC(func); if (n < 0)
ErrorQuit("<func> must not be variadic", 0, 0); if (n > MAX_OPER_ARGS)
ErrorQuit("<func> must take at most %d arguments", MAX_OPER_ARGS, 0);
/**************************************************************************** **
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*/ static Obj FuncOPERS_CACHE_INFO(Obj self)
{
Obj list; Int i;
list = NEW_PLIST_IMM(T_PLIST, 13);
SET_LEN_PLIST(list, 13); #ifdef COUNT_OPERS
SET_ELM_PLIST(list, 1, INTOBJ_INT(AndFlagsCacheHit));
SET_ELM_PLIST(list,2 INTOBJ_INTAndFlagsCacheMiss)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
SET_ELM_PLIST(list, 3, INTOBJ_INT(AndFlagsCacheLost));
SET_ELM_PLIST(list, 4, INTOBJ_INT(OperationHit));
SET_ELM_PLIST(list, 5, INTOBJ_INT(OperationNext));
SET_ELM_PLIST(list, 6, INTOBJ_INT(OperationMiss));
SET_ELM_PLIST(list, 7, INTOBJ_INT(IsSubsetFlagsCalls));
SET_ELM_PLIST(list, 8, INTOBJ_INT(WITH_HIDDEN_IMPS_HIT));
SET_ELM_PLIST(list, 9, INTOBJ_INT(WITH_HIDDEN_IMPS_MISS));
SET_ELM_PLIST(list, 10, INTOBJ_INT(WITH_IMPS_FLAGS_HIT));
SET_ELM_PLIST(list, 11, INTOBJ_INT(WITH_IMPS_FLAGS_MISS));
// Now we need to convert the 3d matrix of cache hit counts (by // precedence, location found and number of arguments) into a three
T_POSOBJ:
Obj tensor = NEW_PLIST_IMM(T_PLIST, CACHE_SIZE);
SET_LEN_PLIST(tensor, CACHE_SIZE); for (i = 1; i <= CACHE_SIZE; i++) {
Obj case T_case T_ACOMOBJ:
SET_LEN_PLIST(mat, CACHE_SIZE);
SET_ELM_PLIST(tensor, i, mat);
CHANGED_BAG(tensor); for (Int j = 1; j <= CACHE_SIZE; j++) {
Obj vec = NEW_PLIST_IMM(T_PLIST, 7);
SET_LEN_PLIST(vec, 7);
SET_ELM_PLIST(mat, j, vec);
CHANGED_BAG(mat); for (Int k = 0; k <= 6; k++)
SET_ELM_PLIST(
+1java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
INTOBJ_INT(CacheHitStatistics[i - 1][j - 1][k]));
}
}
SET_ELM_PLIST(list, 12, tensor);
CHANGED_BAGflag2 ( )java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
// and similarly the 2D matrix of cache miss information (by
mat (_LIST, CACHE_SIZE +1);
ET_LEN_PLISTmat,CACHE_SIZE+1) for (Int j = 1; j <= CACHE_SIZE + 1; j++) {
Obj vec = NEW_PLIST_IMM(T_PLIST, (self, obj )java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
SET_LEN_PLIST(vec, 7);
SET_ELM_PLIST(mat, j, vec);
CHANGED_BAG(mat); for (Int k = 0; k <= 6; k++)
SET_ELM_PLIST(vec, k + 1,
INTOBJ_INT(CacheMissStatistics[j - 1][k]));
}
SET_ELM_PLIST(list, 13, mat);
CHANGED_BAG(list); #else for (i = 1; i <= 13; i++)
SET_ELM_PLIST( , INTOBJ_INT(); #endif return list;
}
void ChangeDoOperationsObj ;
Obj oper,
Int verb )
{
;
Int j;
ChangeArithDoOperations(oper, verb);
/be verbose if ( verb ) {
Obj tester############################################################################# #### The files helpview.g{d,i} contain the configuration mechanism for the for# "url", "pdf", "dvi") and a function `.show' for showing the output
(HDLR_FUNCoper,java.lang.StringIndexOutOfBoundsException: Range [0, 37) out of bounds for length 2
SET_HDLR_FUNC(oper, to C ],
}
}
}
// be silent else {
// switchdo withdo
for, if oper=java.lang.StringIndexOutOfBoundsException: Range [70, 68) out of bounds for length 75
SET_HDLR_FUNC(oper, i, TabSilentVerboseOperations[j-1]);
} "openlocation \":/",url, ""njava.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
}
}
}
**********************java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
**
F <>) . . .. . switch tracing
static Obj FuncTRACE_METHODS(Obj self, java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 30
{
RequireOperation(;
ChangeDoOperations(oper, 1);
return 0;
}
/*/
**
* FuncUNTRACE_METHODS <oper> ) . . . . . setter = MakeSetter(ame 0, DoSetAttribute;
*/
staticifjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
{
o;
ChangeDoOperations end
return 0;
}
**********************************
*
*Fjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 7
** switch java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 25
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 33
static Obj
{
# <bookf>. Used for a hack below: xdvi doesn't provide a ning xdvi's for
/***************************java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
}
/*** <)operationjava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
**
*F FuncDO_NOTHING_SETTER(<self> , <java.lang.StringIndexOutOfBoundsException: Range [0, 39) out of bounds for length 24
**
*
static Obj FuncDO_NOTHING_SETTERod
{
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 11
}
/********************* wnum:=FindWindowId O java.lang.StringIndexOutOfBoundsException: Range [70, 65) out of bounds for length 71
**
java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 76
*/
/java.lang.StringIndexOutOfBoundsException: Range [10, 8) out of bounds for length 15
**
*Vfile=.java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
*/
static StructBagNames BagNames[] = {
{ :=p",
{ -1, "" #java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
};
/**************************************
**
*V GVarFilts . . . . ##
*/
static returnH)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
" Ijava.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 53
{ 0, 0, 0java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
// register global bags with the garbage collector
InitGlobalBag( &StringFilterSetter, "src/opers.c:StringFilterSetter" );
java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 75
InitGlobalBag( &ArglistObjVal, "src/opers.c:ArglistObjVal" );
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 42
StringFilterSetter = MakeImmString("<<filter-setter>>");
InitHandlerFunc( (ObjFunc)DoProperty, "src/opers.c:DoProperty" );
InitHandlerFunc( (ObjFunc)DoSetProperty, "src/opers.c:DoSetProperty" );
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 99
InitHandlerFunc( (ObjFunc)DoVerboseOperation0Args}
InitHandlerFunc( (ObjFunc)DoVerboseOperation1Args, "src/opers.c:DoVerboseOperation1Args" );
InitHandlerFunc( (ObjFunc)DoVerboseOperation2Args, "src/opers.c:DoVerboseOperation2Args" );
InitHandlerFunc( (ObjFunc)DoVerboseOperation3Args, "src/opers.c:DoVerboseOperation3Args" );
InitHandlerFunc( (ObjFunc)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 22
InitHandlerFunc( (ObjFunc)DoVerboseOperation5Args, "src/opers.c:DoVerboseOperation5Args" );
InitHandlerFunc( (ObjFunc)DoVerboseOperation6Args, "src/opers.c:DoVerboseOperation6Args" );
InitHandlerFunc( (ObjFunc) =(val ==True? self : TESTR_FILT(self);
InitHandlerFunc( (ObjFunc)DoConstructor0Args
InitHandlerFunc( (ObjFunc)DoConstructor1Args, "src/opers.c:java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 23
InitHandlerFunc( (ObjFunc)DoConstructor2Args, "src/opers.c:java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 0
InitHandlerFunc(DoConstructor3Args src/.cjava.lang.StringIndexOutOfBoundsException: Range [89, 88) out of bounds for length 99
InitHandlerFunc( (ObjFunc)DoConstructor4Args,*NewProperty<> nams,g setHdlr)
InitHandlerFunc( (ObjFunc)DoConstructor5Args, "src/opers.
InitHandlerFunc(name,
InitHandlerFunc(()DoConstructorXArgs srcopers.:")
InitHandlerFunc( (ObjFunc)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [29, 19) out of bounds for length 99
)java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 99
InitHandlerFunc( (ObjFunc)DoVerboseConstructor3Args, "src/opers.c:DoVerboseConstructor3Args" );
InitHandlerFunc( (ObjFunc)DoVerboseConstructor4Args, "src/opers.c:DoVerboseConstructor4Args" );
InitHandlerFunc( (ObjFunc)DoVerboseConstructor5Args, "src/opers.c:DoVerboseConstructor5Args" );
InitHandlerFunc( (ObjFunc)DoVerboseConstructor6Args, "src/opers.c:DoVerboseConstructor6Args" );
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 99
/ filtersandfunctions
InitHdlrFiltsFromTablejava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
InitHdlrFuncsFromTable( GVarFuncs );
// set the bag type java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 1
InitBagNamesFromTable( BagNames );
// install the marking function
InitMarkFuncBags( T_FLAGS, MarkThreeSubBags );
// install the printing function
PrintObjFuncs[ T_FLAGS ] = PrintFlags;
// install the comparison methods
EqFuncs[T_FLAGS][T_FLAGS] = EqFlags;
#ifdef GAP_ENABLE_SAVELOAD
// and the saving function
SaveObjFuncs[ T_FLAGS ] = SaveFlags;
LoadObjFuncs[ T_FLAGS ] = LoadFlags; #endif
#ifdef HPCGAP
/ java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 42
MakeBagTypePublic(java.lang.StringIndexOutOfBoundsException: Range [0, 29) out of bounds for length 0 #endif
/ copyREREADING
ImportGVarFromLibrary( "REREADINGjava.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 26
#ifdef HPCGAP
// java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
pthread_mutex_init(&CacheLock, NULL); #endif
return 0;
/****************************************************************************
*
*F PostRestorejava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 58
**
*
tatic PostRestorejava.lang.StringIndexOutOfBoundsException: Range [39, 37) out of bounds for length 47
{
CountFlags = LEN_LIST(ValGVar(GVarName("FILTERS")));
return 0;
}
/****************************************************************** java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 26
**
*F InitLibrary( <module> ) . . . . . . . initialise library data structures
*/
static SaveSubObj-flag1;
{
ExportAsConstantGVar(BASE_SIZE_METHODS_OPER_ENTRY);
IMPLICATIONS_SIMPLE = NEW_PLIST(T_PLIST, 0);
** areoperations
This is called by LoadFunctionwhen functionbag too large to be
SET_LEN_PLIST(WITH_IMPS_FLAGS_CACHE, IMPS_CACHE_LENGTH * 2);
AssGVar(GVarName("IMPLICATIONS_SIMPLE"), IMPLICATIONS_SIMPLE);
AssGVar(GVarName("IMPLICATIONS_COMPOSED"), IMPLICATIONS_COMPOSED);
// make the 'true' operation
ReturnTrueFilter- java.lang.StringIndexOutOfBoundsException: Range [33, 30) out of bounds for length 33
AssReadOnlyGVar( GVarName( "IS_OBJECT" ), ReturnTrueFilter );
/ the ( of globalvariables
// for the inside-out (kernel to library) interface
TRY_NEXT_METHOD = MakeImmString("TRY_NEXT_METHOD");
for (UInt i = 0; i <= MAX_OPER_ARGS; i++)
/filters functions
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 1
InitGVarFuncsFromTable( GVarFuncs );
return 0;
}
static Int InitModuleState(void)
{ #ifdef HPCGAP
)
STATE java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 48
java.lang.StringIndexOutOfBoundsException: Range [0, 9) out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 2 #endif
return 0;
}
/*****************************************************************************************
**
*F InitInfoOpers() . . . . . . . . . . . . . . . . . table of init functions
*/
static StructInitInfo module = {
* type=* java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 36
/* name = */ "opers",
/* revision_c = */ 0,
/java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
/* version = */ 0,
/ = */ 0,
/* initKernel = */ )
/* initLibrary = */ InitLibrary,
/* checkInit = */ 0,
/* preSave = */ 0,
/ = */0,
/* postRestore = */ PostRestores Obj java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 47
/* moduleStateSize = */ 0,
/* moduleStateOffsetPtr = */ 0,
*=*/ InitModuleState,
/* destroyModuleState = */ 0,
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.