freenode/#clasp - IRC Chatlog
Search
14:08:52
Bike
i think for bit4 i'll have to do some c++ nonsense with references so let's fix bugs first
14:16:57
drmeister
This is difficult to debug - previously I've asked stassats for guidance on how to debug when this happens.
14:18:47
Bike
well, i can try to fix the string copy thing kpoeck identified, that probably comes up in slime
14:18:57
drmeister
I can get a backtrace using "Activity Monitor" - it's not crazy deep like it usually is.
14:50:52
Bike
yeah make-vector is fucked up for a bunch of types. but make-simple-vector-[whatever] still works fine so... mysteries
15:01:12
Bike
drmeister: can i get a second set of eyes here? this code works https://github.com/clasp-developers/clasp/blob/dev/src/core/array.cc#L817-L824 but the basically identical code starting around 888 does not
15:03:03
Bike
i uh, wish that would have caused a type error and i don't know why it's not, but oh well, let's try that fi
15:07:24
Bike
there's no automatic conversion from like, T_sp to uint32_t, right? that would be stupid
15:09:10
drmeister
You are calling the default constructor of the unknown_type and assigning it to a variable that is clearly the wrong type. The compiler will spit up an error and tell you what the type is of unknown_type.
15:10:42
Bike
i mean here's what's happening. in make-vector we have T_sp initialElement. then i was calling simple::make(dimension, initialElement, initialElementSuppliedP)
15:11:28
Bike
which has two definitions of make, one that takes a single const std::string&, and one that takes size_t, value_type, bool, size_t, const value_type*, bool
15:13:54
kpoeck
so in https://github.com/clasp-developers/clasp/blob/dev/src/core/array.cc#L889-L891 init should be used instead of initialElement?
15:37:44
Bike
"error: cannot initialize a variable of type 'int ***' with an rvalue of type 'core::SimpleBaseString_O::value_type' (aka 'unsigned char')" well that seems pretty normal
15:40:08
Bike
it doesn't seem to be the case here - i mean unsigned char is what i'd expect - so i still don't really get it
16:10:37
drmeister
I pulled the changes and build iclasp-boehm - but slime still doesn't connect (sigh).
16:26:31
Bike
so i wanted operator[] to work on bit and sub-byte vectors. but operator[] returns a reference, and i can't really get a reference to a part of a word
16:26:48
Bike
C++ has a bitset object with this same problem, and what it does is define an entirely new kind of object that represents a reference to a bit
16:52:53
Bike
i wanted to use [] so it could use the same template algorithms that work for our more normal vector types
17:02:31
Bike
it also might be a little weird that the underlying GCBitUnitArray's operator[] returns words instead...
17:06:55
Bike
i mean what i'd be doing here is defining an inner class in GCBitUnitArray that has a pointer to inside the word vector, and when you do [] it'll make one of these things
17:09:22
drmeister
It will be two words, a pointer to the inside of the array and an index into a word.
17:09:27
Bike
incidentally, you can't define two functions with the same name differing only in return type, but if they differ in const that's fine? this language is weird
17:09:44
drmeister
The pointer will be on the stack or in a register - so it should keep the object alive and pinned in memory.
17:09:44
Bike
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/bitset#L802-L808 here's gcc's, with characteristic unclarity
17:17:42
Bike
i mean what i want to do is write a[i] = b[j], and have it result in something like a_bits[i_] = (a_bits[i_] & ~mask) | ((b_bits[j_] & mask) << shift). i don't know if the compiler can reduce a bunch of reference stuff to that
19:12:47
Bike
if i compile the initial fill value thing by itself i get the results i expect... i'm not sure what would even cause this
19:12:58
Bike
if it was shifted by two, i'd assume something silly about fixnums. but it's shifted by one