[cfe-dev] [RFC] Preliminary patch to support MSVC __declspec(property)

endlessroad1991 at gmail.com endlessroad1991 at gmail.com
Thu Dec 6 20:41:57 PST 2012


Yes, if we put it in CodeGen, we still have to do much work which is Sema's
responsibility, and that's ugly.

I looked into pseudo objects and ObjC property implementation.I see that
set is handled in Sema::BuildBinOp(which calls
Sema::checkPseudoObjectAssignment), and get is handled in
Sema::CheckPlaceHolder, which is called in many places. And we are sure
that L-Value property(thus set) won't be rewritten to getter call,
because Sema::CheckPlaceHolder will only handle R-Value situations.

Are these "deductions" correct? If so, I will reimplement property using
pseudo objects.
Thanks for the info!



On Fri, Dec 7, 2012 at 9:30 AM, John McCall <rjmccall at apple.com> wrote:

> On Dec 6, 2012, at 9:52 AM, endlessroad1991 at gmail.com wrote:
> > Hey guys, I've worked out a preliminary patch to support MSVC
> __declspec(property), based on 3.2RC2.
> > Patch and a simple test cpp file attached. Please compile the test case
> with -fms-extensions.
> >
> > Current status:
> > - Support getter/setter
> > - Support template (see attached test file)
> > - No support for +=, -=, etc
> > - No support for implicit type conversion for arguments of getter/setter
> functions
> >
> > Brief introduction on implementation:
> > 1. Let Parser parse property declaration.
> > 2. Add a "PropertyAttr" class to store getter/putter function names.
> > 3. Notice that there can be "[]" after property declaration, and number
> of "[]" indicates number of args for getter/setter function(see attached
> test file). Add a field to QualType to store number of "[]". I know it's
> horrible, but for a working prototype, that's enough.
> > 4. Add a "MSPropertyExpr". When we encounter property usage in Parser,
> we don't know whether it's get or set. So we have to add an action AFTER
> Sema, or do it in CodeGen. Either way, while parsing, all we know is
> arguments for getter/setter.
> > 5. In CodeGen, deal with "MSPropertyExpr". If it's "scalar" in CodeGen,
> it's a get, replace it with a CallExpr to getter. If it's "LValue" on the
> left side of an assignment, replace the whole assignment with a CallExpr to
> setter.
> >
> > I know the timing is really bad..
> > But, any comments?
>
> Handling this in IR-generation is not a great idea;  we did this for
> Objective-C properties for a very long time and eventually got fed up with
> it.  You should look into pseudo-object expressions;  I actually had this
> language extension in the back of my mind when I was designing them.
>
> John.
>
>


-- 
Best Regards, Tong Shen (沈彤)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20121207/f6318792/attachment.html>


More information about the cfe-dev mailing list