- enhancement: Keyword completion for asm/GAS files.
This commit is contained in:
parent
2660096377
commit
02b64497d5
2
NEWS.md
2
NEWS.md
|
@ -9,7 +9,7 @@ Red Panda C++ Version 2.12
|
||||||
- enhancement: Generate debug info for nasm files in Linux/MacOS.
|
- enhancement: Generate debug info for nasm files in Linux/MacOS.
|
||||||
- enhancement: Compile/Run/Debug GAS source files.
|
- enhancement: Compile/Run/Debug GAS source files.
|
||||||
- enhancement: Compile/Debug GAS source files in project.
|
- enhancement: Compile/Debug GAS source files in project.
|
||||||
|
- enhancement: Keyword completion for asm/GAS files.
|
||||||
|
|
||||||
Red Panda C++ Version 2.11
|
Red Panda C++ Version 2.11
|
||||||
|
|
||||||
|
|
|
@ -931,13 +931,16 @@ void Editor::keyPressEvent(QKeyEvent *event)
|
||||||
}
|
}
|
||||||
} else if (syntaxer()) {
|
} else if (syntaxer()) {
|
||||||
//show keywords
|
//show keywords
|
||||||
|
processCommand(QSynedit::EditCommand::Char,ch,nullptr);
|
||||||
showCompletion("",false,CodeCompletionType::KeywordsOnly);
|
showCompletion("",false,CodeCompletionType::KeywordsOnly);
|
||||||
|
handled=true;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (pSettings->codeCompletion().enabled()
|
if (pSettings->codeCompletion().enabled()
|
||||||
&& pSettings->codeCompletion().showCompletionWhileInput() ) {
|
&& pSettings->codeCompletion().showCompletionWhileInput() ) {
|
||||||
if (mParser) {
|
if (syntaxer() && syntaxer()->language()==QSynedit::ProgrammingLanguage::CPP) {
|
||||||
//preprocessor ?
|
//preprocessor ?
|
||||||
if ((mLastIdCharPressed==0) && (ch=='#') && lineText().isEmpty()) {
|
if ((mLastIdCharPressed==0) && (ch=='#') && lineText().isEmpty()) {
|
||||||
mLastIdCharPressed++;
|
mLastIdCharPressed++;
|
||||||
|
@ -955,6 +958,21 @@ void Editor::keyPressEvent(QKeyEvent *event)
|
||||||
handled=true;
|
handled=true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} else if (syntaxer() && syntaxer()->language()==QSynedit::ProgrammingLanguage::ATTAssembly) {
|
||||||
|
if ((mLastIdCharPressed==0) && (ch=='.')) {
|
||||||
|
mLastIdCharPressed++;
|
||||||
|
processCommand(QSynedit::EditCommand::Char,ch,nullptr);
|
||||||
|
showCompletion("",false,CodeCompletionType::KeywordsOnly);
|
||||||
|
handled=true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((mLastIdCharPressed==0) && (ch=='%')) {
|
||||||
|
mLastIdCharPressed++;
|
||||||
|
processCommand(QSynedit::EditCommand::Char,ch,nullptr);
|
||||||
|
showCompletion("",false,CodeCompletionType::KeywordsOnly);
|
||||||
|
handled=true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mLastIdCharPressed = 0;
|
mLastIdCharPressed = 0;
|
||||||
|
@ -3222,6 +3240,12 @@ void Editor::showCompletion(const QString& preWord,bool autoComplete, CodeComple
|
||||||
if (!word.startsWith('@')) {
|
if (!word.startsWith('@')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} else if (
|
||||||
|
(attr->tokenType() == QSynedit::TokenType::String) &&
|
||||||
|
(attr->tokenType() != QSynedit::TokenType::Character)) {
|
||||||
|
return;
|
||||||
|
} else if (type==CodeCompletionType::KeywordsOnly && syntaxer() && syntaxer()->language()==QSynedit::ProgrammingLanguage::ATTAssembly) {
|
||||||
|
word = getWordAtPosition(this,caretXY(),pBeginPos,pEndPos, WordPurpose::wpATTASMKeywords);
|
||||||
} else if (
|
} else if (
|
||||||
(attr->tokenType() != QSynedit::TokenType::Operator) &&
|
(attr->tokenType() != QSynedit::TokenType::Operator) &&
|
||||||
(attr->tokenType() != QSynedit::TokenType::Space) &&
|
(attr->tokenType() != QSynedit::TokenType::Space) &&
|
||||||
|
@ -3273,21 +3297,18 @@ void Editor::showCompletion(const QString& preWord,bool autoComplete, CodeComple
|
||||||
mCompletionPopup->show();
|
mCompletionPopup->show();
|
||||||
|
|
||||||
// Scan the current function body
|
// Scan the current function body
|
||||||
|
|
||||||
QSet<QString> keywords;
|
QSet<QString> keywords;
|
||||||
if (syntaxer()) {
|
if (syntaxer()) {
|
||||||
if (syntaxer()->language() != QSynedit::ProgrammingLanguage::CPP ) {
|
if (syntaxer()->language() != QSynedit::ProgrammingLanguage::CPP ) {
|
||||||
if (syntaxer()->language()==QSynedit::ProgrammingLanguage::Assembly) {
|
if (syntaxer()->language()==QSynedit::ProgrammingLanguage::ATTAssembly) {
|
||||||
keywords = QSynedit::ASMSyntaxer::Directives;
|
if (word.startsWith("."))
|
||||||
foreach(const QString& keyword, QSynedit::ASMSyntaxer::Registers) {
|
keywords = QSynedit::ASMSyntaxer::ATTDirectives;
|
||||||
keywords.insert(keyword);
|
else if (word.startsWith("%"))
|
||||||
}
|
keywords = QSynedit::ASMSyntaxer::ATTRegisters;
|
||||||
foreach(const QString& keyword, QSynedit::ASMSyntaxer::Instructions) {
|
else
|
||||||
keywords.insert(keyword);
|
keywords = QSynedit::ASMSyntaxer::Instructions;
|
||||||
}
|
} else
|
||||||
} else {
|
|
||||||
keywords = syntaxer()->keywords();
|
keywords = syntaxer()->keywords();
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (mUseCppSyntax) {
|
if (mUseCppSyntax) {
|
||||||
foreach (const QString& keyword, CppKeywords.keys()) {
|
foreach (const QString& keyword, CppKeywords.keys()) {
|
||||||
|
@ -3508,6 +3529,11 @@ void Editor::completionInsert(bool appendFunc)
|
||||||
// delete the part of the word that's already been typed ...
|
// delete the part of the word that's already been typed ...
|
||||||
QSynedit::BufferCoord p = wordEnd();
|
QSynedit::BufferCoord p = wordEnd();
|
||||||
QSynedit::BufferCoord pStart = wordStart();
|
QSynedit::BufferCoord pStart = wordStart();
|
||||||
|
if (syntaxer() && syntaxer()->language()==QSynedit::ProgrammingLanguage::ATTAssembly) {
|
||||||
|
if (statement->command.startsWith(".")
|
||||||
|
|| statement->command.startsWith("#"))
|
||||||
|
pStart.ch--;
|
||||||
|
}
|
||||||
setCaretAndSelection(pStart,pStart,p);
|
setCaretAndSelection(pStart,pStart,p);
|
||||||
|
|
||||||
// if we are inserting a function,
|
// if we are inserting a function,
|
||||||
|
@ -3612,7 +3638,9 @@ bool Editor::onCompletionKeyPressed(QKeyEvent *event)
|
||||||
return false;
|
return false;
|
||||||
QString oldPhrase = mCompletionPopup->memberPhrase();
|
QString oldPhrase = mCompletionPopup->memberPhrase();
|
||||||
WordPurpose purpose = WordPurpose::wpCompletion;
|
WordPurpose purpose = WordPurpose::wpCompletion;
|
||||||
if (oldPhrase.startsWith('#')) {
|
if (syntaxer() && syntaxer()->language()==QSynedit::ProgrammingLanguage::ATTAssembly) {
|
||||||
|
purpose = WordPurpose::wpATTASMKeywords;
|
||||||
|
} else if (oldPhrase.startsWith('#')) {
|
||||||
purpose = WordPurpose::wpDirective;
|
purpose = WordPurpose::wpDirective;
|
||||||
} else if (oldPhrase.startsWith('@')) {
|
} else if (oldPhrase.startsWith('@')) {
|
||||||
purpose = WordPurpose::wpJavadoc;
|
purpose = WordPurpose::wpJavadoc;
|
||||||
|
@ -4429,6 +4457,23 @@ QString getWordAtPosition(QSynedit::QSynEdit *editor, const QSynedit::BufferCoor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Copy backward until % .
|
||||||
|
if (purpose == Editor::WordPurpose::wpATTASMKeywords) {
|
||||||
|
while ((wordBegin >= 0) && (wordBegin < len)) {
|
||||||
|
if (editor->isIdentChar(s[wordBegin]))
|
||||||
|
wordBegin--;
|
||||||
|
else if (s[wordBegin] == '%') {
|
||||||
|
wordBegin--;
|
||||||
|
break;
|
||||||
|
} else if (s[wordBegin] == '.') {
|
||||||
|
wordBegin--;
|
||||||
|
break;
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Copy backward until #
|
// Copy backward until #
|
||||||
if (purpose == Editor::WordPurpose::wpDirective) {
|
if (purpose == Editor::WordPurpose::wpDirective) {
|
||||||
while ((wordBegin >= 0) && (wordBegin < len)) {
|
while ((wordBegin >= 0) && (wordBegin < len)) {
|
||||||
|
|
|
@ -95,7 +95,8 @@ public:
|
||||||
wpHeaderCompletionStart, // walk backwards over path, including start '<' or '"'
|
wpHeaderCompletionStart, // walk backwards over path, including start '<' or '"'
|
||||||
wpDirective, // preprocessor
|
wpDirective, // preprocessor
|
||||||
wpJavadoc, //javadoc
|
wpJavadoc, //javadoc
|
||||||
wpInformation // walk backwards over words, array, functions, parents, forwards over words
|
wpInformation, // walk backwards over words, array, functions, parents, forwards over words
|
||||||
|
wpATTASMKeywords,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class TipType {
|
enum class TipType {
|
||||||
|
|
|
@ -40,6 +40,8 @@ QSynedit::PSyntaxer SyntaxerManager::getSyntaxer(QSynedit::ProgrammingLanguage l
|
||||||
return std::make_shared<QSynedit::CppSyntaxer>();
|
return std::make_shared<QSynedit::CppSyntaxer>();
|
||||||
case QSynedit::ProgrammingLanguage::Assembly:
|
case QSynedit::ProgrammingLanguage::Assembly:
|
||||||
return std::make_shared<QSynedit::ASMSyntaxer>();
|
return std::make_shared<QSynedit::ASMSyntaxer>();
|
||||||
|
case QSynedit::ProgrammingLanguage::ATTAssembly:
|
||||||
|
return std::make_shared<QSynedit::ASMSyntaxer>(true);
|
||||||
case QSynedit::ProgrammingLanguage::Makefile:
|
case QSynedit::ProgrammingLanguage::Makefile:
|
||||||
return std::make_shared<QSynedit::MakefileSyntaxer>();
|
return std::make_shared<QSynedit::MakefileSyntaxer>();
|
||||||
case QSynedit::ProgrammingLanguage::GLSL:
|
case QSynedit::ProgrammingLanguage::GLSL:
|
||||||
|
@ -62,8 +64,10 @@ QSynedit::PSyntaxer SyntaxerManager::getSyntaxer(const QString &filename)
|
||||||
return getSyntaxer(QSynedit::ProgrammingLanguage::CPP);
|
return getSyntaxer(QSynedit::ProgrammingLanguage::CPP);
|
||||||
} else if (suffix == "vs" || suffix == "fs" || suffix == "frag") {
|
} else if (suffix == "vs" || suffix == "fs" || suffix == "frag") {
|
||||||
return getSyntaxer(QSynedit::ProgrammingLanguage::GLSL);
|
return getSyntaxer(QSynedit::ProgrammingLanguage::GLSL);
|
||||||
} else if (suffix == "s" || suffix == "asm") {
|
} else if (suffix == "asm") {
|
||||||
return getSyntaxer(QSynedit::ProgrammingLanguage::Assembly);
|
return getSyntaxer(QSynedit::ProgrammingLanguage::Assembly);
|
||||||
|
} else if (suffix == "s" || suffix == "S") {
|
||||||
|
return getSyntaxer(QSynedit::ProgrammingLanguage::ATTAssembly);
|
||||||
} else if (basename.compare("makefile", Qt::CaseInsensitive)==0) {
|
} else if (basename.compare("makefile", Qt::CaseInsensitive)==0) {
|
||||||
return getSyntaxer(QSynedit::ProgrammingLanguage::Makefile);
|
return getSyntaxer(QSynedit::ProgrammingLanguage::Makefile);
|
||||||
} else if (suffix.isEmpty()) {
|
} else if (suffix.isEmpty()) {
|
||||||
|
|
|
@ -35,6 +35,8 @@ SystemConsts::SystemConsts(): mDefaultFileFilters()
|
||||||
addDefaultFileFilter(QObject::tr("C files"),"*.c");
|
addDefaultFileFilter(QObject::tr("C files"),"*.c");
|
||||||
addDefaultFileFilter(QObject::tr("C++ files"),"*.cpp *.cc *.cxx");
|
addDefaultFileFilter(QObject::tr("C++ files"),"*.cpp *.cc *.cxx");
|
||||||
addDefaultFileFilter(QObject::tr("Header files"),"*.h *.hh *.hpp");
|
addDefaultFileFilter(QObject::tr("Header files"),"*.h *.hh *.hpp");
|
||||||
|
addDefaultFileFilter(QObject::tr("GAS files"),"*.s *.S");
|
||||||
|
addDefaultFileFilter(QObject::tr("ASM files"),"*.asm");
|
||||||
|
|
||||||
addFileFilter(mIconFileFilters, QObject::tr("Icon files"), "*.ico");
|
addFileFilter(mIconFileFilters, QObject::tr("Icon files"), "*.ico");
|
||||||
|
|
||||||
|
|
|
@ -6503,6 +6503,14 @@
|
||||||
<source>Do you really want to remove "%1"?</source>
|
<source>Do you really want to remove "%1"?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GAS files</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ASM files</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RegisterModel</name>
|
<name>RegisterModel</name>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -6148,6 +6148,14 @@
|
||||||
<source>Do you really want to remove "%1"?</source>
|
<source>Do you really want to remove "%1"?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GAS files</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ASM files</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>RegisterModel</name>
|
<name>RegisterModel</name>
|
||||||
|
|
|
@ -25,73 +25,169 @@ const QSet<QString> ASMSyntaxer::Registers {
|
||||||
"bh","bl","bx","ebx",
|
"bh","bl","bx","ebx",
|
||||||
"ch","cl","cx","ecx",
|
"ch","cl","cx","ecx",
|
||||||
"dh","dl","dx","edx",
|
"dh","dl","dx","edx",
|
||||||
"rax","rbx","rcx","rdx","rsi","rdi","rbp",
|
"spl","sp","esp",
|
||||||
"rsp","r8","r9","r10","r11","r12","r13","r14","r15",
|
"bpl","bp","ebp",
|
||||||
"r8h","r8l","r8w","r8d",
|
"sil","si","esi",
|
||||||
"r9h","r9l","r9w","r9d",
|
"dil","di","edi",
|
||||||
"r10h","r10l","r10w","r10d",
|
"r8b","r8w","r8d",
|
||||||
"r11h","r11l","r11w","r11d",
|
"r9b","r9w","r9d",
|
||||||
"r12h","r12l","r12w","r12d",
|
"r10b","r10w","r10d",
|
||||||
"r13h","r13l","r13w","r13d",
|
"r11b","r11w","r11d",
|
||||||
"r14h","r14l","r14w","r14d",
|
"r12b","r12w","r12d",
|
||||||
"r15h","r15l","r15w","r15d"
|
"r13b","r13w","r13d",
|
||||||
|
"r14b","r14w","r14d",
|
||||||
|
"r15b","r15w","r15d",
|
||||||
|
"rax","rbx","rcx","rdx","rsp","rbp","rsi","rdi",
|
||||||
|
"r8","r9","r10","r11","r12","r13","r14","r15",
|
||||||
|
"ip","eip","rip",
|
||||||
|
"flags","eflags","rflags",
|
||||||
|
"cs","ds","ss","es","fs","gs",
|
||||||
|
"st0","st1","st2","st3","st4","st5","st6","st7",
|
||||||
|
"xmm0","xmm1","xmm2","xmm3",
|
||||||
|
"xmm4","xmm5","xmm6","xmm7",
|
||||||
|
"xmm8","xmm9","xmm10","xmm11",
|
||||||
|
"xmm12","xmm13","xmm14","xmm15",
|
||||||
|
};
|
||||||
|
|
||||||
|
const QSet<QString> ASMSyntaxer::ATTRegisters {
|
||||||
|
"%ah","%al","%ax","%eax",
|
||||||
|
"%bh","%bl","%bx","%ebx",
|
||||||
|
"%ch","%cl","%cx","%ecx",
|
||||||
|
"%dh","%dl","%dx","%edx",
|
||||||
|
"%spl","%sp","%esp",
|
||||||
|
"%bpl","%bp","%ebp",
|
||||||
|
"%sil","%si","%esi",
|
||||||
|
"%dil","%di","%edi",
|
||||||
|
"%r8b","%r8w","%r8d",
|
||||||
|
"%r9b","%r9w","%r9d",
|
||||||
|
"%r10b","%r10w","%r10d",
|
||||||
|
"%r11b","%r11w","%r11d",
|
||||||
|
"%r12b","%r12w","%r12d",
|
||||||
|
"%r13b","%r13w","%r13d",
|
||||||
|
"%r14b","%r14w","%r14d",
|
||||||
|
"%r15b","%r15w","%r15d",
|
||||||
|
"%rax","%rbx","%rcx","%rdx","%rsp","%rbp","%rsi","%rdi",
|
||||||
|
"%r8","%r9","%r10","%r11","%r12","%r13","%r14","%r15",
|
||||||
|
"%ip","%eip","%rip",
|
||||||
|
"%flags","%eflags","%rflags",
|
||||||
|
"%cs","%ds","%ss","%es","%fs","%gs",
|
||||||
|
"%st0","%st1","%st2","%st3","%st4","%st5","%st6","%st7",
|
||||||
|
"%xmm0","%xmm1","%xmm2","%xmm3",
|
||||||
|
"%xmm4","%xmm5","%xmm6","%xmm7",
|
||||||
|
"%xmm8","%xmm9","%xmm10","%xmm11",
|
||||||
|
"%xmm12","%xmm13","%xmm14","%xmm15",
|
||||||
};
|
};
|
||||||
|
|
||||||
const QSet<QString> ASMSyntaxer::Instructions {
|
const QSet<QString> ASMSyntaxer::Instructions {
|
||||||
"movb","movw","movl","movq",
|
"aaa","aad","aam","aas","adc","adcx","add","addpd","addps",
|
||||||
"leab","leaw","leal","leaq",
|
"addsd","addss","addsubpd","addsubps","adox","aesdec","aesdec128kl","aesdec256kl","aesdeclast","aesdecwide128kl",
|
||||||
"incb","incw","incl","incq",
|
"aesdecwide256kl","aesenc","aesenc128kl","aesenc256kl","aesenclast","aesencwide128kl","aesencwide256kl","aesimc","aeskeygenassist","and",
|
||||||
"decb","decw","decl","decq",
|
"andn","andnpd","andnps","andpd","andps","arpl","bextr","blendpd","blendps","blendvpd",
|
||||||
"addb","addw","addl","addq",
|
"blendvps","blsi","blsmsk","blsr","bndcl","bndcn","bndcu","bndldx","bndmk","bndmov",
|
||||||
"subb","subw","subl","subq",
|
"bndstx","bound","bsf","bsr","bswap","bt","btc","btr","bts","bzhi",
|
||||||
"imulb","imulw","imull","imulq",
|
"call","cbw","cdq","cdqe","clac","clc","cld","cldemote","clflush","clflushopt",
|
||||||
"divb","divw","divl","divq",
|
"cli","clrssbsy","clts","clwb","cmc","cmova","cmovae","cmovb","cmovbe","cmovc",
|
||||||
"xorb","xorw","xorl","xorq",
|
"cmove","cmovg","cmovge","cmovl","cmovle","cmovna","cmovnae","cmovnb","cmovnbe","cmovnc",
|
||||||
"orb","orw","orl","orq",
|
"cmovne","cmovng","cmovnge","cmovnl","cmovnle","cmovno","cmovnp","cmovns","cmovnz","cmovo",
|
||||||
"andb","andw","andl","andq",
|
"cmovp","cmovpe","cmovpo","cmovs","cmovz","cmp","cmppd","cmpps","cmps","cmpsb",
|
||||||
"salb","salw","sall","salq",
|
"cmpsd","cmpsq","cmpss","cmpsw","cmpxchg","cmpxchg16b","cmpxchg8b","comisd","comiss","cpuid",
|
||||||
"shlb","shlw","shll","shlq",
|
"cqo","crc32","cvtdq2pd","cvtdq2ps","cvtpd2dq","cvtpd2pi","cvtpd2ps","cvtpi2pd","cvtpi2ps","cvtps2dq",
|
||||||
"sarb","sarw","sarl","sarq",
|
"cvtps2pd","cvtps2pi","cvtsd2si","cvtsd2ss","cvtsi2sd","cvtsi2ss","cvtss2sd","cvtss2si","cvttpd2dq","cvttpd2pi",
|
||||||
"shrb","shrw","shrl","shrq",
|
"cvttps2dq","cvttps2pi","cvttsd2si","cvttss2si","cwd","cwde","daa","das","dec","div",
|
||||||
"cmpb","cmpw","cmpl","cmpq",
|
"divpd","divps","divsd","divss","dppd","dpps","emms","encodekey128","encodekey256","endbr32",
|
||||||
"testb","testw","testl","testq",
|
"endbr64","enter","extractps","f2xm1","fabs","fadd","faddp","fbld","fbstp","fchs",
|
||||||
"pushq","popq",
|
"fclex","fcmovb","fcmove","fcmovbe","fcmovu","fcmovnb","fcmovne","fcmovnbe","fcmovnu","fcom",
|
||||||
"cmove", "cmovz", "cmovne", "cmovnz",
|
"fcomi","fcomip","fcomp","fcompp","fcos","fdecstp","fdiv","fdivp","fdivr","fdivrp",
|
||||||
"cmovs", "cmovns", "cmovg", "cmovge",
|
"ffree","fiadd","ficom","ficomp","fidiv","fidivr","fild","fimul","fincstp","finit",
|
||||||
"cmovl", "cmovle", "cmova", "cmovae",
|
"fist","fistp","fisttp","fisub","fisubr","fld","fld1","fldcw","fldenv","fldl2e",
|
||||||
"cmovb", "cmovbe", "cmovnbe","cmovnb",
|
"fldl2t","fldlg2","fldln2","fldpi","fldz","fmul","fmulp","fnclex","fninit","fnop",
|
||||||
"cmovnae","cmovna",
|
"fnsave","fnstcw","fnstenv","fnstsw","fpatan","fprem","fprem1","fptan","frndint","frstor",
|
||||||
"aaa","aad","aam","adc","add","and","arpl","bound","bsf","bsr","bswap","bt","btc","btr","bts",
|
"fsave","fscale","fsin","fsincos","fsqrt","fst","fstcw","fstenv","fstp","fstsw",
|
||||||
"call","cbw","cdq","clc","cld","cli","clts","cmc","cmp","cmps","cmpsb","cmpsd","cmpsw",
|
"fsub","fsubp","fsubr","fsubrp","ftst","fucom","fucomi","fucomip","fucomp","fucompp",
|
||||||
"cmpxchg","cwd","cwde","daa","das","dec","div","emms","enter","f2xm1","fabs","fadd","faddp","fbld",
|
"fwait","fxam","fxch","fxrstor","fxsave","fxtract","fyl2x","fyl2xp1","gf2p8affineinvqb","gf2p8affineqb",
|
||||||
"fbstp","fchs","fclex","fcmovb","fcmovbe","fcmove","fcmovnb","fcmovnbe","fcmovne","fcmovnu",
|
"gf2p8mulb","haddpd","haddps","hlt","hreset","hsubpd","hsubps","idiv","imul","in",
|
||||||
"fcmovu","fcom","fcomi","fcomip","fcomp","fcompp","fcos","fdecstp","fdiv","fdivp","fdivr",
|
"inc","incsspd","incsspq","ins","insb","insd","insertps","insw","int n","int1",
|
||||||
"fdivrp","femms","ffree","fiadd","ficom","ficomp","fidiv","fidivr","fild","fimul","fincstp",
|
"int3","into","invd","invlpg","invpcid","iret","iretd","iretq","jmp","ja",
|
||||||
"finit","fist","fistp","fisub","fisubr","fld","fld1","fldcw","fldenv","fldl2e","fldl2t","fldlg2",
|
"jae","jb","jbe","jc","jcxz","je","jecxz","jg","jge","jl",
|
||||||
"fldln2","fldpi","fldz","fmul","fmulp","fnclex","fninit","fnop","fnsave","fnstcw","fnstenv",
|
"jle","jna","jnae","jnb","jnbe","jnc","jne","jng","jnge","jnl",
|
||||||
"fnstsw","fpatan","fprem1","fptan","frndint","frstor","fsave","fscale","fsin","fsincos",
|
"jnle","jno","jnp","jns","jnz","jo","jp","jpe","jpo","jrcxz",
|
||||||
"fsqrt","fst","fstcw","fstenv","fstp","fstsw","fsub","fsubp","fsubr","fsubrp","ftst",
|
"js","jz","kaddb","kaddd","kaddq","kaddw","kandb","kandd","kandnb","kandnd",
|
||||||
"fucom","fucomi","fucomip","fucomp","fucompp","fwait","fxch","fxtract","fyl2xp1","hlt","idiv",
|
"kandnq","kandnw","kandq","kandw","kmovb","kmovd","kmovq","kmovw","knotb","knotd",
|
||||||
"imul","in","inc","ins","insb","insd","insw","int","into","invd","invlpg","iret","iretd","iretw",
|
"knotq","knotw","korb","kord","korq","kortestb","kortestd","kortestq","kortestw","korw",
|
||||||
"ja","jae","jb","jbe","jc","jcxz","je","jecxz","jg","jge","jl","jle","jmp","jna","jnae","jnb","jnbe","jnc",
|
"kshiftlb","kshiftld","kshiftlq","kshiftlw","kshiftrb","kshiftrd","kshiftrq","kshiftrw","ktestb","ktestd",
|
||||||
"jne","jng","jnge","jnl","jnle","jno","jnp","jns","jnz","jo","jp","jpe","jpo","js","jz","lahf","lar","lds",
|
"ktestq","ktestw","kunpckbw","kunpckdq","kunpckwd","kxnorb","kxnord","kxnorq","kxnorw","kxorb",
|
||||||
"lea","leave","les","lfs","lgdt","lgs","lidt","lldt","lmsw","lock","lods","lodsb","lodsd","lodsw",
|
"kxord","kxorq","kxorw","lahf","lar","lddqu","ldmxcsr","lds","lea","leave",
|
||||||
"loop","loope","loopne","loopnz","loopz","lsl","lss","ltr","mov","movd","movq","movs","movsb",
|
"les","lfence","lfs","lgdt","lgs","lidt","lldt","lmsw","loadiwkey","lock",
|
||||||
"movsd","movsw","movsx","movzx","mul","neg","nop","not","or","out","outs","outsb","outsd","outsw",
|
"lods","lodsb","lodsd","lodsq","lodsw","loop","loope","loopne","lsl","lss",
|
||||||
"packssdw","packsswb","packuswb","paddb","paddd","paddsb","paddsw","paddusb","paddusw",
|
"ltr","lzcnt","maskmovdqu","maskmovq","maxpd","maxps","maxsd","maxss","mfence","minpd",
|
||||||
"paddw","pand","pandn","pavgusb","pcmpeqb","pcmpeqd","pcmpeqw","pcmpgtb","pcmpgtd","pcmpgtw",
|
"minps","minsd","minss","monitor","mov","movapd","movaps","movbe","movd","movddup",
|
||||||
"pf2id","pfacc","pfadd","pfcmpeq","pfcmpge","pfcmpgt","pfmax","pfmin","pfmul","pfrcp",
|
"movdir64b","movdiri","movdq2q","movdqa","movdqu","movhlps","movhpd","movhps","movlhps","movlpd",
|
||||||
"pfrcpit1","pfrcpit2","pfrsqit1","pfrsqrt","pfsub","pfsubr","pi2fd","pmaddwd","pmulhrw",
|
"movlps","movmskpd","movmskps","movntdq","movntdqa","movnti","movntpd","movntps","movntq","movq",
|
||||||
"pmulhw","pmullw","pop","popa","popad","popaw","popf","popfd","popfw","por","prefetch","prefetchw",
|
"movq2dq","movs","movsb","movsd","movshdup","movsldup","movsq","movss","movsw","movsx",
|
||||||
"pslld","psllq","psllw","psrad","psraw","psrld","psrlq","psrlw","psubb","psubd","psubsb",
|
"movsxd","movupd","movups","movzx","mpsadbw","mul","mulpd","mulps","mulsd","mulss",
|
||||||
"psubsw","psubusb","psubusw","psubw","punpckhbw","punpckhdq","punpckhwd","punpcklbw",
|
"mulx","mwait","neg","nop","not","or","orpd","orps","out","outs",
|
||||||
"punpckldq","punpcklwd","push","pusha","pushad","pushaw","pushf","pushfd","pushfw","pxor",
|
"outsb","outsd","outsw","pabsb","pabsd","pabsq","pabsw","packssdw","packsswb","packusdw",
|
||||||
"rcl","rcr","rep","repe","repne","repnz","repz","ret","rol","ror","sahf","sal","sar","sbb","scas",
|
"packuswb","paddb","paddd","paddq","paddsb","paddsw","paddusb","paddusw","paddw","palignr",
|
||||||
"scasb","scasd","scasw","seta","setae","setb","setbe","setc","sete","setg","setge","setl","setle",
|
"pand","pandn","pause","pavgb","pavgw","pblendvb","pblendw","pclmulqdq","pcmpeqb","pcmpeqd",
|
||||||
"setna","setnae","setnb","setnbe","setnc","setne","setng","setnge","setnl","setnle","setno",
|
"pcmpeqq","pcmpeqw","pcmpestri","pcmpestrm","pcmpgtb","pcmpgtd","pcmpgtq","pcmpgtw","pcmpistri","pcmpistrm",
|
||||||
"setnp","setns","setnz","seto","setp","setpo","sets","setz","sgdt","shl","shld","shr","shrd","sidt",
|
"pconfig","pdep","pext","pextrb","pextrd","pextrq","pextrw","phaddd","phaddsw","phaddw",
|
||||||
"sldt","smsw","stc","std","sti","stos","stosb","stosd","stosw","str","sub","test","verr","verw",
|
"phminposuw","phsubd","phsubsw","phsubw","pinsrb","pinsrd","pinsrq","pinsrw","pmaddubsw","pmaddwd",
|
||||||
"wait","wbinvd","xadd","xchg","xlat","xlatb","xor",
|
"pmaxsb","pmaxsd","pmaxsq","pmaxsw","pmaxub","pmaxud","pmaxuq","pmaxuw","pminsb","pminsd",
|
||||||
|
"pminsq","pminsw","pminub","pminud","pminuq","pminuw","pmovmskb","pmovsx","pmovzx","pmuldq",
|
||||||
|
"pmulhrsw","pmulhuw","pmulhw","pmulld","pmullq","pmullw","pmuludq","pop","popa","popad",
|
||||||
|
"popcnt","popf","popfd","popfq","por","prefetchw","prefetchh","psadbw","pshufb","pshufd",
|
||||||
|
"pshufhw","pshuflw","pshufw","psignb","psignd","psignw","pslld","pslldq","psllq","psllw",
|
||||||
|
"psrad","psraq","psraw","psrld","psrldq","psrlq","psrlw","psubb","psubd","psubq",
|
||||||
|
"psubsb","psubsw","psubusb","psubusw","psubw","ptest","ptwrite","punpckhbw","punpckhdq","punpckhqdq",
|
||||||
|
"punpckhwd","punpcklbw","punpckldq","punpcklqdq","punpcklwd","push","pusha","pushad","pushf","pushfd",
|
||||||
|
"pushfq","pxor","rcl","rcpps","rcpss","rcr","rdfsbase","rdgsbase","rdmsr","rdpid",
|
||||||
|
"rdpkru","rdpmc","rdrand","rdseed","rdsspd","rdsspq","rdtsc","rdtscp","rep","repe",
|
||||||
|
"repne","repnz","repz","ret","rol","ror","rorx","roundpd","roundps","roundsd",
|
||||||
|
"roundss","rsm","rsqrtps","rsqrtss","rstorssp","sahf","sal","sar","sarx","saveprevssp",
|
||||||
|
"sbb","scas","scasb","scasd","scasw","serialize","setssbsy","seta","setae","setb",
|
||||||
|
"setbe","setc","sete","setg","setge","setl","setle","setna","setnae","setnb",
|
||||||
|
"setnbe","setnc","setne","setng","setnge","setnl","setnle","setno","setnp","setns",
|
||||||
|
"setnz","seto","setp","setpe","setpo","sets","setz","sfence","sgdt","sha1msg1",
|
||||||
|
"sha1msg2","sha1nexte","sha1rnds4","sha256msg1","sha256msg2","sha256rnds2","shl","shld","shlx","shr",
|
||||||
|
"shrd","shrx","shufpd","shufps","sidt","sldt","smsw","sqrtpd","sqrtps","sqrtsd",
|
||||||
|
"sqrtss","stac","stc","std","sti","stmxcsr","stos","stosb","stosd","stosq",
|
||||||
|
"stosw","str","sub","subpd","subps","subsd","subss","swapgs","syscall","sysenter",
|
||||||
|
"sysexit","sysret","test","tpause","tzcnt","ucomisd","ucomiss","ud","umonitor","umwait",
|
||||||
|
"unpckhpd","unpckhps","unpcklpd","unpcklps","valignd","valignq","vblendmpd","vblendmps","vbroadcast","vcompresspd",
|
||||||
|
"vcompressps","vcompressw","vcvtne2ps2bf16","vcvtneps2bf16","vcvtpd2qq","vcvtpd2udq","vcvtpd2uqq","vcvtph2ps","vcvtps2ph","vcvtps2qq",
|
||||||
|
"vcvtps2udq","vcvtps2uqq","vcvtqq2pd","vcvtqq2ps","vcvtsd2usi","vcvtss2usi","vcvttpd2qq","vcvttpd2udq","vcvttpd2uqq","vcvttps2qq",
|
||||||
|
"vcvttps2udq","vcvttps2uqq","vcvttsd2usi","vcvttss2usi","vcvtudq2pd","vcvtudq2ps","vcvtuqq2pd","vcvtuqq2ps","vcvtusi2sd","vcvtusi2ss",
|
||||||
|
"vdbpsadbw","vdpbf16ps","verr","verw","vexpandpd","vexpandps","vextractf128","vextractf32x4","vextractf32x8","vextractf64x2",
|
||||||
|
"vextractf64x4","vextracti128","vextracti32x4","vextracti32x8","vextracti64x2","vextracti64x4","vfixupimmpd","vfixupimmps","vfixupimmsd","vfixupimmss",
|
||||||
|
"vfmadd132pd","vfmadd132ps","vfmadd132sd","vfmadd132ss","vfmadd213pd","vfmadd213ps","vfmadd213sd","vfmadd213ss","vfmadd231pd","vfmadd231ps",
|
||||||
|
"vfmadd231sd","vfmadd231ss","vfmaddsub132pd","vfmaddsub132ps","vfmaddsub213pd","vfmaddsub213ps","vfmaddsub231pd","vfmaddsub231ps","vfmsub132pd","vfmsub132ps",
|
||||||
|
"vfmsub132sd","vfmsub132ss","vfmsub213pd","vfmsub213ps","vfmsub213sd","vfmsub213ss","vfmsub231pd","vfmsub231ps","vfmsub231sd","vfmsub231ss",
|
||||||
|
"vfmsubadd132pd","vfmsubadd132ps","vfmsubadd213pd","vfmsubadd213ps","vfmsubadd231pd","vfmsubadd231ps","vfnmadd132pd","vfnmadd132ps","vfnmadd132sd","vfnmadd132ss",
|
||||||
|
"vfnmadd213pd","vfnmadd213ps","vfnmadd213sd","vfnmadd213ss","vfnmadd231pd","vfnmadd231ps","vfnmadd231sd","vfnmadd231ss","vfnmsub132pd","vfnmsub132ps",
|
||||||
|
"vfnmsub132sd","vfnmsub132ss","vfnmsub213pd","vfnmsub213ps","vfnmsub213sd","vfnmsub213ss","vfnmsub231pd","vfnmsub231ps","vfnmsub231sd","vfnmsub231ss",
|
||||||
|
"vfpclasspd","vfpclassps","vfpclasssd","vfpclassss","vgatherdpd","vgatherdps","vgatherqpd","vgatherqps","vgetexppd","vgetexpps",
|
||||||
|
"vgetexpsd","vgetexpss","vgetmantpd","vgetmantps","vgetmantsd","vgetmantss","vinsertf128","vinsertf32x4","vinsertf32x8","vinsertf64x2",
|
||||||
|
"vinsertf64x4","vinserti128","vinserti32x4","vinserti32x8","vinserti64x2","vinserti64x4","vmaskmov","vmovdqa32","vmovdqa64","vmovdqu16",
|
||||||
|
"vmovdqu32","vmovdqu64","vmovdqu8","vp2intersectd","vp2intersectq","vpblendd","vpblendmb","vpblendmd","vpblendmq","vpblendmw",
|
||||||
|
"vpbroadcast","vpbroadcastb","vpbroadcastd","vpbroadcastm","vpbroadcastq","vpbroadcastw","vpcmpb","vpcmpd","vpcmpq","vpcmpub",
|
||||||
|
"vpcmpud","vpcmpuq","vpcmpuw","vpcmpw","vpcompressb","vpcompressd","vpcompressq","vpconflictd","vpconflictq","vpdpbusd",
|
||||||
|
"vpdpbusds","vpdpwssd","vpdpwssds","vperm2f128","vperm2i128","vpermb","vpermd","vpermi2b","vpermi2d","vpermi2pd",
|
||||||
|
"vpermi2ps","vpermi2q","vpermi2w","vpermilpd","vpermilps","vpermpd","vpermps","vpermq","vpermt2b","vpermt2d",
|
||||||
|
"vpermt2pd","vpermt2ps","vpermt2q","vpermt2w","vpermw","vpexpandb","vpexpandd","vpexpandq","vpexpandw","vpgatherdd",
|
||||||
|
"vpgatherdq","vpgatherqd","vpgatherqq","vplzcntd","vplzcntq","vpmadd52huq","vpmadd52luq","vpmaskmov","vpmovb2m","vpmovd2m",
|
||||||
|
"vpmovdb","vpmovdw","vpmovm2b","vpmovm2d","vpmovm2q","vpmovm2w","vpmovq2m","vpmovqb","vpmovqd","vpmovqw",
|
||||||
|
"vpmovsdb","vpmovsdw","vpmovsqb","vpmovsqd","vpmovsqw","vpmovswb","vpmovusdb","vpmovusdw","vpmovusqb","vpmovusqd",
|
||||||
|
"vpmovusqw","vpmovuswb","vpmovw2m","vpmovwb","vpmultishiftqb","vpopcnt","vprold","vprolq","vprolvd","vprolvq",
|
||||||
|
"vprord","vprorq","vprorvd","vprorvq","vpscatterdd","vpscatterdq","vpscatterqd","vpscatterqq","vpshld","vpshldv",
|
||||||
|
"vpshrd","vpshrdv","vpshufbitqmb","vpsllvd","vpsllvq","vpsllvw","vpsravd","vpsravq","vpsravw","vpsrlvd",
|
||||||
|
"vpsrlvq","vpsrlvw","vpternlogd","vpternlogq","vptestmb","vptestmd","vptestmq","vptestmw","vptestnmb","vptestnmd",
|
||||||
|
"vptestnmq","vptestnmw","vrangepd","vrangeps","vrangesd","vrangess","vrcp14pd","vrcp14ps","vrcp14sd","vrcp14ss",
|
||||||
|
"vreducepd","vreduceps","vreducesd","vreducess","vrndscalepd","vrndscaleps","vrndscalesd","vrndscaless","vrsqrt14pd","vrsqrt14ps",
|
||||||
|
"vrsqrt14sd","vrsqrt14ss","vscalefpd","vscalefps","vscalefsd","vscalefss","vscatterdpd","vscatterdps","vscatterqpd","vscatterqps",
|
||||||
|
"vshuff32x4","vshuff64x2","vshufi32x4","vshufi64x2","vtestpd","vtestps","vzeroall","vzeroupper","wait","wbinvd",
|
||||||
|
"wbnoinvd","wrfsbase","wrgsbase","wrmsr","wrpkru","wrssd","wrssq","wrussd","wrussq","xabort",
|
||||||
|
"xacquire","xadd","xbegin","xchg","xend","xgetbv","xlat","xlatb","xor","xorpd",
|
||||||
|
"xorps","xrelease","xrstor","xrstors","xsave","xsavec","xsaveopt","xsaves","xsetbv","xtest",
|
||||||
};
|
};
|
||||||
|
|
||||||
const QSet<QString> ASMSyntaxer::Directives {
|
const QSet<QString> ASMSyntaxer::Directives {
|
||||||
|
@ -101,9 +197,37 @@ const QSet<QString> ASMSyntaxer::Directives {
|
||||||
"equ","times","word","dword","byte","tword"
|
"equ","times","word","dword","byte","tword"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const QSet<QString> ASMSyntaxer::ATTDirectives {
|
||||||
|
".abort",".align",".altmacro",".ascii",
|
||||||
|
".asciz",".attach",".balign",".bss",
|
||||||
|
".bundle",".byte",".comm",".data",
|
||||||
|
".dc",".dcb",".ds",".def", ".desc",
|
||||||
|
".dim","double",".eject",".else",
|
||||||
|
".elseif",".end",".endef","endfunc",
|
||||||
|
".endif",".equ",".equiv",".eqy",
|
||||||
|
".err",".error",".exitm",".extern",
|
||||||
|
".fail",".file",".fill", ".float",
|
||||||
|
".func",".global",".gnu",".hidden",
|
||||||
|
".hword",".ident",".if", ".incbin",
|
||||||
|
".inclue", ".int", ".internal", ".irp",
|
||||||
|
".irpc",".lcomm",".lflags",".line",".linkonce",
|
||||||
|
".list", ".ln", ".loc",".local",".macro",
|
||||||
|
".mri",".noaltmacro",".nolist",".nop",".nops",
|
||||||
|
".octa",".offset",".org",".p2align",".popsection",
|
||||||
|
".previous",".print",".protected",".psize",
|
||||||
|
".purgem",".pushsection",".quad",".reloc",
|
||||||
|
".rept", ".sbttl", ".scl", ".section",
|
||||||
|
".set", ".short", ".single", ".size",
|
||||||
|
".skip", ".sleb128", ".space_size", ".stabd",
|
||||||
|
".stabn", ".stabs", ".string", ".string8", ".string16",
|
||||||
|
".struct", ".subsection", ".symver", ".tag", ".text",
|
||||||
|
".title", ".tls", ".type", ".uleb128", ".val",".version",
|
||||||
|
".vtable", ".warning",".weak",".weakref",".word",
|
||||||
|
".zero",".2byte",".4byte",".8byte"
|
||||||
|
};
|
||||||
|
|
||||||
|
ASMSyntaxer::ASMSyntaxer(bool isATT):
|
||||||
ASMSyntaxer::ASMSyntaxer()
|
mATT(isATT)
|
||||||
{
|
{
|
||||||
mNumberAttribute = std::make_shared<TokenAttribute>(SYNS_AttrNumber, TokenType::Number);
|
mNumberAttribute = std::make_shared<TokenAttribute>(SYNS_AttrNumber, TokenType::Number);
|
||||||
addAttribute(mNumberAttribute);
|
addAttribute(mNumberAttribute);
|
||||||
|
@ -125,6 +249,16 @@ const PTokenAttribute &ASMSyntaxer::registerAttribute() const
|
||||||
return mRegisterAttribute;
|
return mRegisterAttribute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ASMSyntaxer::isATT() const
|
||||||
|
{
|
||||||
|
return mATT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASMSyntaxer::setATT(bool newATT)
|
||||||
|
{
|
||||||
|
mATT = newATT;
|
||||||
|
}
|
||||||
|
|
||||||
void ASMSyntaxer::CommentProc()
|
void ASMSyntaxer::CommentProc()
|
||||||
{
|
{
|
||||||
mTokenID = TokenId::Comment;
|
mTokenID = TokenId::Comment;
|
||||||
|
@ -311,6 +445,8 @@ QString ASMSyntaxer::languageName()
|
||||||
|
|
||||||
ProgrammingLanguage ASMSyntaxer::language()
|
ProgrammingLanguage ASMSyntaxer::language()
|
||||||
{
|
{
|
||||||
|
if (isATT())
|
||||||
|
return ProgrammingLanguage::ATTAssembly;
|
||||||
return ProgrammingLanguage::Assembly;
|
return ProgrammingLanguage::Assembly;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,8 +606,13 @@ void ASMSyntaxer::resetState()
|
||||||
QSet<QString> ASMSyntaxer::keywords() const
|
QSet<QString> ASMSyntaxer::keywords() const
|
||||||
{
|
{
|
||||||
QSet<QString> result=Instructions;
|
QSet<QString> result=Instructions;
|
||||||
|
if (!isATT()) {
|
||||||
result.unite(Directives);
|
result.unite(Directives);
|
||||||
result.unite(Registers);
|
result.unite(Registers);
|
||||||
|
} else {
|
||||||
|
result.unite(ATTDirectives);
|
||||||
|
result.unite(ATTRegisters);
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ class ASMSyntaxer : public Syntaxer
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ASMSyntaxer();
|
explicit ASMSyntaxer(bool isATT=false);
|
||||||
ASMSyntaxer(const ASMSyntaxer&)=delete;
|
ASMSyntaxer(const ASMSyntaxer&)=delete;
|
||||||
ASMSyntaxer& operator=(const ASMSyntaxer&)=delete;
|
ASMSyntaxer& operator=(const ASMSyntaxer&)=delete;
|
||||||
|
|
||||||
|
@ -55,7 +55,9 @@ public:
|
||||||
|
|
||||||
static const QSet<QString> Instructions;
|
static const QSet<QString> Instructions;
|
||||||
static const QSet<QString> Registers;
|
static const QSet<QString> Registers;
|
||||||
|
static const QSet<QString> ATTRegisters;
|
||||||
static const QSet<QString> Directives;
|
static const QSet<QString> Directives;
|
||||||
|
static const QSet<QString> ATTDirectives;
|
||||||
private:
|
private:
|
||||||
QChar* mLine;
|
QChar* mLine;
|
||||||
QString mLineString;
|
QString mLineString;
|
||||||
|
@ -70,6 +72,7 @@ private:
|
||||||
PTokenAttribute mDirectiveAttribute;
|
PTokenAttribute mDirectiveAttribute;
|
||||||
PTokenAttribute mRegisterAttribute;
|
PTokenAttribute mRegisterAttribute;
|
||||||
PTokenAttribute mLabelAttribute;
|
PTokenAttribute mLabelAttribute;
|
||||||
|
bool mATT;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CommentProc();
|
void CommentProc();
|
||||||
|
@ -113,6 +116,8 @@ public:
|
||||||
public:
|
public:
|
||||||
QSet<QString> keywords() const override;
|
QSet<QString> keywords() const override;
|
||||||
|
|
||||||
|
bool isATT() const;
|
||||||
|
void setATT(bool newATT);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,7 @@ enum class ProgrammingLanguage {
|
||||||
DecideBySuffix,
|
DecideBySuffix,
|
||||||
Composition,
|
Composition,
|
||||||
Assembly,
|
Assembly,
|
||||||
|
ATTAssembly,
|
||||||
CPP,
|
CPP,
|
||||||
GLSL,
|
GLSL,
|
||||||
Makefile,
|
Makefile,
|
||||||
|
|
Loading…
Reference in New Issue