4 ms·
For which language? In the case of systems like Clojure, if you're introducing new toplevel bindings you're not going to get completion without direct interacti
by KirinDave 9y ago
For which language? In the case of systems like Clojure, if you're introducing new toplevel bindings you're not going to get completion without direct interactive evaluation (naturally). But everything short of that should be well-formed.
In many cases with common macros I'd add decls for Cursive Clojure + Idea to let me autocomplete introduced bindings. For example, I helped my editor understand unique structure, e.g.,
(defauthedendpoint get-frobnaz [request user]
...re<tab>quest)
- joshuamorton 9y agoC/C++. In the general case, I don't believe its possible to resolve macros without linking.
- KirinDave 9y agoActually, I'm not sure. If we're referring to the C pre-processor here, can't we always just run it through before symbolizing? I guess that without the right environment ifdef stuff falls out, but I dunno what to tell you there other than making builds contingent on the environment is a sketchy practice.
- joshuamorton 9y agoSo, say I have this: #include a.h #include b.h #include c.h MACRO(varname) welp.
- KirinDave 9y agoSince the include chain has to terminate, can't we just run the pre-processor over every file before we index it? Seems, um, like a pretty reasonable idea to me if you care about C-style macros (I sure don't.)
- majewsky 9y agoIt may be sketchy, but you may not have a choice. If you have a Qt application (written in C++) which needs to use a platform-specific API to do some magic stuff with a window, there's a method on the window to get the handle that the platform's GUI library offers. Of course that's going to be dependent on the environment because each environment has an entirely different GUI library (e.g. Cocoa only exists on macOS, not on Windows or Linux or Android).
- swift 9y agoI can't parse this in a way that it makes sense; I suspect you're mixing up some terminology. I'm guessing you mean that you need access to all transitively included headers to know a macro's definition. That's certainly true, but it's not linking, which involves resolving symbols in the object files that are the output of the compiler. The C preprocessor logically runs before the compiler; its output forms the compiler's input. You can run it without running the compiler at all.
- joshuamorton 9y agoAck, you're correct.