I made using be a comment, but not namespace.  In that case, it is
considered to be a type, and you could write a semantic patch to match
against it.  Does that seem useful at all?

For now I mostly care about parsing to succeed, without actually being able to use C++ features is semantic patches but still allowing simple C spatches on C++ or mixed C/C++ codebase.

Hence I thought ignoring what would otherwise be a parsing error is a good first step. The easiest way to ignore I found to be comments, but adding simple placeholder tokens and touching files outside a lexer is probably cleaner, even if the effect is still a noop.

I know of the following constructs (there may be others, I am not experienced in C++) involving namespaces.

1) The using declaration:

using NS1::id;
using NS::ChildNS::id;

explicitly naming an identifier which may be part of an arbitrarily nested namespace hierarchy. This works without patches as 'using' is treated as a type name and the rest as an identifier.

2) The using directive:

using namespace NS1;

'imports' namespace NS1 so one can refer to what is declared in it without the NS1:prefix. (the example provided in the original mail)


3) Namespacing

something like

namespace NS1 {
 int x;
 int y;
}

namespace NS2 {
 namespace NS3 {
 int y;
}
}


This time the namespace keyword has another role. For simple parsing only and not spatching purposes the namespace NS1 part could be treated as comment and the block parsed as usual. This probably needs deeper modification in the lexer as the program unit can now be divided in such
top level block declarations.

From what I saw in the lexer one can cheat and treat a sequence of words separated by whitespace as tokens and make them a Tcomment, so 'namespace space id' may match and be ignored. But that is not clean at all :)

I think allowing a parse first without doing too many changes to actually handle complex C++ constructs in semantic patch files would already be helpful.

thanks
Jani



_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to