freenode/#clasp - IRC Chatlog
Search
16:00:20
drmeister
I'm not sure about the NIL? - you said a list terminates with an ATOM-CST? What is that for?
16:00:52
drmeister
Uh - I don't understand the question "Great! And how do you distinguish between the two positions for the A? "
16:01:04
beach
If you use a hash table, then the second A will delete the source position of the first, no?
16:01:53
beach
That was my initial question. Do you plan to modify your standard reader macros to generate CSTs?
16:01:55
drmeister
I'm not letting you do all this work and then not implement the best reader that I can to take advantage of it. :-)
16:02:25
Bike
couldn't you have a tracking-reader that calls the normal compiler macros and then wraps the results?
16:04:02
Bike
No, I mean have a special READ function that makes CSTs with the results of reader macros.
16:04:04
drmeister
I think it will have to handle it somehow and probably lose source tracking for custom reader macros.
16:04:39
beach
Bike: Yes, I understand, but how do you identify the result of the reader macro with the source locations?
16:04:54
Bike
So (type-of (read-from-string "(a)")) => CONS like usual, but then (tracking-read-from-string "(a)") is like (make-cst '(a) the-source-location)
16:05:36
beach
Bike: So what if you have the input [a] and the reader macro returns (((((((((((((((((((((a)))))))))))))))))))))?
16:06:45
Bike
you could have a *read-tracking* variable, and have READ return CSTs when it's T... but then a reader macro might want to manipulate the result of read somehow
16:12:04
beach
I myself plan to do something similar to what I do with the "intelligent macro expander", i.e. I start from a "parse result" (that has all the results from recursive reads in the order that they were read, including source information) and a resulting expression. Then I try to identify sub-expressions with the children in the parse result, starting with lists. This will basically do the same as a hash table would. Then, I process
16:12:04
beach
atoms in a similar way. Then, if there are remaining sub-expressions with no corresponding parse-result child, I try to find it deeper in the descendants.
16:12:57
beach
I have already modified the SICL reader so that it can be customized to return parse results in addition to expressions.
16:13:20
drmeister
That sounds a lot like what I was trying to do from the start. Only now the weak key hash table only has to deal with what is going on in one reader macro.
16:13:27
beach
I do not plan to modify the standard reader macros. The advantage is that I can handle some custom reader macros as well.
16:18:12
beach
The simple, most common, case for this parse-result processor will of course be that there are as many sub-expressions as parse-result children, each child has a sub-expression in it, and the order is preserved.
17:31:36
shiho
drmeister, I got the error... "chem::EnergyNonbond_O::constructExcludedAtomListFromAtomTable(gctools::smart_ptr<chem::AtomTable_O>, gctools::smart_ptr<chem::ForceField_O>, bool)", referenced from:
17:31:47
shiho
chem::EnergyFunction_O::generateNonbondEnergyFunctionTables(bool, gctools::smart_ptr<chem::Matter_O>, gctools::smart_ptr<chem::ForceField_O>, gctools::smart_ptr<core::T_O>, bool) in 252.thinlto.o
17:32:02
shiho
ld: symbol(s) not found for architecture x86_64 clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)
17:33:04
drmeister
That happens if the declaration in the header file doesn't have a matching function definition in the .cc file
17:33:32
drmeister
If there Is there a constructExcludedAtomListFromAtomTable in the energyNonbond.cc file?
18:37:48
Bike
beach: cst-to-ast refers to a cst:parse-macro that i can't find. is that to-do? does it mean the cleavir-code-utilities:parse-macro is going to be obsoleted? i ask because i was about to file an issue about it
18:44:14
Bike
i was just going to note that the conditions are thin, rather than an actual error or anything, so i'll probably leave it
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.