Parse File at compile time, but not embedded
Joerg Joergonson via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Jun 11 18:39:11 PDT 2016
On Saturday, 11 June 2016 at 13:03:47 UTC, ketmar wrote:
> On Friday, 10 June 2016 at 18:47:59 UTC, Joerg Joergonson wrote:
>>> In any case, this is impossible. D has no such concept as
>>> "compile-time-only" values, so any usage of a value risks
>>> embedding it into the binary.
> sure, it has.
>
> template ParseData (string text) {
> private static enum Key = "XXXyyyZZZ33322211\n";
> private static enum TRet = "int data = 3;";
> private static enum FRet = "int data = 4;";
> static if (text.length >= Key.length) {
> static if (text[0..Key.length] == Key)
> enum ParseData = TRet;
> else
> enum ParseData = FRet;
> } else {
> enum ParseData = FRet;
> }
> }
>
> void main () {
> mixin(ParseData!(import("a")));
> }
>
>
> look, ma, no traces of our secret key in binary! and no traces
> of `int data` declaration too!
This doesn't seem to be the case though in more complex examples
;/ enums seem to be compile time only in certain conditions. My
code is almost identical do what you have written except
ParseData generates a more complex string and I do reference
parts of the "Key" in the generation of the code. It's possible
DMD keeps the full code around because of this.
More information about the Digitalmars-d-learn
mailing list