diff --git a/src/apps/debugger/source_language/SyntaxHighlighter.h b/src/apps/debugger/source_language/SyntaxHighlighter.h index 7a72a363ce..0fae05aa93 100644 --- a/src/apps/debugger/source_language/SyntaxHighlighter.h +++ b/src/apps/debugger/source_language/SyntaxHighlighter.h @@ -13,6 +13,7 @@ class LineDataSource; +class TeamTypeInformation; enum syntax_highlight_type { @@ -48,6 +49,7 @@ public: virtual ~SyntaxHighlighter(); virtual status_t ParseText(LineDataSource* source, + TeamTypeInformation* typeInfo, SyntaxHighlightInfo*& _info) = 0; // caller owns the returned info }; diff --git a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.cpp b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.cpp index 1537606252..7ad0a5102d 100644 --- a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.cpp +++ b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.cpp @@ -10,6 +10,8 @@ #include "CLanguageTokenizer.h" #include "LineDataSource.h" +#include "TeamTypeInformation.h" +#include "TypeLookupConstraints.h" using namespace CLanguage; @@ -167,11 +169,13 @@ private: CLanguageFamilySyntaxHighlightInfo::CLanguageFamilySyntaxHighlightInfo( - LineDataSource* source, Tokenizer* tokenizer) + LineDataSource* source, Tokenizer* tokenizer, + TeamTypeInformation* typeInfo) : SyntaxHighlightInfo(), fHighlightSource(source), fTokenizer(tokenizer), + fTypeInfo(typeInfo), fLineInfos(10, true) { fHighlightSource->AcquireReference(); @@ -310,11 +314,14 @@ CLanguageFamilySyntaxHighlightInfo::_ParseLine(int32 line, syntax_highlight_type CLanguageFamilySyntaxHighlightInfo::_MapTokenToSyntaxType(const Token& token) { + static TypeLookupConstraints constraints; + switch (token.type) { case TOKEN_IDENTIFIER: - // TODO: recognize types if (IsLanguageKeyword(token)) return SYNTAX_HIGHLIGHT_KEYWORD; + else if (fTypeInfo->TypeExistsByName(token.string, constraints)) + return SYNTAX_HIGHLIGHT_TYPE; break; case TOKEN_CONSTANT: diff --git a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.h b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.h index 78279424b2..5bfe24ba64 100644 --- a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.h +++ b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlightInfo.h @@ -16,12 +16,15 @@ namespace CLanguage { class Tokenizer; } +class TeamTypeInformation; + class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo { public: CLanguageFamilySyntaxHighlightInfo( LineDataSource* source, - CLanguage::Tokenizer* tokenizer); + CLanguage::Tokenizer* tokenizer, + TeamTypeInformation* info); virtual ~CLanguageFamilySyntaxHighlightInfo(); virtual int32 GetLineHighlightRanges(int32 line, @@ -44,6 +47,7 @@ private: private: LineDataSource* fHighlightSource; CLanguage::Tokenizer* fTokenizer; + TeamTypeInformation* fTypeInfo; LineInfoList fLineInfos; }; diff --git a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.cpp b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.cpp index 097c32948e..62175145e8 100644 --- a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.cpp +++ b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.cpp @@ -31,7 +31,7 @@ CLanguageFamilySyntaxHighlighter::~CLanguageFamilySyntaxHighlighter() status_t CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source, - SyntaxHighlightInfo*& _info) + TeamTypeInformation* typeInfo, SyntaxHighlightInfo*& _info) { Tokenizer* tokenizer = new(std::nothrow) Tokenizer(); if (tokenizer == NULL) @@ -39,7 +39,7 @@ CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source, ObjectDeleter deleter(tokenizer); _info = new(std::nothrow) CLanguageFamilySyntaxHighlightInfo(source, - tokenizer); + tokenizer, typeInfo); if (_info == NULL) return B_NO_MEMORY; diff --git a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.h b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.h index 25a5736593..5a347d2e5a 100644 --- a/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.h +++ b/src/apps/debugger/source_language/c_family/CLanguageFamilySyntaxHighlighter.h @@ -15,6 +15,7 @@ public: virtual ~CLanguageFamilySyntaxHighlighter(); virtual status_t ParseText(LineDataSource* source, + TeamTypeInformation* typeInfo, SyntaxHighlightInfo*& _info); // caller owns the returned info }; diff --git a/src/apps/debugger/user_interface/gui/team_window/SourceView.cpp b/src/apps/debugger/user_interface/gui/team_window/SourceView.cpp index 0beeaf7347..fdb93281f5 100644 --- a/src/apps/debugger/user_interface/gui/team_window/SourceView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/SourceView.cpp @@ -76,7 +76,7 @@ static rgb_color kSyntaxColors[] = { {0, 0x64, 0, 255}, // SYNTAX_HIGHLIGHT_PREPROCESSOR_KEYWORD {0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_IDENTIFIER {0x44, 0x8a, 0, 255}, // SYNTAX_HIGHLIGHT_OPERATOR - {0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_TYPE + {0x70, 0x70, 0x70, 255}, // SYNTAX_HIGHLIGHT_TYPE {0x85, 0x19, 0x19, 255}, // SYNTAX_HIGHLIGHT_NUMERIC_LITERAL {0x3f, 0x48, 0x84, 255}, // SYNTAX_HIGHLIGHT_STRING_LITERAL {0xa1, 0x64, 0xe, 255}, // SYNTAX_HIGHLIGHT_COMMENT @@ -2254,7 +2254,8 @@ SourceView::SetSourceCode(SourceCode* sourceCode) if (highlighter != NULL) { BReference syntaxReference(highlighter, true); - highlighter->ParseText(fSourceCode, fCurrentSyntaxInfo); + highlighter->ParseText(fSourceCode, + fTeam->GetTeamTypeInformation(), fCurrentSyntaxInfo); } } }