Bug 2868 – provide runtime facility for reflection. opDot compiletime dispatch facility

Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2009-04-21T06:54:00Z
Last change time
2015-06-09T01:27:44Z
Keywords
patch
Assigned to
bugzilla
Creator
davidl

Attachments

IDFilenameSummaryContent-TypeSize
333logthe patch for the two semantic proposalstext/plain4966

Comments

Comment #0 by davidl — 2009-04-21T06:54:49Z
1. modify the D2 opDot semantic from forwarding to compiletime opDot function calling 2. modify the D2 __traits(getallmembers) to return tuples. in the patch, it's currently organized as: (member_name, member_symbol) pair Thus, by the 1st change we can have following code working: import std.stdio; class c { B opDot(U:immutable(char)[], T...)(U methodname, T t) { writefln("god it works ", methodname); return new B(); } void opAdd(int j) { } void test() { } } class B { int i; B opAssign(int k){ i=k; return this; } } void extmethod(c v,int j){writefln("extmenthod!");} char[] v1; void func(char[] v, ...){} void main() { c v=new c; v.opDot("jesus", 3,4); v.test(); v.dynamicmethod(3,4); //v.qq(1,2) = 5; writefln((v.qq(1,2) = 5).i); v.extmethod(3); } By the second change we can have the following code working: import std.stdio; class D { int tt; alias tt this; this() { } ~this() { } int foo(int) { tt++;writefln("god you called me?");return 0; } void foo() { } int vvv; } class M:D { void callfunc() { pragma(msg, __traits(allMembers, D)[0]); pragma(msg, __traits(allMembers, D)[2]); pragma(msg, __traits(allMembers, D)[6]); __traits(allMembers, D)[7](1); writefln("tt should be 1 now ",tt); } } void main() { auto b = ["__ctor","__dtor","foo","toString","toHash","opCmp","opEquals","Monitor","factory"]; M subd= new M; subd.callfunc(); writefln(subd.tt); } The second change provides richer functionality while we can still achieve the old result by templates wrapping the __traits. original opDot semantic can be simulated by the 1st and 2nd change together. Thus I think the semantic change provides richer functionality while on the other hand we can still mock the old behavior.
Comment #1 by davidl — 2009-04-21T06:56:16Z
Created attachment 333 the patch for the two semantic proposals here's the patch against dmd2.028
Comment #2 by davidl — 2009-04-21T07:00:26Z
It's an enhancement.
Comment #3 by clugdbug — 2010-05-07T00:23:23Z
opDispatch was added in DMD2.037.