From 9459266bf455bd817f382202a88e6ca3d40d4fcc Mon Sep 17 00:00:00 2001 From: msojocs Date: Thu, 29 Jun 2023 22:44:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/include/wxml.h | 33 ++++++++++++++++++--------------- src/wxml/compiler.cpp | 32 ++++++++++++++++++++++---------- src/wxml/dom_lib/machine.cpp | 11 ++++++++--- src/wxml/dom_lib/parser.cpp | 10 ++++++---- src/wxml/dom_lib/wxml_dom.cpp | 2 +- 5 files changed, 55 insertions(+), 33 deletions(-) diff --git a/src/include/wxml.h b/src/include/wxml.h index 736a8bb..5f605c3 100644 --- a/src/include/wxml.h +++ b/src/include/wxml.h @@ -75,12 +75,12 @@ namespace WXML */ private: /* data */ - std::string offset_0 = ""; // content bool offset_28 = false; // hasCache toString std::string offset_32 = ""; // chcheData toString - bool offset_84; // hasCache attrContent + bool offset_84 = false; // hasCache attrContent std::string offset_88; // chcheData attrContent public: + std::string offset_0 = ""; // content int offset_8 = 0; // ??? int offset_12 = 0; // ??? int offset_16 = 0; // pos @@ -88,7 +88,7 @@ namespace WXML int offset_24 = 0; // ??? int offset_40 = 0; // AttrsCompartor用到,怎么来不知道 int offset_56 = 0; // ??? -3, -1 - std::string offset_60; // ??? + std::string offset_60 = ""; // ??? Token(); Token(std::string &); Token(WXML::DOMLib::Token&&); @@ -228,9 +228,10 @@ namespace WXML class WXMLDom { private: - /* data */ + /* + 偏移应该不超过0x128u, 296 + */ bool offset_28; - std::map offset_48; // std::string offset_52; int offset_92; // pos1 int offset_96; // pos2 @@ -243,6 +244,7 @@ namespace WXML std::string offset_0; // type std::map offset_12; std::string offset_24; // ??? + std::map offset_48; std::vector> offset_72; // int offset_256; // ??? WXML::DOMLib::Token offset_84; // token @@ -324,19 +326,20 @@ namespace WXML { private: /* data */ - std::shared_ptr dom; - std::vector tokenList; - int offset_4; + std::shared_ptr dom; // offset_4 ? + int offset_4 = 0; std::deque dequeStr;// offset_8 - int offset_16; - int offset_32; // _DWORD * a1[8] - int offset_36; // - int offset_40; - int offset_44; + int offset_16 = 0; + int offset_32 = 0; // _DWORD * a1[8] + int offset_36 = 0; // + int offset_40 = 0; + int offset_44 = 0; std::deque> dequeDom; // offset_48 int a1 + 48, _DWORD * a1 + 12 + std::vector tokenList; // offset_88 int peekIndex = 0; // offset_100 WXML::DOMLib::Token offset_104; - int offset_128; + int offset_128 = 0; + WXML::DOMLib::Token offset_216; std::string filePath; public: Parser(/* args */); @@ -443,7 +446,7 @@ namespace WXML std::string& a7 ); - // void GetFuncId(); + std::string GetFuncId(std::map &, std::string const&); void GetVersionInfo(std::string &a1, std::string a2); int RenderDefine( WXML::DOMLib::WXMLDom &, diff --git a/src/wxml/compiler.cpp b/src/wxml/compiler.cpp index 882dc8f..5442c3c 100644 --- a/src/wxml/compiler.cpp +++ b/src/wxml/compiler.cpp @@ -61,9 +61,9 @@ namespace WXML{ } ss << fMark; ss << "['"; - //ss << ToStringCode(fileName); + ss << WXML::Rewrite::ToStringCode(filePath); ss << "']['"; - //ss << ToStringCode(t); + ss << WXML::Rewrite::ToStringCode(t); ss << "'] ="; int r = 1; @@ -94,19 +94,19 @@ namespace WXML{ throw 1; } ss << "f_['"; - // ss << ToStringCode(v81); + // ss << WXML::Rewrite::ToStringCode(v81); ss << "'] || "; ss << "nv_require(\""; - // ss << ToStringCode("p_" + v81); + // ss << WXML::Rewrite::ToStringCode("p_" + v81); ss << "\");"; ss << lineEndMark; ss << fMark; ss << "['"; - // ss << ToStringCode(fileName); + ss << WXML::Rewrite::ToStringCode(filePath); ss << "']['"; - // ss << ToStringCode(v74); + // ss << WXML::Rewrite::ToStringCode(v74); ss << "']();"; ss << lineEndMark; @@ -257,10 +257,11 @@ namespace WXML{ std::stringstream info; info << "WXML::Compiler::CompileLazy: file name to paths:\n"; info << " all files: [ "; - // for (size_t i = 0; i < count; i++) - // { - // /* code */ - // } + for (size_t i = 0; i < 6; i++) + { + /* code */ + info << " "; + } info << "];\n"; @@ -461,6 +462,17 @@ namespace WXML{ { result.assign(aIfThisThisGUnd); } + std::string GetFuncId(std::map & a2, std::string const& a3) + { + std::string result = ""; + if(!a2.count(a3)) + { + // a2.insert({}) + } + auto v5 = a2[a3]; + sprintf(&result[0], "np_%d", v5); + return result; + } } // namespace Compiler diff --git a/src/wxml/dom_lib/machine.cpp b/src/wxml/dom_lib/machine.cpp index c194380..de20fd1 100644 --- a/src/wxml/dom_lib/machine.cpp +++ b/src/wxml/dom_lib/machine.cpp @@ -405,17 +405,22 @@ namespace WXML this->lineLength++; if (bittest(&v46, 0x12u)) // 0x12 -> 18 { + WXML::DOMLib::Token v49; + v49.offset_8 = this->offset_16; + v49.offset_12 = this->offset_20; this->offset_4 = this->fileLength; this->offset_20 = this->lineLength; this->offset_16 = this->lineCount; - if (WXML::DOMLib::Machine::STT[v45] == 3) + v49.offset_16 = this->offset_4; + v49.offset_20 = this->lineLength + 1 - this->offset_4; + int stt = WXML::DOMLib::Machine::STT[v45]; + v49.offset_24 = stt; + if (stt == 3) { - WXML::DOMLib::Token v49; a5.push_back(v49); } else { - WXML::DOMLib::Token v49; a3.push_back(v49); } } diff --git a/src/wxml/dom_lib/parser.cpp b/src/wxml/dom_lib/parser.cpp index 5503c63..e7b72b4 100644 --- a/src/wxml/dom_lib/parser.cpp +++ b/src/wxml/dom_lib/parser.cpp @@ -24,10 +24,10 @@ namespace WXML { // if(!token) // throw "unexpected attribute name" - int v20; + int v20 = token.offset_24; for (int i = 0; i < v20; i++) { - char v3; + char v3 = token.offset_16 + token.offset_0[i]; if ((v3 & 0xDF) - 'A' > 25 && (v3 - '0') > 10 && v3 != '_' @@ -52,11 +52,13 @@ namespace WXML { this->peekIndex++; auto v7 = this->dequeDom.back(); + v7->offset_48[v4] = v6; } } else { auto v9 = this->dequeDom.back(); + v9->offset_48[v4] = this->offset_216; } } @@ -135,9 +137,9 @@ namespace WXML } else { - this->offset_32 += 24; + this->offset_32 += 24; // 0x18h } - std::shared_ptr domPtr; + std::shared_ptr domPtr(new WXML::DOMLib::WXMLDom()); domPtr->offset_0.assign(tag); domPtr->offset_24.assign(domPtr->offset_0); domPtr->offset_84 = token; diff --git a/src/wxml/dom_lib/wxml_dom.cpp b/src/wxml/dom_lib/wxml_dom.cpp index 65a4225..6feec33 100644 --- a/src/wxml/dom_lib/wxml_dom.cpp +++ b/src/wxml/dom_lib/wxml_dom.cpp @@ -157,7 +157,7 @@ namespace WXML { { a6 << "cs.push(\""; std::string sc = WXML::Rewrite::ToStringCode(a2); - a6 << sc << ":" << this->offset_0 << ":" << this->offset_92 << ":" << this->offset_96 << "\")"; + a6 << sc << ":" << this->offset_24 << ":" << this->offset_92 << ":" << this->offset_96 << "\")"; } if (this->offset_0 == "TEXTNODE") {