Overloading relational operators separately; thoughts?

rikki cattermole via Digitalmars-d digitalmars-d at puremagic.com
Thu Sep 29 05:57:04 PDT 2016


Me and Cauterite were toying with the idea of AST macros but in a 
completely new form a while ago.

Below is the usage of it.

Something you'll notice about it is that it could turn the asm block 
into a library solution (which is clearly what we'd want anyway). Not to 
mention Linq style queries.

In theory it shouldn't be too complex to implement since you are only 
doing basic checks to determine if to parse the given statement / block 
to a rewriter function.

```D
void main() {
     // \/ parsed by iasm.c by matches {}'s and sending contents to it
     asm {
         ...
     }

     import linq;
     @Linq
     DataSource source = ...;
     Tree[] trees = source.trees.where(name = "abc").limit(20);

     import Assembly_x86;

     asm {
         ...
     }
}

struct Linq {
     string __ast(OnType, ExpectedType)(string statement) {
         assert(statement == "source.trees.where(name = "abc").limit(20);");
         static assert(OnType == DataSource);
         static assert(ExpectedType == Tree[]);
     }
}

// Assembly_x86.d

struct X86 {}
struct ASM {

     string __ast(OnType, ExpectedType)(string statement) {
         assert(statement == "asm {\n        ...\n    };");
         static assert(OnType == X86);
         static assert(ExpectedType == void);
     }
}

@ASM
X86 asm;
```


More information about the Digitalmars-d mailing list