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

endlessroad1991 at gmail.com endlessroad1991 at gmail.com
Thu Dec 6 09:52:37 PST 2012


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?

-- 
Best Regards, Tong Shen (沈彤)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20121207/cdb7feae/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1.patch
Type: application/octet-stream
Size: 25477 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20121207/cdb7feae/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.cpp
Type: text/x-c++src
Size: 309 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20121207/cdb7feae/attachment.cpp>


More information about the cfe-dev mailing list