#include "asm.h" Asm::Asm() { } void Asm::strip_comment(QString *line) { bool in_string = false; for (int i = 0; i < line->length(); i++) { if (line->at(i) == '"') { in_string = !in_string; } else if (line->at(i) == '@') { if (!in_string) { line->truncate(i); break; } } } } QList* Asm::parse(QString text) { QList *parsed = new QList; QStringList lines = text.split('\n'); for (QString line : lines) { QString label; //QString macro; //QStringList *params; strip_comment(&line); if (line.trimmed().isEmpty()) { } else if (line.contains(':')) { label = line.left(line.indexOf(':')); QStringList *list = new QStringList; list->append(".label"); // This is not a real keyword. It's used only to make the output more regular. list->append(label); parsed->append(*list); // There should not be anything else on the line. // gas will raise a syntax error if there is. } else { line = line.trimmed(); //parsed->append(line.split(QRegExp("\\s*,\\s*"))); QString macro; QStringList params; int index = line.indexOf(QRegExp("\\s+")); macro = line.left(index); params = line.right(line.length() - index).trimmed().split(QRegExp("\\s*,\\s*")); params.prepend(macro); parsed->append(params); } //if (macro != NULL) { // if (macros->contains(macro)) { // void* function = macros->value(macro); // if (function != NULL) { // std::function function(params); // } // } //} } return parsed; }