Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorBartosz Taudul <wolf@nereid.pl>2022-09-16 01:30:29 +0300
committerBartosz Taudul <wolf@nereid.pl>2022-09-16 01:30:29 +0300
commitd823a2453473618b29b34109c06caf7fcf0f6c97 (patch)
tree03220a5fd54360d71a52ca5e7d13c7c5ba3c8a96 /server
parent4913f0e1e63164552e4d263e3f456310de535602 (diff)
Dummy tokenization of asm operands.
Diffstat (limited to 'server')
-rw-r--r--server/TracySourceTokenizer.cpp22
-rw-r--r--server/TracySourceTokenizer.hpp9
-rw-r--r--server/TracySourceView.cpp2
-rw-r--r--server/TracySourceView.hpp1
4 files changed, 34 insertions, 0 deletions
diff --git a/server/TracySourceTokenizer.cpp b/server/TracySourceTokenizer.cpp
index f741b8fa..cbf975d1 100644
--- a/server/TracySourceTokenizer.cpp
+++ b/server/TracySourceTokenizer.cpp
@@ -351,4 +351,26 @@ out:
return TokenColor::Default;
}
+std::vector<Tokenizer::AsmToken> Tokenizer::TokenizeAsm( const char* begin, const char* end )
+{
+ std::vector<AsmToken> ret;
+ while( begin != end )
+ {
+ while( begin != end && isspace( (uint8_t)*begin ) ) begin++;
+ const auto pos = begin;
+ const auto col = IdentifyAsmToken( begin, end );
+ ret.emplace_back( AsmToken { pos, begin, col } );
+ }
+ return ret;
+}
+
+Tokenizer::AsmTokenColor Tokenizer::IdentifyAsmToken( const char*& begin, const char* end )
+{
+ static const auto s_regs = GetAsmRegs();
+ static const auto s_sizes = GetAsmSizeDirectives();
+
+ begin = end;
+ return AsmTokenColor::Default;
+}
+
}
diff --git a/server/TracySourceTokenizer.hpp b/server/TracySourceTokenizer.hpp
index 3ab76946..038f1f12 100644
--- a/server/TracySourceTokenizer.hpp
+++ b/server/TracySourceTokenizer.hpp
@@ -47,12 +47,21 @@ public:
Literal, // 0x04, etc
};
+ struct AsmToken
+ {
+ const char* begin;
+ const char* end;
+ AsmTokenColor color;
+ };
+
Tokenizer();
std::vector<Token> Tokenize( const char* begin, const char* end );
+ std::vector<AsmToken> TokenizeAsm( const char* begin, const char* end );
private:
TokenColor IdentifyToken( const char*& begin, const char* end );
+ AsmTokenColor IdentifyAsmToken( const char*& begin, const char* end );
bool m_isInComment;
bool m_isInPreprocessor;
diff --git a/server/TracySourceView.cpp b/server/TracySourceView.cpp
index 2b343c9a..f342c943 100644
--- a/server/TracySourceView.cpp
+++ b/server/TracySourceView.cpp
@@ -891,6 +891,8 @@ bool SourceView::Disassemble( uint64_t symAddr, const Worker& worker )
}
}
m_asm.emplace_back( AsmLine { op.address, jumpAddr, op.mnemonic, op.op_str, (uint8_t)op.size, leaData, opType, jumpConditional, std::move( params ) } );
+ const auto& operands = m_asm.back().operands;
+ m_asm.back().opTokens = m_tokenizer.TokenizeAsm( operands.c_str(), operands.c_str() + operands.size() );
#if CS_API_MAJOR >= 4
auto& entry = m_asm.back();
diff --git a/server/TracySourceView.hpp b/server/TracySourceView.hpp
index 120a188d..ef514ecd 100644
--- a/server/TracySourceView.hpp
+++ b/server/TracySourceView.hpp
@@ -98,6 +98,7 @@ private:
OpType opType;
bool jumpConditional;
std::vector<AsmOpParams> params;
+ std::vector<Tokenizer::AsmToken> opTokens;
union
{
RegsX86 readX86[12];