-
-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Macro
(define-syntax (make-variable stx)
(syntax-parse stx
[(_)
#'"var=var"] ; some placeholder
[(_ name:id)
#'(as-variable (symbol->string 'name) name)]
[(_ str:string)
#'(as-variable str str)]
[(_ ((~literal quote) sym))
#'(as-variable (symbol->string 'sym) 'sym)]))
If name is an identifier, then it is the name of variable and the value is what that name resolves to. If name is a string or a symbol then it is passed to both name and value of as-variable
(symbol is converted to a string).
This probably makes more sense in the context of the as-variable
function, described here: https://xgqt.gitlab.io/racket-ebuild/ebuild/ebuild-exported.html#%28def._%28%28lib._ebuild%2Febuild..rkt%29._as-variable%29%29
Examples
> (make-variable "this_variable_will_probably_change")
-> "this_variable_will_probably_change=\"this_variable_will_probably_change\""
> (define Z "Zzz...")
> (make-variable Z)
-> "Z=\"Zzz...\""
You can look into the racket-ebuild
source code and see how this is exactly used there, but to summarize: it is later concatenated with other strings to make a complete POSIX-like shell script and output it into a file (https://gitlab.com/xgqt/racket-ebuild/-/blob/master/ebuild/ebuild.rkt#L142).
More examples in the macro's tests: https://gitlab.com/xgqt/racket-ebuild/-/blob/master/ebuild/private/ebuild/variable.rkt#L85
Before and After
- Code Cleaning/Tweaks :
syntax-parse
makes it possible to not only pass a identifier but also a symbol or a string.
Before the rewrite with syntax-parse
a simple define-syntax-rule
macro was used.
It looked like this: https://gitlab.com/xgqt/racket-ebuild/-/blob/2286bd456f0b71cf715624123bedd91b2bba35ad/ebuild/private/ebuild/variable.rkt#L49
Was changed with commit: https://gitlab.com/xgqt/racket-ebuild/-/commit/78a2a2665ac90fc6ef0316e981e0cabb8ed85c20#696be2c6ced1eb02f3ac07043af0f9494a2546f1_49_59
Licence
The code I submit, and only this code here, I re-release here under the MIT
license, for the growth of syntax-parse examples, that's why I allow to use a more permissive license. The rest of racket-ebuild
still stays under the GPLv3
license.
The text of this GitHub issue I release under Creative Commons Attribution 4.0 International License
.