freenode/#clasp - IRC Chatlog
Search
18:50:57
jackdaniel
drmeister: where is clasp's function `builder' defined? I have a weak connection here, so I'm not very inclined to clone whole repository to grep it (hence the question)
18:52:31
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/cmp/cmpbundle.lsp#L263
18:53:13
jackdaniel
OK, that's all I needed to know (I want to make a pull request to ASDF, but that part of code is (or ecl clasp), so I wanted to make sure I won't break something
19:02:25
porky11
the problem is it stops after this message: Checking for library ['gmpxx', 'gmp'] : no
19:03:33
Bike
do you have gmp installed? it has the library https://www.archlinux.org/packages/core/x86_64/gmp/
19:25:05
drmeister
porky11: It's running a test to see if it can link a file against the gmpxx and gmp library - it can't find them - so gmp/gmpxx aren't installed properly.
19:55:29
Shinmera
Arch also has the unfortunate policy of often not shipping the static library variants of libraries.
20:02:49
Bike
drmeister: what is the format of bclasp conditions? i'd like to change #'build-failure to print something more useful than #(SIMPLE-ERROR #slots(3)) or whatever, if possible
22:23:18
Bike
drmeister: i could be wrong, but it seems like the primitive 'function' type does not include several functions, or actually any function i've tried yet
23:43:04
drmeister
There was a bit of an issue with that because Instance_O inherits from Function_O and there are some classes that inherit from Instance_O and other classes - that confuses the topology sort for header stamp values.
23:46:35
Bike
well, i tried (typeq #'documentation function), (typeq #'+ function), they were both false. so something's weird.
23:54:46
drmeister
It occurs to me now that there is an issue here. Instance_O inherits from Function_O. Generic functions are instances of the C++ Instance_O class - (typeq <a-gf> 'function) --> only true if header value matches the range for Function_O and <a-gf>->is_gf indicates that it is a generic function.
23:56:19
drmeister
I did push the code to create the hash table that maps type symbols to header value ranges
23:57:12
Bike
also, like i mentioned, it doesn't just fail for generic functions. it says that a closure-with-slots isn't a function either.
23:57:58
drmeister
It should say that all instances are functions right now - but it's doing the opposite - so there's more than one thing wrong.
23:58:29
Bike
it builds the cclasp image, then while building modules it fails because it says a function isn't a function.
23:59:10
drmeister
I've been a bit out of things and doing chores the last couple of days. I'll get back to work.
0:55:11
Bike
i had to put some fairly complicated code in cclasp to handle arbitrary types, so i thought there could be a problem.
0:55:24
Bike
however, it looks like a cclasp typeq is compiled into a headerq instruction with the correct range.
0:57:59
Bike
the translator for headerq uses the exact same function as bclasp does, compile-header-check in cmp/compiler.lsp which you saw before.
1:06:25
Bike
of course... i am using bclasp+cleavir. maybe it goes differently in cclasp proper? representationally i mean.
2:28:41
Bike
(if (cmp::typeq #'list function) t nil) does the bclasp typeq, which seems to work but only handles primitive types
2:29:21
Bike
(if (cleavir-primop:typeq #'list function) t nil) for the cclasp one (only works with cleavir compilation, obviously, so like (clasp-cleavir:cleavir-compile nil '(lambda (x) (if (cleavir-primop:typeq x function) t nil)))
2:41:37
drmeister
This isn't very auspicious (compile 'foo '(lambda () (if (cmp::typeq #'list function) nil t)))
2:48:32
drmeister
I'll generate code to handle that case. Is there any subtype of function that you want to use with typeq?
3:38:17
drmeister
There's no code for the general test - there is code for a fixnum test when I use that.
3:45:12
drmeister
headerq-instruction is the one that checks general objects by checking the header - correct?
3:45:31
Bike
i guess maybe it should test generalp first, but if there's no test at all that doesn't seem like the real problem
3:45:39
Bike
https://github.com/drmeister/clasp/blob/dev-typeq/src/lisp/kernel/cleavir/translate.lisp#L741-L746 it should hit this (and i think it does)
3:46:12
Bike
and that goes to https://github.com/drmeister/clasp/blob/dev-typeq/src/lisp/kernel/cmp/compiler.lsp#L562-L580
3:51:47
drmeister
https://usercontent.irccloud-cdn.com/file/JurTqArj/module-00007-hir-pre-mir.dot.pdf
3:52:03
drmeister
(clasp-cleavir:cleavir-compile 'isfunc '(lambda (x) (if (cleavir-primop:typeq x function) t nil)) :debug t)
4:10:04
drmeister
I didn't check - but there is only one generator for this IR and it works in bclasp
4:10:56
drmeister
It checks the tag and then the header value against the min/max header value ranges for function
4:19:23
drmeister
It's clearly being removed. For some reason llvm thinks the test will always be NIL.
4:26:36
drmeister
https://usercontent.irccloud-cdn.com/file/WiTC72Is/cfg.FN_COMMON-LISP-USER%3A%3AISFUNC.dot.pdf
5:13:25
drmeister
::notify Bike I found the problem. You need to %load the first input (header value) - otherwise you are working with an aligned pointer (address of the header) and the ptrtoint will cheerfully convert that to an i64 and fail silently.
6:14:41
drmeister
::notify Bike I'm trying to fix the generic-function test at the same time - that will take another hour probably.