freenode/#clasp - IRC Chatlog
Search
20:46:18
drmeister
The error message from bind-va-list is a little "off" - it reports the wrong number of arguments for the function that contains the bind-va-list. I'm not sure what it should report.
20:47:49
drmeister
(defun foo (core:&va-rest r) (ext:bind-va-list (x &optional (y :testing)) r (list x y)))
20:48:05
Bike
well, first off since we're using this for methods that will actually be basically correct
20:50:54
Bike
but in general we'd probably want a message like "Too many/few arguments for lambda list [lambda list]: [human readable vaslist]"
20:52:05
drmeister
When you wrote the bind-va-list special operator for cclasp - what was left? The translate-simple-instruction for bind-va-list-instruction?
20:53:38
Bike
i have to figure out how clasp loads a fasl, and do that with perhaps a little more machinery
20:54:45
drmeister
When you wrote the bind-va-list special operator for cclasp - what was left? The translate-simple-instruction for bind-va-list-instruction?
20:56:21
drmeister
I'm trying to change gears and figure out how to write that instruction translator
20:57:28
Bike
the instruction has the lambda list in a slot, so do like (cc-hir:lambda-list instruction)
21:00:12
drmeister
So I'll take the vaslist and alloca a local va_list and remaining_nargs size_t , copy the stuff out of the vaslist into them and then generate code to ... the outputs?
21:00:52
Bike
yeah, like if your lambda list is (a &optional b) the outputs will be a, b, b-p i think
21:12:38
Bike
so it has enough fundamentals that i can compile and load a file with defmacro defun, and then defun factorial, and factorial works
21:13:00
Bike
and what's left to do is add more standard functions; it's missing a ton that implicitly refer to the environment
22:00:25
drmeister
So here... https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/cleavir/translate.lisp#L340
22:01:03
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/cleavir/translate.lisp#L327
22:10:19
drmeister
What are inputs again when translating instructions? Are they datums? Or are they llvm Value's already. Outputs look like I have to run them through translate-datum.
22:12:14
Bike
the inputs and outputs of the instruction are hir data, but the inputs and outputs passed as arguments to the translator are llvm locations
22:56:35
Bike
and (or (landing-pad-for-cleanup function-info) nil) doesn't need the or, i don't think
0:00:30
drmeister
bclasp and cclasp have different ways of representing the outputs - those are the 'datum's
0:01:09
drmeister
To make the code general, you pass a 'translate-datum' function object that takes one argument, the datum and returns an alloca
0:02:07
drmeister
In cclasp - but in bclasp - definitely datums - because I was not correct in what I said.
0:02:43
drmeister
In bclasp it returns an llvm value that when evaluated returns an address in memory where the output can be written.
0:03:57
Bike
basically i'm wondering if compile-lambda-list-code is going to work when you're already passing llvm values
0:04:35
drmeister
This is a call to the "lexicalValueReference" intrinsic - which returns a pointer to an entry in an activation frame.
0:04:51
drmeister
The optimization pass I wrote then converts that into a reference to an alloca in the stack frame.
0:06:14
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/cleavir/translate.lisp#L336
0:07:08
drmeister
For cclasp bind-va-list - I may end up using something else if it signals an error because the datums are not what I expect.
0:07:36
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/cleavir/convert-special.lisp#L318
0:34:11
drmeister
It is primarily to call C++ methods, regular and virtual - there is a way to connect into it from Common Lisp.
0:34:12
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/modules/clang-tool/clang-tool.lisp#L662
0:39:30
drmeister
They are basically generic functions specialized on one argument with no :before :after :around methods, no call-next-method - bare bones.
0:42:15
drmeister
Hmm clasp-cleavir::*global-optimize* -> ((SAFETY 1) (SPEED 1) (SPACE 1) (COMPILATION-SPEED 1) (DEBUG 3))
0:45:29
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/cleavir/convert-special.lisp#L328
0:48:40
drmeister
I see this: https://github.com/Bike/SICL/blob/master/Code/Cleavir/Generate-AST/generate-ast.lisp#L531
0:53:01
drmeister
No applicable method for CLEAVIR-AST:CHILDREN with arguments of types BIND-VA-LIST-AST.
0:55:47
drmeister
Wrong package I think. It's in :clasp-cleavir-ast and it should be in :cleavir-ast
1:01:10
drmeister
I changed the (defmethod children ((ast bind-va-list-ast)) ...) to (defmethod cleavir-ast:children ...)
1:09:48
drmeister
It fixes the: No applicable method for CLEAVIR-AST:CHILDREN with arguments of types BIND-VA-LIST-AST. problem
1:11:10
drmeister
But don't worry about it tonight. I'm going to move this into the branch where I have the CLOS changes and try it with bclasp
3:51:20
drmeister
Bike: You asked about debugging and printing variables - sometimes it pays to start dumping likely registers.
3:51:54
drmeister
I was trying to figure out something/anything about a ENSURE-GENERIC-FUNCTION call.