Le 2011-03-07 à 10:14, Benjamin Shropshire a écrit : > On Mar 6, 2011 3:37 PM, "Michel Fortin" <[email protected]> wrote: >> >> But to give you an idea of what I'm doing inside DMD: I had to change the >> backend a little so it can emit special Objective-C-reserved segments with >> custom alignment, I had to change the parser to add a new keyword >> (__selector) and a syntax for specifying selectors and even to parse the >> "extern(Objective-C)" construct, I had to make strings literals implicitly >> convertible to Objective-C's NSString literals and made some other type >> implicitly convert to equivalents, I had to make 'static' functions virtual >> functions belonging to the Objective-C metaclass (whether I should have >> invented a new keyword for that is debatable), I had to create an implicit >> nested class named "Class" in each class representing the metaclass and to >> add the built-in property "this.class" to access the metaclass, I had to >> implement dynamic casts of Objective-C objects, and a few other ticks like >> that. > > Aside from the parser changes, how much of that could be done with keyhole > overrides (e.g. the name mangleing function and variable/member layout) and > an extra set of augmentation passes (e.g. adding the nested Class and > accessor)?
I don't think I could go very far with that. Look at all the files I touched up to now, it should give you an idea: <https://github.com/michelf/dmd/compare/f8ed1b3...d-objc> The funny thing is that none of the above is really *required* to manipulate and create Objective-C objects. All you need is extern(C) to interact with the Objective-C runtime and some templates to make things easier and more type-safe. That's what I did with the D/Objective-C bridge. The problem is that it doesn't scale very well when you have large Objective-C APIs. <http://michelf.com/weblog/2010/dobjc-dead-end-start-anew/> -- Michel Fortin [email protected] http://michelf.com/ _______________________________________________ dmd-internals mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/dmd-internals
