Branch: refs/heads/master Author: Nick Treleaven nick.treleaven@btinternet.com Committer: Nick Treleaven nick.treleaven@btinternet.com Date: Wed, 14 Jan 2015 17:03:26 UTC Commit: 657c7e73bed9c025bfb404e0e319a67269e8bce5 https://github.com/geany/geany/commit/657c7e73bed9c025bfb404e0e319a67269e8bc...
Log Message: ----------- Parse D enum base type & refactor
Merge and extend fishman/ctags enum inheritance parsing for C++, D, and add simple.d.t/input.d test.
Modified Paths: -------------- tagmanager/ctags/c.c tests/ctags/Makefile.am tests/ctags/runner.sh tests/ctags/simple.d tests/ctags/simple.d.tags
Modified: tagmanager/ctags/c.c 28 lines changed, 12 insertions(+), 16 deletions(-) =================================================================== @@ -2620,9 +2620,16 @@ static void addContext (statementInfo *const st, const tokenInfo* const token)
static boolean inheritingDeclaration (declType decl) { - return (boolean) (decl == DECL_CLASS || - decl == DECL_STRUCT || - decl == DECL_INTERFACE); + /* enum base types */ + if (decl == DECL_ENUM) + { + return (boolean) (isLanguage (Lang_cpp) || isLanguage (Lang_csharp) || + isLanguage (Lang_d)); + } + return (boolean) ( + decl == DECL_CLASS || + decl == DECL_STRUCT || + decl == DECL_INTERFACE); }
static void processColon (statementInfo *const st) @@ -2638,23 +2645,12 @@ static void processColon (statementInfo *const st) else { cppUngetc (c); - if (((isLanguage (Lang_cpp) && - (st->declaration == DECL_CLASS || st->declaration == DECL_STRUCT)) || - isLanguage (Lang_csharp) || isLanguage (Lang_d) || isLanguage (Lang_vala)) && + if ((isLanguage (Lang_cpp) || isLanguage (Lang_csharp) || isLanguage (Lang_d) || + isLanguage (Lang_vala)) && inheritingDeclaration (st->declaration)) { readParents (st, ':'); } - else if ((isLanguage (Lang_cpp) || isLanguage (Lang_csharp)) && - st->declaration == DECL_ENUM) - { - /* skip enum's base type */ - c = skipToOneOf ("{;"); - if (c == '{') - setToken (st, TOKEN_BRACE_OPEN); - else if (c == ';') - setToken (st, TOKEN_SEMICOLON); - } else if (parentDecl (st) == DECL_STRUCT || parentDecl (st) == DECL_CLASS) { c = skipToOneOf (",;");
Modified: tests/ctags/Makefile.am 1 lines changed, 1 insertions(+), 0 deletions(-) =================================================================== @@ -243,6 +243,7 @@ test_sources = \ signature.cpp \ simple.bas \ simple.cbl \ + simple.d \ simple.html \ simple.js \ simple.ksh \
Modified: tests/ctags/runner.sh 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -1,6 +1,6 @@ #!/bin/bash
-# error out on undefined variable expansion, usful for debugging +# error out on undefined variable expansion, useful for debugging set -u
# FIXME: get this from automake so we have $(EXEEXT)
Modified: tests/ctags/simple.d 82 lines changed, 82 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,82 @@ +module test.simple; + +import std.stdio; + +alias AliasInt = int; + +struct Struct +{ + union Union + { + bool quxx; + int qar; + } +} + +enum Enum : int +{ + foo, + bar, +} + +interface Interface +{ + public AliasInt bar(); +} + +class Class : Interface +{ + private AliasInt _bar; + + public this(AliasInt x) + { + this._bar = x; + } + + public AliasInt bar() + { + return this._bar; + } + + protected: + auto tfun(T)(T v) + { + return v; + } +} + +public +{ + int missing; // FIXME - parse protection blocks +} + +template Template(alias a, T...) +{ + alias TemplateAlias = a!T; +} + +Object obj; + +private: +int i; + +/+ +int error; + +/ + +static if (is(typeof(__traits(getMember, a, name)) == function)) + T conditional; + +static assert( num < TL.length, "Name '"~name~"' is not found"); + +__gshared int globalVar; + +void main(string[] args) +{ + auto foo = new Class(1337); + + alias string AliasString; + AliasString baz = "Hello, World!"; + + writefln("%s", foo.bar()); +}
Modified: tests/ctags/simple.d.tags 24 lines changed, 24 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,24 @@ +# format=tagmanager +AliasInt�4096�0 +Class�1�0 +Enum�2�0 +Interface�32�0 +Struct�2048�0 +Template�256�0 +TemplateAlias�4096�Template�0 +Union�8192�Struct�0 +_bar�64�Class�0�AliasInt +bar�4�Enum�0 +bar�16�()�Class�0�public AliasInt +bar�1024�()�Interface�0�public AliasInt +conditional�16384�0�T +foo�4�Enum�0 +globalVar�16384�0�__gshared +i�16384�0�int +main�16�(string[] args)�0�void +obj�16384�0�Object +qar�64�Struct.Union�0�int +quxx�64�Struct.Union�0�bool +test.simple�256�0 +tfun�16�(T)�Class�0�auto +this�16�(AliasInt x)�Class�0
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).