feat: 增加部分方法

This commit is contained in:
msojocs 2023-07-08 22:33:59 +08:00
parent 6f3f2500d0
commit fc4f2347f2
10 changed files with 652 additions and 136 deletions

View File

@ -30,8 +30,10 @@ add_executable(wcc
src/night/ns_stream.cpp src/night/ns_stream.cpp
src/night/ns_token.cpp src/night/ns_token.cpp
src/night/ns_god/ns_god.cpp src/night/ns_god/ns_god.cpp
src/wxml/expr_lib/parser.cpp src/wxml/expr_lib/common.cpp
src/wxml/expr_lib/expr_syntax_tree.cpp src/wxml/expr_lib/expr_syntax_tree.cpp
src/wxml/expr_lib/parser.cpp
src/wxml/expr_lib/token.cpp
src/wxml/compiler.cpp src/wxml/compiler.cpp
src/wxml/dom_lib/str_cache.cpp src/wxml/dom_lib/str_cache.cpp
src/wxml/dom_lib/wxml_dom.cpp src/wxml/dom_lib/wxml_dom.cpp

View File

@ -259,7 +259,6 @@ namespace WXML
/* /*
0x128u, 296 0x128u, 296
*/ */
bool offset_28 = 0;
// std::string offset_52; // std::string offset_52;
int offset_92 = 0; // pos1 int offset_92 = 0; // pos1
int offset_96 = 0; // pos2 int offset_96 = 0; // pos2
@ -344,6 +343,7 @@ namespace WXML
std::vector<std::string> const& a3 std::vector<std::string> const& a3
); );
void RecordAllPath(void); void RecordAllPath(void);
void RewriteTree(void);
void Print(int,char const*, std::stringstream *); void Print(int,char const*, std::stringstream *);
void PrintMe(int,char const*, std::stringstream *); void PrintMe(int,char const*, std::stringstream *);
bool operator==(std::string tag); bool operator==(std::string tag);
@ -520,6 +520,8 @@ namespace WXML
namespace EXPRLib namespace EXPRLib
{ {
void OutputAsStringOrKeyWord(std::stringstream &,std::string const&,std::string const&, bool &);
class Parser class Parser
{ {
private: private:
@ -546,19 +548,6 @@ namespace WXML
~Tokenizer(); ~Tokenizer();
}; };
class ExprSyntaxTree
{
private:
/* data */
public:
ExprSyntaxTree(/* args */);
~ExprSyntaxTree();
void RenderAsOps(
std::stringstream & a2,
std::string const& a3,
bool & a4
);
};
class Token class Token
{ {
@ -569,15 +558,46 @@ namespace WXML
*/ */
private: private:
/* data */ /* data */
int type;
std::string tokenName;
public: public:
int offset_0;
std::string offset_4;
Token(/* args */); Token(/* args */);
~Token(); ~Token();
std::string GetLiteral(void);
const char * GetTokenName(); const char * GetTokenName();
}; };
class ExprSyntaxTree
{
private:
/* data */
public:
std::string offset_0;
WXML::EXPRLib::Token offset_24;
// offset_52
ExprSyntaxTree(/* args */);
~ExprSyntaxTree();
void RenderAsOps(
std::stringstream & a2,
std::string const& a3,
bool & a4
);
};
enum OPShort
{
AOP = 2,
CONST = 1,
CON_LIST = 5,
CS_GLOBAL = 11,
DO_FUNC = 12,
EX_DICT = 10,
GET_FROM_ENV = 7,
GET_NAME = 6,
MAKE_KV = 8,
MAKE_LIST = 4,
NAME = 3,
UNION_KV = 9
};
} // namespace EXPRLib } // namespace EXPRLib

View File

@ -17,7 +17,7 @@ int readFile (const char* fileName, std::string &result) {
char buf[1024]; char buf[1024];
unsigned int len; unsigned int len;
result = "\0"; result = "";
if (fileName) if (fileName)
f = fopen(fileName, "r"); f = fopen(fileName, "r");
if (!f) { if (!f) {
@ -29,7 +29,12 @@ int readFile (const char* fileName, std::string &result) {
while (fgets(buf, 1024, f)) while (fgets(buf, 1024, f))
{ {
len = strlen(buf); len = strlen(buf);
result.append(buf, len); for (int i = 0; i < len; i++)
{
if (buf[i] != '\r')
result.push_back(buf[i]);
}
} }
if (f) { if (f) {
fclose(f); fclose(f);

View File

@ -235,6 +235,7 @@ namespace WXML{
v311, // ??? a11 v311, // ??? a11
(mark & 4) != 0, // a11 -> mark a12 (mark & 4) != 0, // a11 -> mark a12
(mark & 0x20) != 0); // a13 (mark & 0x20) != 0); // a13
// printf("parse result: %d", parseResult);
} }
// mark - 5 // mark - 5
std::shared_ptr<std::stringstream> v301_localCommonStream1(new std::stringstream()); // v301 std::shared_ptr<std::stringstream> v301_localCommonStream1(new std::stringstream()); // v301
@ -325,6 +326,7 @@ namespace WXML{
// mark - 45 // mark - 45
for (auto i = v304.begin(); i != v304.end(); i++) for (auto i = v304.begin(); i != v304.end(); i++)
{ {
i->second->RewriteTree();
std::string v328 = "ALL"; std::string v328 = "ALL";
auto v51 = componentListMap[v328]; auto v51 = componentListMap[v328];
auto v282 = i->second; auto v282 = i->second;

View File

@ -125,7 +125,7 @@ namespace WXML
if (token.IsMatch("<")) if (token.IsMatch("<"))
{ {
this->peekIndex++; this->peekIndex++;
auto token = this->Peek(); token = this->Peek();
auto tag = token.ToString(); auto tag = token.ToString();
if (!WXML::DOMLib::Parser::IsValidTag(tag)) if (!WXML::DOMLib::Parser::IsValidTag(tag))
{ {

View File

@ -245,7 +245,7 @@ namespace WXML {
} }
else else
{ {
for (auto i = this->offset_48.begin(); i != this->offset_48.end(); i++) for (auto i = this->offset_48.rbegin(); i != this->offset_48.rend(); i++)
{ {
if ( if (
i->second.offset_20 i->second.offset_20
@ -254,8 +254,8 @@ namespace WXML {
) )
{ {
if ( if (
this->offset_0 == "wx-template" && i->first == "data" (this->offset_0 == "wx-template" && i->first == "data")
|| this->offset_0 == "wx-scope" && i->first == "wx:scope-data" || (this->offset_0 == "wx-scope" && i->first == "wx:scope-data")
) )
{ {
this->DealSingleTokenToOps(a2, a3, a4, a5, &i->second, 1, 1, 0, a6, a7, a8); this->DealSingleTokenToOps(a2, a3, a4, a5, &i->second, 1, 1, 0, a6, a7, a8);
@ -272,6 +272,7 @@ namespace WXML {
} }
} }
return;
} }
void WXMLDom::RenderMeAsFunction( void WXMLDom::RenderMeAsFunction(
std::string const& a2, std::string const& a2,
@ -358,6 +359,174 @@ namespace WXML {
} }
}
void WXMLDom::RewriteTree(void)
{
// RewriteTree - 0
for (int i = 0; i < this->offset_72.size(); i++)
{
auto cur = this->offset_72[i];
auto forItem = cur->offset_48.find("wx:for");
if (forItem != cur->offset_48.end())
{
WXML::DOMLib::Token v4 = forItem->second;
// token.offset_0 = "wx:for-items";
cur->offset_48.emplace("wx:for-items", v4);
cur->offset_48.erase("wx:for");
}
}
// RewriteTree - 5
for (int i = 0; i < this->offset_72.size(); i++)
{
auto cur = this->offset_72[i];
auto forItems = cur->offset_48.find("wx:for-items");
if (forItems == cur->offset_48.end() && cur->offset_0 != "block")
{
const char **v38 = WXML::DOMLib::szWXIFControlAttrs;
while (*v38)
{
std::string v101 = *v38;
auto v9 = cur->offset_48.find(v101);
++v38;
if (v9 != cur->offset_48.end())
{
std::shared_ptr<WXML::DOMLib::WXMLDom> v98(new WXML::DOMLib::WXMLDom());
auto v11 = v9->second;
v98->offset_48.emplace(v101, v9->second);
v98->offset_0 = "block";
v98->offset_24.assign(cur->offset_24);
v98->offset_84 = cur->offset_84;
cur->offset_48.erase(v101);
v98->offset_72.push_back(cur);
this->offset_72[i] = v98;
break;
}
}
}
}
// RewriteTree - 10
for (int i = 0; i < this->offset_72.size(); i++)
{
std::string v35;
bool v52 = false;
auto cur = this->offset_72[i];
if (cur->offset_0 != "template")
{
continue;
}
if (cur->offset_48.end() == cur->offset_48.find("is"))
{
v52 = false;
}
else
{
v52 = cur->offset_48.end() == cur->offset_48.find("name");
}
if (v52)
{
v35 = "wx-template";
}
else
{
v35 = "wx-define";
}
this->offset_72[i]->offset_0 = v35;
}
// RewriteTree - 15
for (int i = 0; i < this->offset_72.size(); i++)
{
auto cur = this->offset_72[i];
if (cur->offset_0 == "block")
{
// TODO...
}
}
// RewriteTree - 20
for (int i = 0; i < this->offset_72.size(); i++)
{
auto cur = this->offset_72[i];
if (cur->offset_0 != "wx-repeat")
{
if (cur->offset_0 != "wx-define")
{
if (cur->offset_0 != "wx-import")
{
if (cur->offset_0 != "import")
{
auto v19 = cur->offset_48.find("wx:for-items");
if (v19 != cur->offset_48.end())
{
std::shared_ptr<WXML::DOMLib::WXMLDom> v91(new WXML::DOMLib::WXMLDom());
v91->offset_0 = "wx-repeat";
v91->offset_24.assign(cur->offset_24);
v91->offset_84 = cur->offset_84;
v91->offset_72.push_back(cur);
WXML::DOMLib::Token v21 = cur->offset_48["wx:for-items"];
v91->offset_48.emplace("wx:for-items", v21);
cur->offset_48.erase("wx:for-items");
auto v59 = cur->offset_48.find("wx:for-item");
if (cur->offset_48.end() != v59)
{
WXML::DOMLib::Token v22 = v59->second;
v91->offset_48.emplace("wx:for-item", v22);
cur->offset_48.erase("wx:for-item");
}
//////////////////////////////"wx:for-index"
auto v63 = cur->offset_48.find("wx:for-index");
if (v63 != cur->offset_48.end())
{
WXML::DOMLib::Token v102 = v63->second;
v91->offset_48.emplace("wx:for-index", v102);
cur->offset_48.erase("wx:for-index");
}
///////////////////////////////"wx:key"
auto v67 = cur->offset_48.find("wx:key");
if (cur->offset_48.end() != v67)
{
WXML::DOMLib::Token v24 = v67->second;
v91->offset_48.emplace("wx:key", v24);
cur->offset_48.erase("wx:key");
}
this->offset_72[i] = v91;
}
}
}
}
}
}
// RewriteTree - 25
for (int i = 0; i < this->offset_72.size(); i++)
{
auto cur = this->offset_72[i];
auto v28 = cur->offset_48.find("wx:scope-data");
if (v28 != cur->offset_48.end())
{
std::shared_ptr<WXML::DOMLib::WXMLDom> v71(new WXML::DOMLib::WXMLDom());
v71->offset_0 = "wx-scope";
v71->offset_24.assign(cur->offset_24);
v71->offset_84 = cur->offset_84;
v71->offset_72.push_back(cur);
WXML::DOMLib::Token v30 = cur->offset_48["wx:scope-data"];
v71->offset_48.emplace("wx:scope-data", v30);
cur->offset_48.erase("wx:scope-data");
this->offset_72[i] = v71;
}
}
// RewriteTree - 30
for (int i = 0; i < this->offset_72.size(); i++)
{
this->offset_72[i]->RewriteTree();
}
} }
/** /**
* *
@ -672,7 +841,7 @@ namespace WXML {
std::map<std::string,std::string> * a15 std::map<std::string,std::string> * a15
) )
{ {
if (a13 && this->offset_28) if (a13 && this->offset_24.size())
{ {
a6 << "cs.push(\""; a6 << "cs.push(\"";
std::string sc = WXML::Rewrite::ToStringCode(a2); std::string sc = WXML::Rewrite::ToStringCode(a2);
@ -697,7 +866,7 @@ namespace WXML {
a6 << a12; a6 << a12;
// goto LABEL_169; // goto LABEL_169;
if (a13 && this->offset_28) if (a13 && this->offset_24.size())
{ {
a6 << "cs.pop()" << a12; a6 << "cs.pop()" << a12;
} }
@ -705,12 +874,12 @@ namespace WXML {
} // TEXTNODE end } // TEXTNODE end
if (this->offset_0 == "wx-define" if (this->offset_0 == "wx-define"
||this->offset_0 == "wx-import" || this->offset_0 == "wx-import"
||this->offset_0 == "import" || this->offset_0 == "import"
||this->offset_0 == "template") || this->offset_0 == "template")
{ {
if (a13 && this->offset_28) if (a13 && this->offset_24.size())
{ {
a6 << "cs.pop()" << a12; a6 << "cs.pop()" << a12;
} }
@ -784,6 +953,15 @@ namespace WXML {
throw "RenderException" + err; throw "RenderException" + err;
} }
if (target2_1.size() == 0)
{
target2_1 = "index";
}
if (target3_1.size() == 0)
{
target3_1 = "item";
}
std::string name1; std::string name1;
a7->GetNextName(name1); a7->GetNextName(name1);
@ -850,10 +1028,9 @@ namespace WXML {
{ {
goto LABEL_57; goto LABEL_57;
} }
v336 = t->second.ToAttrContent(); v336 = t->second.ToAttrContent();
v47 = v336.find('.', 0); v47 = v336.find('.', 0);
if (v47 != -1) if (v47 != -1)
{ {
auto Str = v336.substr(0, v47); auto Str = v336.substr(0, v47);
@ -907,7 +1084,36 @@ namespace WXML {
} }
} }
} }
// if (WXML::DOMLib::Token::IsValidVariableNam(v336)) if (!WXML::DOMLib::Token::IsValidVariableName(v336))
{
if (v336.length())
{
if (v336 == "0")
goto LABEL_56;
if (v336[0] != '0')
{
for (int i_0 = 0; i_0 < v336.length(); i_0++)
{
if (v336[i_0] - '0' > 9u)
{
goto LABEL_189;
}
}
goto LABEL_56;
}
}
LABEL_189:
if (v336 != "*this")
{
a6 << "_wp('" << WXML::Rewrite::ToStringCode(a2) << ":";
a6 << this->offset_24 << ":" << this->offset_92 << ":" << this->offset_96;
a6 << ": wx:key=\"" << WXML::Rewrite::ToStringCode(v336);
a6 << "\" does not look like a valid key name.')" << a12;
goto LABEL_56;
}
}
LABEL_56: //... LABEL_56: //...
LABEL_57: //... LABEL_57: //...
if (this->offset_256) if (this->offset_256)
@ -925,7 +1131,7 @@ namespace WXML {
a6 << target3_1 << "," << target2_1 << ","; a6 << target3_1 << "," << target2_1 << ",";
a6 << this->offset_48[wxKey].ToAttrContent() << ")" << a12; a6 << this->offset_48[wxKey].ToAttrContent() << ")" << a12;
goto LABEL_84; goto LABEL_84;
} } // wx-repeat end
if (this->offset_0 == "block") if (this->offset_0 == "block")
{ {
@ -957,13 +1163,13 @@ namespace WXML {
a6 << this->offset_248.GetStrID(a2); a6 << this->offset_248.GetStrID(a2);
a6 << "]," << a8 << "," << a9 << "," << a5 << "," << a10 << ");" << a12; a6 << "]," << a8 << "," << a9 << "," << a5 << "," << a10 << ");" << a12;
// goto LABEL_68; // goto LABEL_68;
if (a13 && this->offset_28) if (a13 && this->offset_24.size())
{ {
a6 << "cs.pop()" << a12; a6 << "cs.pop()" << a12;
} }
return; return;
} }
if (this->offset_0 == "ex-template") if (this->offset_0 == "wx-template")
{ {
v281 = this->offset_48.find("is"); v281 = this->offset_48.find("is");
if (v281 == this->offset_48.end()) if (v281 == this->offset_48.end())
@ -983,7 +1189,7 @@ namespace WXML {
a6 << a12; a6 << a12;
// goto LABEL_169; // goto LABEL_169;
if (a13 && this->offset_28) if (a13 && this->offset_24.size())
{ {
a6 << "cs.pop()" << a12; a6 << "cs.pop()" << a12;
} }
@ -1156,7 +1362,7 @@ namespace WXML {
// if ((a14 & 1) != 0) // if ((a14 & 1) != 0)
// this->AddTestAttr(a5, a6, '\n'/*10*/); // this->AddTestAttr(a5, a6, '\n'/*10*/);
LABEL_169: LABEL_169:
if (a13 && this->offset_28) if (a13 && this->offset_24.size())
{ {
a6 << "cs.pop()" << a12; a6 << "cs.pop()" << a12;
} }
@ -1452,7 +1658,7 @@ namespace WXML {
} }
bool WXMLDom::operator==(std::string tag) bool WXMLDom::operator==(std::string tag)
{ {
return this->offset_0.compare(tag) == 0; return this->offset_0 == tag;
} }
std::string WXMLDom::Error( std::string WXMLDom::Error(
std::string const& a2, std::string const& a2,

View File

@ -0,0 +1,30 @@
#include "../../include/wxml.h"
namespace WXML
{
namespace EXPRLib
{
void OutputAsStringOrKeyWord(
std::stringstream & a1,
std::string const& a2,
std::string const& a3,
bool &a4)
{
if (a2 == "true")
{
a1 << WXML::EXPRLib::OPShort::CONST << ",true";
return;
}
if (a2 == "false")
{
a1 << WXML::EXPRLib::OPShort::CONST << ",false";
}
if (a2 != "$global")
{
a1 << WXML::EXPRLib::OPShort::NAME << ",'" << a2 << "'";
}
a1 << WXML::EXPRLib::OPShort::CS_GLOBAL;
}
}
}

View File

@ -20,7 +20,155 @@ namespace WXML
bool & a4 bool & a4
) )
{ {
// RenderAsOps - 0
a2 << "[";
if (this->offset_0[0] == '$')
{
if (this->offset_0 == "$VAR")
{
std::string v47 = this->offset_24.GetLiteral();
WXML::EXPRLib::OutputAsStringOrKeyWord(a2, v47, a3, a4);
}
else if(this->offset_0 == "$STRING")
{
a2 << WXML::EXPRLib::OPShort::CONST << ",'";
std::string v6 = this->offset_24.GetLiteral();
// WXML::Rewrite::ToStringCode(v6.size(), ,a2);
const char off_5542FA[] = {'\'','\0','[','\0'};
a2 << off_5542FA;
}
else
{
a2 << WXML::EXPRLib::OPShort::CONST << ",'";
std::string v33 = this->offset_24.GetLiteral();
a2 << v33;
}
a2 << "]";
return ;
}
// RenderAsOps - 5
if (
this->offset_0[0] == 'O'
&& this->offset_0[0] == 'P'
&& this->offset_0[0] == '_'
)
{
if (this->offset_0 == "OP_PATH")
{
// if (this->offset_52.size() != 1)
// {
// a2 << "]";
// return;
// }
a2 << "[" << WXML::EXPRLib::OPShort::GET_FROM_ENV << "],";
WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
a2 << "]";
return;
}
if (this->offset_0 == "OP_LIST")
{
a2 << "[" << WXML::EXPRLib::OPShort::MAKE_LIST << "],";
// if (this->offset_52.size() == 0)
// {
// a2 << "]";
// return;
// }
WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
a2 << "]";
return;
}
if (this->offset_0 == "OP_LIST_CONCAT")
{
a2 << "[" << WXML::EXPRLib::OPShort::CON_LIST << "]";
// for (int i = 0; i < this->offset_52.size(); i++)
// {
// a2 << ",";
// WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
// }
}
else if (this->offset_0 == "OP_DICT_CONCAT")
{
a2 << "[" << WXML::EXPRLib::OPShort::UNION_KV << "]";
// for (int i = 0; i < this->offset_52.size(); i++)
// {
// a2 << ",";
// WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
// }
}
else if (this->offset_0 == "OP_MAKE_DICT")
{
a2 << "[" << WXML::EXPRLib::OPShort::MAKE_KV << "],'";
// this->offset_52.offset_24;
// a2 << ;
a2 << "',";
// if (this->offset_52.size() == 0)
// {
// a2 << "[" << "[7],";
// WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
// a2 << "]";
// }
// else
// {
// WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
// }
}
else
{
if (this->offset_0 == "OP_EXPAND")
{
a2 << "[" << WXML::EXPRLib::OPShort::EX_DICT << "],";
WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
a2 << "]";
return;
}
if (this->offset_0 == "OP_DICT")
{
a2 << "[" << WXML::EXPRLib::OPShort::GET_NAME << "]";
// for (int i = 0; i < this->offset_52.size(); i++)
// {
// a2 << ",";
// WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
// }
}
else if (this->offset_0 == "OP_FUNC")
{
a2 << "[" << WXML::EXPRLib::OPShort::DO_FUNC << "]";
// for (int i = 0; i < this->offset_52.size(); i++)
// {
// a2 << ",";
// WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
// }
}
}
}
// RenderAsOps - 10
else
{
a2 << "[" << WXML::EXPRLib::OPShort::AOP;
a2 << ",'" << this->offset_0 << "'],";
// for (int i = 0; i < this->offset_52.size(); i++)
// {
// if (i)
// {
// a2 << ",";
// }
// WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
// }
}
// RenderAsOps - 15
a2 << "]";
} }
} }
} }

View File

@ -15,10 +15,10 @@ namespace WXML
const char * Token::GetTokenName() const char * Token::GetTokenName()
{ {
const char *result; const char *result;
switch ( this->type ) switch ( this->offset_0 )
{ {
case 0u: case 0u:
result = this->tokenName.c_str(); result = this->offset_4.data();
break; break;
case 1u: case 1u:
result = "$DECIMAL"; result = "$DECIMAL";
@ -37,7 +37,24 @@ namespace WXML
} }
return result; return result;
} }
std::string Token::GetLiteral(void)
{
std::string result = this->offset_4;
if (this->offset_0)
{
result = "$";
if (this->offset_0 != 5)
{
if (this->offset_4.size())
{
// return
}
}
}
return "";
}
} }
} }

View File

@ -14045,7 +14045,7 @@ struct _Unwind_Exception *__cdecl WXML::Compiler::CompileLazy(
break; break;
WXML::DOMLib::WXMLDom::RewriteTree(*(_DWORD *)(jj + 40)); WXML::DOMLib::WXMLDom::RewriteTree(*(_DWORD *)(jj + 40));
v282 = *((_DWORD *)lpuexcptj + 10); v282 = *((_DWORD *)lpuexcptj + 10);
std::string::basic_string((void **)&v328, (char *)off_550B3F); std::string::basic_string((void **)&v328, (char *)off_550B3F); // "ALL"
v51 = std::map<std::string,std::vector<std::string>>::operator[](a6, &v328); v51 = std::map<std::string,std::vector<std::string>>::operator[](a6, &v328);
WXML::DOMLib::WXMLDom::MarkIfHasDescendant(v282, v51); WXML::DOMLib::WXMLDom::MarkIfHasDescendant(v282, v51);
std::string::_M_dispose((void **)&v328); std::string::_M_dispose((void **)&v328);
@ -22719,7 +22719,8 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
void *v100[6]; // [esp+F4h] [ebp-94h] BYREF void *v100[6]; // [esp+F4h] [ebp-94h] BYREF
const char *v101; // [esp+10Ch] [ebp-7Ch] BYREF const char *v101; // [esp+10Ch] [ebp-7Ch] BYREF
char v102[120]; // [esp+110h] [ebp-78h] BYREF char v102[120]; // [esp+110h] [ebp-78h] BYREF
// RewriteTree - 0
for ( Str = 0; ; ++Str ) for ( Str = 0; ; ++Str )
{ {
v1 = *(_DWORD *)(a1 + 72); v1 = *(_DWORD *)(a1 + 72);
@ -22727,33 +22728,40 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
break; break;
v74 = *(_DWORD *)(v1 + 8 * (_DWORD)Str); v74 = *(_DWORD *)(v1 + 8 * (_DWORD)Str);
std::string::basic_string((void **)&v101, "wx:for"); std::string::basic_string((void **)&v101, "wx:for");
v2 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v2 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
(_DWORD *)(v74 + 48), ::find(
(int)&v101); (_DWORD *)(v74 + 48), // cur->offset_48
(int)&v101); // "wx:for"
v34 = v3; v34 = v3;
Block = v2; Block = v2;
std::string::_M_dispose((void **)&v101); std::string::_M_dispose((void **)&v101);
if ( Block != (void *)(v74 + 52) ) if ( Block != (void *)(v74 + 52) )
{ {
v75 = *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str); v75 = *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str); // cur
std::string::basic_string(v100, "wx:for"); std::string::basic_string(v100, "wx:for");
v4 = std::map<std::string,WXML::DOMLib::Token>::operator[]( v4 = std::map<std::string,WXML::DOMLib::Token>::operator[](
(_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str) + 48), (_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str) + 48), // cur->offset_48
v100); v100); // "wx:for"
// cur->offset_48["wx:for"]
v101 = "wx:for-items"; v101 = "wx:for-items";
// v4
WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v4, v36); WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v4, v36);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>( std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>(
(_DWORD *)(v75 + 48), (_DWORD *)(v75 + 48),
(char **)&v101); (char **)&v101); // "wx:for-items"
WXML::DOMLib::Token::~Token((int)v102); WXML::DOMLib::Token::~Token((int)v102);
std::string::_M_dispose(v100); std::string::_M_dispose(v100);
v76 = (_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str) + 48); v76 = (_DWORD *)(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Str) + 48);
// cur->offset_48
std::string::basic_string((void **)&v101, "wx:for"); std::string::basic_string((void **)&v101, "wx:for");
std::map<std::string,WXML::DOMLib::Token>::erase(v76, (int)&v101); std::map<std::string,WXML::DOMLib::Token>::erase(v76, (int)&v101);
v34 = v5; v34 = v5;
std::string::_M_dispose((void **)&v101); std::string::_M_dispose((void **)&v101);
} }
} }
// RewriteTree - 5
for ( i = 0; ; ++i ) for ( i = 0; ; ++i )
{ {
v6 = *(_DWORD *)(a1 + 72); v6 = *(_DWORD *)(a1 + 72);
@ -22762,12 +22770,15 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
v50 = (char *)(8 * i); v50 = (char *)(8 * i);
Strg = *(char **)(v6 + 8 * i); Strg = *(char **)(v6 + 8 * i);
std::string::basic_string((void **)&v101, "wx:for-items"); std::string::basic_string((void **)&v101, "wx:for-items");
v7 = (char *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v7 = (char *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find(
(_DWORD *)Strg + 12, (_DWORD *)Strg + 12,
(int)&v101); (int)&v101);
v34 = v8; v34 = v8;
Blocka = v7; Blocka = v7;
std::string::_M_dispose((void **)&v101); std::string::_M_dispose((void **)&v101);
// cur->offset_52
// char *Strg
if ( Blocka == Strg + 52 && !std::operator==<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * i), "block") ) if ( Blocka == Strg + 52 && !std::operator==<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * i), "block") )
{ {
v38 = WXML::DOMLib::szWXIFControlAttrs; v38 = WXML::DOMLib::szWXIFControlAttrs;
@ -22776,9 +22787,10 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
Stra = *v38; Stra = *v38;
if ( !*v38 ) if ( !*v38 )
break; break;
Blockb = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * i); Blockb = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * i); // cur
std::string::basic_string((void **)&v101, Stra); std::string::basic_string((void **)&v101, Stra);
v9 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v9 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find(
Blockb + 12, Blockb + 12,
(int)&v101); (int)&v101);
v34 = v10; v34 = v10;
@ -22789,25 +22801,28 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
{ {
std::__shared_ptr<WXML::DOMLib::WXMLDom,(__gnu_cxx::_Lock_policy)2>::__shared_ptr( std::__shared_ptr<WXML::DOMLib::WXMLDom,(__gnu_cxx::_Lock_policy)2>::__shared_ptr(
&v96, &v96,
&v50[*(_DWORD *)(a1 + 72)]); &v50[*(_DWORD *)(a1 + 72)]); // cur
Blockc = operator new(0x128u); Blockc = operator new(0x128u);
WXML::DOMLib::WXMLDom::WXMLDom((int)Blockc); WXML::DOMLib::WXMLDom::WXMLDom((int)Blockc);
zcc::shared_ptr<WXML::DOMLib::WXMLDom>::shared_ptr(Blockc); zcc::shared_ptr<WXML::DOMLib::WXMLDom>::shared_ptr(Blockc);
Blockd = v98; Blockd = v98;
std::string::basic_string(v100, Stra); std::string::basic_string(v100, Stra);
// v96 + 12 -> cur->offset_48[*v38]
v11 = std::map<std::string,WXML::DOMLib::Token>::operator[](v96 + 12, v100); v11 = std::map<std::string,WXML::DOMLib::Token>::operator[](v96 + 12, v100);
v101 = Stra; v101 = Stra; // *v38
WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v11, v36); WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v11, v36);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>( std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
Blockd + 12, ::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>(
Blockd + 12, // cur->offset_48
(char **)&v101); (char **)&v101);
WXML::DOMLib::Token::~Token((int)v102); WXML::DOMLib::Token::~Token((int)v102);
std::string::_M_dispose(v100); std::string::_M_dispose(v100);
std::string::operator=(v98, "block"); std::string::operator=(v98, "block");
// v96 -> cur
WXML::DOMLib::Token::operator=((int)(v98 + 21), (int)(v96 + 21)); WXML::DOMLib::Token::operator=((int)(v98 + 21), (int)(v96 + 21));
std::string::_M_assign((int)(v98 + 6), (int)(v96 + 6)); std::string::_M_assign((int)(v98 + 6), (int)(v96 + 6));
Blocke = v96 + 12; Blocke = v96 + 12;
std::string::basic_string((void **)&v101, Stra); std::string::basic_string((void **)&v101, Stra); // *v38
std::map<std::string,WXML::DOMLib::Token>::erase(Blocke, (int)&v101); std::map<std::string,WXML::DOMLib::Token>::erase(Blocke, (int)&v101);
std::string::_M_dispose((void **)&v101); std::string::_M_dispose((void **)&v101);
std::vector<zcc::shared_ptr<WXML::DOMLib::WXMLDom>>::push_back(v98 + 18, &v96); std::vector<zcc::shared_ptr<WXML::DOMLib::WXMLDom>>::push_back(v98 + 18, &v96);
@ -22822,6 +22837,8 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
} }
} }
} }
// RewriteTree - 10
for ( Strb = 0; ; ++Strb ) for ( Strb = 0; ; ++Strb )
{ {
v14 = *(_DWORD *)(a1 + 72); v14 = *(_DWORD *)(a1 + 72);
@ -22829,9 +22846,11 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
break; break;
if ( !std::operator==<char>(*(_DWORD *)(v14 + 8 * (_DWORD)Strb), "template") ) if ( !std::operator==<char>(*(_DWORD *)(v14 + 8 * (_DWORD)Strb), "template") )
goto LABEL_23; goto LABEL_23;
v51 = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); v51 = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); // cur
std::string::basic_string(v100, "is"); std::string::basic_string(v100, "is");
if ( v51 + 13 == std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( // 13 * 4 = 52
if ( v51 + 13 == std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find(
v51 + 12, v51 + 12,
(int)v100) ) (int)v100) )
{ {
@ -22849,12 +22868,12 @@ int __fastcall WXML::DOMLib::WXMLDom::RewriteTree(int a1)
std::string::_M_dispose(v100); std::string::_M_dispose(v100);
if ( v52 ) if ( v52 )
{ {
v15 = *(unsigned int **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); v15 = *(unsigned int **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); // cur
v35 = "wx-template"; v35 = "wx-template";
} }
else else
{ {
LABEL_23: LABEL_23:
if ( !std::operator==<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb), "template") ) if ( !std::operator==<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb), "template") )
continue; continue;
v15 = *(unsigned int **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb); v15 = *(unsigned int **)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Strb);
@ -22862,6 +22881,8 @@ LABEL_23:
} }
v34 = std::string::operator=(v15, v35); v34 = std::string::operator=(v15, v35);
} }
// RewriteTree - 15
for ( Strc = 0; ; ++Strc ) for ( Strc = 0; ; ++Strc )
{ {
v16 = *(_DWORD *)(a1 + 72); v16 = *(_DWORD *)(a1 + 72);
@ -22873,12 +22894,15 @@ LABEL_23:
v34 = v17; v34 = v17;
} }
} }
// RewriteTree - 20
for ( j = 0; ; ++j ) for ( j = 0; ; ++j )
{ {
v18 = *(_DWORD *)(a1 + 72); v18 = *(_DWORD *)(a1 + 72);
if ( (*(_DWORD *)(a1 + 76) - v18) >> 3 <= j ) if ( (*(_DWORD *)(a1 + 76) - v18) >> 3 <= j )
break; break;
Strd = (char *)(8 * j); Strd = (char *)(8 * j);
// cur->offset_0
if ( (unsigned __int8)std::operator!=<char>(*(_DWORD *)(v18 + 8 * j), "wx-repeat") ) if ( (unsigned __int8)std::operator!=<char>(*(_DWORD *)(v18 + 8 * j), "wx-repeat") )
{ {
if ( (unsigned __int8)std::operator!=<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j), "wx-define") ) if ( (unsigned __int8)std::operator!=<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j), "wx-define") )
@ -22887,11 +22911,12 @@ LABEL_23:
{ {
if ( (unsigned __int8)std::operator!=<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j), "import") ) if ( (unsigned __int8)std::operator!=<char>(*(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j), "import") )
{ {
v54 = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * j); v54 = *(_DWORD **)(*(_DWORD *)(a1 + 72) + 8 * j); // cur
std::string::basic_string((void **)&v101, "wx:for-items"); std::string::basic_string((void **)&v101, "wx:for-items");
v19 = (char *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v19 = (char *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find(
v54 + 12, v54 + 12,
(int)&v101); (int)&v101); // "wx:for-items"
v34 = v20; v34 = v20;
Blockf = v19; Blockf = v19;
std::string::_M_dispose((void **)&v101); std::string::_M_dispose((void **)&v101);
@ -22900,31 +22925,37 @@ LABEL_23:
std::__shared_ptr<WXML::DOMLib::WXMLDom,(__gnu_cxx::_Lock_policy)2>::__shared_ptr( std::__shared_ptr<WXML::DOMLib::WXMLDom,(__gnu_cxx::_Lock_policy)2>::__shared_ptr(
&v89, &v89,
&Strd[*(_DWORD *)(a1 + 72)]); &Strd[*(_DWORD *)(a1 + 72)]);
// cur
v55 = operator new(0x128u); v55 = operator new(0x128u);
WXML::DOMLib::WXMLDom::WXMLDom((int)v55); WXML::DOMLib::WXMLDom::WXMLDom((int)v55);
zcc::shared_ptr<WXML::DOMLib::WXMLDom>::shared_ptr(v55); zcc::shared_ptr<WXML::DOMLib::WXMLDom>::shared_ptr(v55);
std::string::operator=(v91, "wx-repeat"); std::string::operator=(v91, "wx-repeat");
// cur->offset_24
std::string::_M_assign((int)(v91 + 6), *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j) + 24); std::string::_M_assign((int)(v91 + 6), *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * j) + 24);
WXML::DOMLib::Token::operator=((int)(v91 + 21), (int)(v89 + 21)); WXML::DOMLib::Token::operator=((int)(v91 + 21), (int)(v89 + 21));
std::vector<zcc::shared_ptr<WXML::DOMLib::WXMLDom>>::push_back(v91 + 18, &v89); std::vector<zcc::shared_ptr<WXML::DOMLib::WXMLDom>>::push_back(v91 + 18, &v89);
v56 = v91; v56 = v91;
std::string::basic_string(v100, "wx:for-items"); std::string::basic_string(v100, "wx:for-items");
// cur->offset_48["wx:for-items"]
v21 = std::map<std::string,WXML::DOMLib::Token>::operator[](v89 + 12, v100); v21 = std::map<std::string,WXML::DOMLib::Token>::operator[](v89 + 12, v100);
v101 = "wx:for-items"; v101 = "wx:for-items";
WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v21, v36); WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v21, v36);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>( std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>(
v56 + 12, v56 + 12,
(char **)&v101); (char **)&v101);
WXML::DOMLib::Token::~Token((int)v102); WXML::DOMLib::Token::~Token((int)v102);
std::string::_M_dispose(v100); std::string::_M_dispose(v100);
v57 = v89 + 12; v57 = v89 + 12;
// v89 -> cur
std::string::basic_string(v93, "wx:for-items"); std::string::basic_string(v93, "wx:for-items");
std::map<std::string,WXML::DOMLib::Token>::erase(v57, (int)v93); std::map<std::string,WXML::DOMLib::Token>::erase(v57, (int)v93);
std::string::_M_dispose(v93); std::string::_M_dispose(v93);
v58 = v89; v58 = v89; // cur
Blockg = v89 + 13; Blockg = v89 + 13; // cur->offset_52 end
std::string::basic_string(v94, "wx:for-item"); std::string::basic_string(v94, "wx:for-item");
v59 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v59 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find(
v58 + 12, v58 + 12,
(int)v94); (int)v94);
std::string::_M_dispose(v94); std::string::_M_dispose(v94);
@ -22932,34 +22963,41 @@ LABEL_23:
{ {
v60 = v91; v60 = v91;
std::string::basic_string(v100, "wx:for-item"); std::string::basic_string(v100, "wx:for-item");
// cur->offset_48["wx:for-item"]
v22 = std::map<std::string,WXML::DOMLib::Token>::operator[](v89 + 12, v100); v22 = std::map<std::string,WXML::DOMLib::Token>::operator[](v89 + 12, v100);
v101 = "wx:for-item"; v101 = "wx:for-item";
WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v22, v36); WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v22, v36);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>( std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>(
v60 + 12, v60 + 12,
(char **)&v101); (char **)&v101); // "wx:for-item"
WXML::DOMLib::Token::~Token((int)v102); WXML::DOMLib::Token::~Token((int)v102);
std::string::_M_dispose(v100); std::string::_M_dispose(v100);
v61 = v89 + 12; v61 = v89 + 12; // cur->offset_48
std::string::basic_string(v95, "wx:for-item"); std::string::basic_string(v95, "wx:for-item");
std::map<std::string,WXML::DOMLib::Token>::erase(v61, (int)v95); std::map<std::string,WXML::DOMLib::Token>::erase(v61, (int)v95);
std::string::_M_dispose(v95); std::string::_M_dispose(v95);
} }
v62 = v89;
Blockh = v89 + 13; //////////////////////////////////////"wx:for-index"
v62 = v89; // cur
Blockh = v89 + 13; // cur->offset_48.end()
std::string::basic_string((void **)&v96, "wx:for-index"); std::string::basic_string((void **)&v96, "wx:for-index");
v63 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v63 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
v62 + 12, ::find(
(int)&v96); v62 + 12, // cur->offset_48
(int)&v96); // "wx:for-index"
std::string::_M_dispose((void **)&v96); std::string::_M_dispose((void **)&v96);
if ( v63 != Blockh ) if ( v63 != Blockh )
{ {
v64 = v91; v64 = v91;
std::string::basic_string(v100, "wx:for-index"); std::string::basic_string(v100, "wx:for-index");
// cur->offset_48
v23 = std::map<std::string,WXML::DOMLib::Token>::operator[](v89 + 12, v100); v23 = std::map<std::string,WXML::DOMLib::Token>::operator[](v89 + 12, v100);
v101 = "wx:for-index"; v101 = "wx:for-index";
WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v23, v36); WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v23, v36);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>( std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>(
v64 + 12, v64 + 12,
(char **)&v101); (char **)&v101);
WXML::DOMLib::Token::~Token((int)v102); WXML::DOMLib::Token::~Token((int)v102);
@ -22969,7 +23007,9 @@ LABEL_23:
std::map<std::string,WXML::DOMLib::Token>::erase(v65, (int)&v98); std::map<std::string,WXML::DOMLib::Token>::erase(v65, (int)&v98);
std::string::_M_dispose((void **)&v98); std::string::_M_dispose((void **)&v98);
} }
v66 = v89;
////////////////////////////////////////"wx:key"
v66 = v89; // cur
Blocki = v89 + 13; Blocki = v89 + 13;
std::string::basic_string(v100, "wx:key"); std::string::basic_string(v100, "wx:key");
v67 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v67 = std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find(
@ -22984,8 +23024,8 @@ LABEL_23:
v101 = "wx:key"; v101 = "wx:key";
WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v24, v36); WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v24, v36);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>( std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>(
v68 + 12, v68 + 12, // v91->offset_48
(char **)&v101); (char **)&v101); // "wx:key"
WXML::DOMLib::Token::~Token((int)v102); WXML::DOMLib::Token::~Token((int)v102);
std::string::_M_dispose(v100); std::string::_M_dispose(v100);
v69 = v89 + 12; v69 = v89 + 12;
@ -22993,7 +23033,9 @@ LABEL_23:
std::map<std::string,WXML::DOMLib::Token>::erase(v69, (int)&v101); std::map<std::string,WXML::DOMLib::Token>::erase(v69, (int)&v101);
std::string::_M_dispose((void **)&v101); std::string::_M_dispose((void **)&v101);
} }
// Strd = (char *)(8 * j);
v25 = (volatile signed __int32 **)&Strd[*(_DWORD *)(a1 + 72) + 4]; v25 = (volatile signed __int32 **)&Strd[*(_DWORD *)(a1 + 72) + 4];
// cur->offset_16
*(v25 - 1) = (volatile signed __int32 *)v91; *(v25 - 1) = (volatile signed __int32 *)v91;
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v25, (int)v92); std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(v25, (int)v92);
v34 = v26; v34 = v26;
@ -23005,17 +23047,20 @@ LABEL_23:
} }
} }
} }
// RewriteTree - 25
for ( Stre = 0; ; ++Stre ) for ( Stre = 0; ; ++Stre )
{ {
v27 = *(_DWORD *)(a1 + 72); v27 = *(_DWORD *)(a1 + 72);
if ( (*(_DWORD *)(a1 + 76) - v27) >> 3 <= (unsigned int)Stre ) if ( (*(_DWORD *)(a1 + 76) - v27) >> 3 <= (unsigned int)Stre )
break; break;
v79 = 8 * (_DWORD)Stre; v79 = 8 * (_DWORD)Stre; // index offset
v70 = *(_DWORD **)(v27 + 8 * (_DWORD)Stre); v70 = *(_DWORD **)(v27 + 8 * (_DWORD)Stre); // cur
std::string::basic_string((void **)&v101, "wx:scope-data"); std::string::basic_string((void **)&v101, "wx:scope-data");
v28 = (char *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find( v28 = (char *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
v70 + 12, ::find(
(int)&v101); v70 + 12, // cur->offset_48
(int)&v101); // "wx:scope-data"
v34 = v29; v34 = v29;
Blockj = v28; Blockj = v28;
std::string::_M_dispose((void **)&v101); std::string::_M_dispose((void **)&v101);
@ -23023,22 +23068,26 @@ LABEL_23:
{ {
std::__shared_ptr<WXML::DOMLib::WXMLDom,(__gnu_cxx::_Lock_policy)2>::__shared_ptr( std::__shared_ptr<WXML::DOMLib::WXMLDom,(__gnu_cxx::_Lock_policy)2>::__shared_ptr(
&v96, &v96,
(_DWORD *)(*(_DWORD *)(a1 + 72) + v79)); (_DWORD *)(*(_DWORD *)(a1 + 72) + v79)); // cur
v71 = operator new(0x128u); v71 = operator new(0x128u);
WXML::DOMLib::WXMLDom::WXMLDom((int)v71); WXML::DOMLib::WXMLDom::WXMLDom((int)v71);
zcc::shared_ptr<WXML::DOMLib::WXMLDom>::shared_ptr(v71); zcc::shared_ptr<WXML::DOMLib::WXMLDom>::shared_ptr(v71);
std::string::operator=(v98, "wx-scope"); std::string::operator=(v98, "wx-scope");
// cur->offset_96
// int *v98
std::string::_M_assign((int)(v98 + 6), *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Stre) + 24); std::string::_M_assign((int)(v98 + 6), *(_DWORD *)(*(_DWORD *)(a1 + 72) + 8 * (_DWORD)Stre) + 24);
WXML::DOMLib::Token::operator=((int)(v98 + 21), (int)(v96 + 21)); WXML::DOMLib::Token::operator=((int)(v98 + 21), (int)(v96 + 21));
// 18 * 4 = 72
std::vector<zcc::shared_ptr<WXML::DOMLib::WXMLDom>>::push_back(v98 + 18, &v96); std::vector<zcc::shared_ptr<WXML::DOMLib::WXMLDom>>::push_back(v98 + 18, &v96);
v72 = v98; v72 = v98;
std::string::basic_string(v100, "wx:scope-data"); std::string::basic_string(v100, "wx:scope-data");
v30 = std::map<std::string,WXML::DOMLib::Token>::operator[](v96 + 12, v100); v30 = std::map<std::string,WXML::DOMLib::Token>::operator[](v96 + 12, v100);
v101 = "wx:scope-data"; v101 = "wx:scope-data";
WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v30, v36); WXML::DOMLib::Token::Token((int)v102, (WXML::DOMLib::Token *)v30, v36);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>( std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::_M_emplace_unique<std::pair<char const*,WXML::DOMLib::Token>>(
v72 + 12, v72 + 12,
(char **)&v101); (char **)&v101);// "wx:scope-data"
WXML::DOMLib::Token::~Token((int)v102); WXML::DOMLib::Token::~Token((int)v102);
std::string::_M_dispose(v100); std::string::_M_dispose(v100);
v73 = v96 + 12; v73 = v96 + 12;
@ -23053,6 +23102,8 @@ LABEL_23:
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v97); std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v97);
} }
} }
// RewriteTree - 30
for ( Strf = 0; (*(_DWORD *)(a1 + 76) - *(_DWORD *)(a1 + 72)) >> 3 > (unsigned int)Strf; ++Strf ) for ( Strf = 0; (*(_DWORD *)(a1 + 76) - *(_DWORD *)(a1 + 72)) >> 3 > (unsigned int)Strf; ++Strf )
WXML::DOMLib::WXMLDom::RewriteTree((WXML::DOMLib::WXMLDom *)v34); WXML::DOMLib::WXMLDom::RewriteTree((WXML::DOMLib::WXMLDom *)v34);
return 0; return 0;
@ -24626,20 +24677,20 @@ LABEL_69:
v275 = (std::ostream::sentry *)(this + 52); v275 = (std::ostream::sentry *)(this + 52);
if ( (_DWORD *)(this + 52) == std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>> if ( (_DWORD *)(this + 52) == std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find( ::find(
(_DWORD *)(this + 48), (_DWORD *)(this + 48), // this->offset_48
(int)v312) ) (int)v312) ) // "items"
std::string::operator=((unsigned int *)v312, "wx:for-items"); std::string::operator=((unsigned int *)v312, "wx:for-items");
std::string::basic_string(v313, "index"); // target2 std::string::basic_string(v313, "index"); // target2
if ( v275 == (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>> if ( v275 == (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find( ::find(
v295, v295, // this->offset_48
(int)v313) ) (int)v313) ) // "index"
std::string::operator=((unsigned int *)v313, "wx:for-index"); std::string::operator=((unsigned int *)v313, "wx:for-index");
std::string::basic_string(v314, "item"); // target3 std::string::basic_string(v314, "item"); // target3
if ( v275 == (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>> if ( v275 == (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find( ::find(
v295, v295, // this->offset_48
(int)v314) ) (int)v314) ) // "item"
std::string::operator=((unsigned int *)v314, "wx:for-item"); std::string::operator=((unsigned int *)v314, "wx:for-item");
std::string::basic_string(v315, "wx:key"); std::string::basic_string(v315, "wx:key");
v316[0] = &v317; v316[0] = &v317;
@ -24670,10 +24721,12 @@ LABEL_69:
v295, // this + 48 v295, // this + 48
(int)v313) ) // target2 (int)v313) ) // target2
{ {
// target2_1
std::string::operator=((unsigned int *)&v318, "index"); std::string::operator=((unsigned int *)&v318, "index");
} }
else else
{ {
// this->offset_48[v313]
v32 = std::map<std::string,WXML::DOMLib::Token>::operator[](v295, (int)v313); v32 = std::map<std::string,WXML::DOMLib::Token>::operator[](v295, (int)v313);
v33 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v32); v33 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v32);
std::string::_M_assign((int)&v318, v33); std::string::_M_assign((int)&v318, v33);
@ -24683,10 +24736,12 @@ LABEL_69:
v295, // this + 48 v295, // this + 48
(int)v314) ) // target3 (int)v314) ) // target3
{ {
// target3_1
std::string::operator=((unsigned int *)&v321, "item"); std::string::operator=((unsigned int *)&v321, "item");
} }
else else
{ {
// this->offset_48[v314]
v34 = std::map<std::string,WXML::DOMLib::Token>::operator[](v295, (int)v314); v34 = std::map<std::string,WXML::DOMLib::Token>::operator[](v295, (int)v314);
v35 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v34); v35 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v34);
std::string::_M_assign((int)&v321, v35); std::string::_M_assign((int)&v321, v35);
@ -24713,8 +24768,8 @@ LABEL_69:
if ( v275 != (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>> if ( v275 != (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find( ::find(
v295, v295, // this->offset_48
(int)v315) (int)v315) // "wx:key"
&& *((_DWORD *)std::map<std::string,WXML::DOMLib::Token>::operator[](v295, (int)v315) + 14) == -3 && *((_DWORD *)std::map<std::string,WXML::DOMLib::Token>::operator[](v295, (int)v315) + 14) == -3
&& (a14 & 1) == 0 ) && (a14 & 1) == 0 )
{ {
@ -24748,8 +24803,8 @@ LABEL_69:
v334 = 0; v334 = 0;
v335[0] = 0; v335[0] = 0;
WXML::NameAllocator::GetNextName(a7, (int)&v333); WXML::NameAllocator::GetNextName(a7, (int)&v333);
std::string::basic_string((void **)v347, (char *)&byte_5537CA); std::string::basic_string((void **)v347, (char *)&byte_5537CA); // "\0"
std::string::basic_string((void **)&Str, (char *)&byte_5537CA); std::string::basic_string((void **)&Str, (char *)&byte_5537CA); // "\0"
WXML::DOMLib::WXMLDom::RenderMeAsFunction( WXML::DOMLib::WXMLDom::RenderMeAsFunction(
a2, a2,
a3, a3,
@ -24802,8 +24857,8 @@ LABEL_69:
goto LABEL_57; goto LABEL_57;
if ( v275 == (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>> if ( v275 == (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find( ::find(
v295, v295, // this->offset_48
(int)v315) ) (int)v315) ) // "wx:key"
{ {
Str = v346; Str = v346;
v345 = 0; v345 = 0;
@ -24824,9 +24879,11 @@ LABEL_69:
std::string::_M_dispose((void **)v347); std::string::_M_dispose((void **)v347);
std::string::_M_dispose((void **)&Str); std::string::_M_dispose((void **)&Str);
} }
v45 = (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>::find(
v295, v45 = (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
(int)v315); ::find(
v295, // this->offset_48
(int)v315); // "wx:key"
if ( v45 == v275 ) if ( v45 == v275 )
goto LABEL_57; goto LABEL_57;
v46 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v45 + 40); v46 = WXML::DOMLib::Token::ToAttrContent[abi:cxx11]((int)v45 + 40);
@ -24834,7 +24891,7 @@ LABEL_69:
v339 = (int)v341; v339 = (int)v341;
v340 = 0; v340 = 0;
LOBYTE(v341[0]) = 0; LOBYTE(v341[0]) = 0;
v47 = std::string::find(&v336, 46, 0); v47 = std::string::find(&v336, '.'/*46*/, 0);
v276 = (std::ostream::sentry *)v47; v276 = (std::ostream::sentry *)v47;
if ( v47 != (char *)-1 ) if ( v47 != (char *)-1 )
{ {
@ -24863,7 +24920,7 @@ LABEL_69:
{ {
if ( Str1 == 1 || WXML::DOMLib::Token::IsValidVariableName((char **)&v339) ) if ( Str1 == 1 || WXML::DOMLib::Token::IsValidVariableName((char **)&v339) )
goto LABEL_181; goto LABEL_181;
v48 = std::string::find(&v339, 46, 0); v48 = std::string::find(&v339, '.'/*46*/, 0);
v277 = (std::ostream::sentry *)v48; v277 = (std::ostream::sentry *)v48;
if ( v48 != (char *)-1 ) if ( v48 != (char *)-1 )
{ {
@ -24881,7 +24938,7 @@ LABEL_69:
std::string::substr(v347, &v339, (unsigned int)v277 + 1, 0xFFFFFFFF); std::string::substr(v347, &v339, (unsigned int)v277 + 1, 0xFFFFFFFF);
std::string::operator=((unsigned __int8 **)&v339, (int)v347); std::string::operator=((unsigned __int8 **)&v339, (int)v347);
std::string::_M_dispose((void **)v347); std::string::_M_dispose((void **)v347);
LABEL_181: LABEL_181:
v289 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)(a6 + 8), "_wp('"); v289 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)(a6 + 8), "_wp('");
WXML::Rewrite::ToStringCode((int)v342, a2); WXML::Rewrite::ToStringCode((int)v342, a2);
v223 = std::operator<<<char>(v289, v342); v223 = std::operator<<<char>(v289, v342);
@ -24904,7 +24961,7 @@ LABEL_181:
std::string::_M_dispose((void **)v347); std::string::_M_dispose((void **)v347);
std::string::_M_dispose((void **)&Str); std::string::_M_dispose((void **)&Str);
p_Str = (void **)v342; p_Str = (void **)v342;
LABEL_191: LABEL_191:
std::string::_M_dispose(p_Str); std::string::_M_dispose(p_Str);
goto LABEL_56; goto LABEL_56;
} }
@ -24917,7 +24974,7 @@ LABEL_191:
{ {
if ( std::operator==<char>((int)&v336, "0") ) if ( std::operator==<char>((int)&v336, "0") )
goto LABEL_56; goto LABEL_56;
if ( *(_BYTE *)v336 != 48 ) if ( *(_BYTE *)v336 != '0'/*48*/ )
{ {
for ( i = 0; v337 != i; ++i ) for ( i = 0; v337 != i; ++i )
{ {
@ -24927,6 +24984,24 @@ LABEL_191:
goto LABEL_56; goto LABEL_56;
} }
} }
/*
int this,
int *a2,
int *a3,
int a4,
int *a5,
int a6,
int *a7,
int *a8,
int *a9,
int *a10,
int *a11,
char a12,
unsigned __int8 a13,
int a14,
int a15)
*/
LABEL_189: LABEL_189:
if ( !std::operator==<char>((int)&v336, "*this") ) if ( !std::operator==<char>((int)&v336, "*this") )
{ {
@ -24946,7 +25021,7 @@ LABEL_191:
std::operator<<<std::char_traits<char>>(v239, a12); std::operator<<<std::char_traits<char>>(v239, a12);
std::string::_M_dispose((void **)v347); std::string::_M_dispose((void **)v347);
p_Str = (void **)&Str; p_Str = (void **)&Str;
goto LABEL_191; goto LABEL_191; // LABEL_56
} }
} }
LABEL_56: LABEL_56:
@ -25028,7 +25103,7 @@ LABEL_57:
Str1a = (char *)(this + 52); Str1a = (char *)(this + 52);
if ( std::operator==<char>(this, "include") ) if ( std::operator==<char>(this, "include") )
{ {
std::string::basic_string((void **)v347, (char *)off_5539C8); std::string::basic_string((void **)v347, (char *)off_5539C8); // "src"
v279 = (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>> v279 = (std::ostream::sentry *)std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::Token>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::Token>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::Token>>>
::find( ::find(
v296, v296,
@ -25037,17 +25112,17 @@ LABEL_57:
// == end // == end
if ( v279 == (std::ostream::sentry *)Str1a ) if ( v279 == (std::ostream::sentry *)Str1a )
goto LABEL_169; goto LABEL_169;
std::string::basic_string((void **)v347, (char *)off_5539C8); std::string::basic_string((void **)v347, (char *)off_5539C8); // "src"
v280 = (std::ostream::sentry *)*((_DWORD *)std::map<std::string,WXML::DOMLib::Token>::operator[](v296, v347) + 14); v280 = (std::ostream::sentry *)*((_DWORD *)std::map<std::string,WXML::DOMLib::Token>::operator[](v296, v347) + 14);
std::string::_M_dispose((void **)v347); std::string::_M_dispose((void **)v347);
if ( v280 == (std::ostream::sentry *)-3 ) if ( v280 == (std::ostream::sentry *)-3 )
{ {
v251 = __cxa_allocate_exception(0x18u); v251 = __cxa_allocate_exception(0x18u);
std::string::basic_string((void **)&Str, (char *)off_5539C8); std::string::basic_string((void **)&Str, (char *)off_5539C8); // "src"
// v296 this.offset_48 // v296 this.offset_48
lpuexcptd = (int *)(std::map<std::string,WXML::DOMLib::Token>::operator[](v296, &Str) + 60); lpuexcptd = (int *)(std::map<std::string,WXML::DOMLib::Token>::operator[](v296, &Str) + 60);
std::string::basic_string((void **)v347, (char *)off_5539C8); std::string::basic_string((void **)v347, (char *)off_5539C8); // "src"
std::string::basic_string((void **)v342, (char *)off_5539C8); std::string::basic_string((void **)v342, (char *)off_5539C8); // "src"
v73 = std::map<std::string,WXML::DOMLib::Token>::operator[](v296, v342); v73 = std::map<std::string,WXML::DOMLib::Token>::operator[](v296, v342);
// v296["src"] // v296["src"]
WXML::DOMLib::WXMLDom::Error((int)v251, a2, (int)v73, v347, lpuexcptd); WXML::DOMLib::WXMLDom::Error((int)v251, a2, (int)v73, v347, lpuexcptd);
@ -27129,10 +27204,12 @@ int __thiscall WXML::DOMLib::Machine::Feed(
lpuexcpt = this; lpuexcpt = this;
LOBYTE(v46) = a2; LOBYTE(v46) = a2;
if ( a2 == 10 ) if ( a2 == '\n'/*10*/ )
{ {
v6 = lpuexcpt; v6 = lpuexcpt;
// this->offset_8(lineCount)
++*((_DWORD *)lpuexcpt + 2); ++*((_DWORD *)lpuexcpt + 2);
// this->offset_12(lineLength)
*((_DWORD *)v6 + 3) = 0; *((_DWORD *)v6 + 3) = 0;
} }
// v44 喂入的字符 // v44 喂入的字符
@ -27188,6 +27265,7 @@ LABEL_12:
v15 = lpuexcpt; v15 = lpuexcpt;
v16 = _bittest(&v46, 0x15u); v16 = _bittest(&v46, 0x15u);
// v46 从TT中取出的 // v46 从TT中取出的
// this->offset_24
*((_DWORD *)lpuexcpt + 6) = (unsigned __int16)v46; *((_DWORD *)lpuexcpt + 6) = (unsigned __int16)v46;
if ( v16 ) // if(_bittest(&v46, 0x15u)) if ( v16 ) // if(_bittest(&v46, 0x15u))
{ {
@ -27256,8 +27334,8 @@ LABEL_12:
// v46 从TT中取出的 // v46 从TT中取出的
if ( _bittest(&v46, 0x11u) ) if ( _bittest(&v46, 0x11u) )
{ {
v22 = *(_DWORD *)lpuexcpt; // offset_0 v22 = *(_DWORD *)lpuexcpt; // this->offset_0
v23 = *((_DWORD *)lpuexcpt + 1); // offset_4 v23 = *((_DWORD *)lpuexcpt + 1); // this->offset_4
// offset_1 < offset_0 // offset_1 < offset_0
if ( v23 < *(_DWORD *)lpuexcpt ) if ( v23 < *(_DWORD *)lpuexcpt )
{ {
@ -27272,18 +27350,17 @@ LABEL_12:
v25 = *((_DWORD *)lpuexcpt + 4); v25 = *((_DWORD *)lpuexcpt + 4);
v67[0] = 0; v67[0] = 0;
v58 = 0; v58 = 0;
// v51 -> v49.offset_8 // v51 -> v49.offset_8 = this.offset_16
v51 = v25; v51 = v25;
v59[0] = 0; v59[0] = 0;
// this.offset_20 // this.offset_20
v26 = *((_DWORD *)lpuexcpt + 5); v26 = *((_DWORD *)lpuexcpt + 5);
v63[0] = 0; v63[0] = 0;
v62 = 0; v62 = 0;
// v52 -> v49.offset_12 // v52 -> v49.offset_12 = this.offset_20
v52 = v26; v52 = v26;
v66 = 0; v66 = 0;
// v54 = this.offset_0(fileLength) - this.offset_4 // v54 -> v49.offset_20 = this.offset_0(fileLength) - this.offset_4
// v54 -> v49.offset_20
v54 = v22 - v23; v54 = v22 - v23;
v27 = lpuexcpt; v27 = lpuexcpt;
// v56 -> v49.offset_28 // v56 -> v49.offset_28
@ -27299,7 +27376,7 @@ LABEL_12:
v64 = 0; v64 = 0;
// v45 offset_24 // v45 offset_24
v29 = WXML::DOMLib::Machine::STT[v45]; v29 = WXML::DOMLib::Machine::STT[v45];
// v53 -> v49.offset_16 // v53 -> v49.offset_16 = this->offset_4 修改之前的
v53 = v23; v53 = v23;
v60 = -1; v60 = -1;
// v55 -> v49.offset_24 // v55 -> v49.offset_24
@ -27343,11 +27420,11 @@ LABEL_12:
v52 = v36; v52 = v36;
// v37 = this.offset_4 // v37 = this.offset_4
v37 = *((_DWORD *)v31 + 1); v37 = *((_DWORD *)v31 + 1);
// this.offset_4 = this.offset_0 + 1 = this->fileLength // this.offset_4 = this.offset_0 + 1 = this->fileLength 加一之后的值
*((_DWORD *)v31 + 1) = v32; *((_DWORD *)v31 + 1) = v32;
// this.offset_8(lineCount) // this.offset_8(lineCount)
v38 = *((_DWORD *)v31 + 2); v38 = *((_DWORD *)v31 + 2);
// this.offset_20 = this.offset_12(lineLength) // this.offset_20 = this.offset_12(lineLength) 加一之后的值
*((_DWORD *)v31 + 5) = v33; *((_DWORD *)v31 + 5) = v33;
// this.offset_16 = this.offset_8(lineCount) // this.offset_16 = this.offset_8(lineCount)
*((_DWORD *)v31 + 4) = v38; *((_DWORD *)v31 + 4) = v38;
@ -27362,7 +27439,7 @@ LABEL_12:
v56 = 0; v56 = 0;
v64 = 0; v64 = 0;
v60 = -1; v60 = -1;
// token.offset_16 = this->offset_4 // token.offset_16 = this->offset_4 修改之前的值
v53 = v37; v53 = v37;
// v49.offset_20 = (this->offset_0 + 1)fileLength - this->offset_4 // v49.offset_20 = (this->offset_0 + 1)fileLength - this->offset_4
v54 = v34 - v37; v54 = v34 - v37;
@ -27692,11 +27769,14 @@ int __thiscall WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(int *this, int a2, int
struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h] struct _Unwind_Exception *lpuexcpta; // [esp+18h] [ebp-60h]
void *v47[8]; // [esp+58h] [ebp-20h] BYREF void *v47[8]; // [esp+58h] [ebp-20h] BYREF
// RenderAsOps - 0
v36 = (std::ostream::sentry *)*this; v36 = (std::ostream::sentry *)*this;
v44 = (WXML::EXPRLib::Token *)(a2 + 8); v44 = (WXML::EXPRLib::Token *)(a2 + 8);
std::operator<<<std::char_traits<char>>((std::ostream::sentry *)(a2 + 8), (char *)&off_5542FA[2]); std::operator<<<std::char_traits<char>>((std::ostream::sentry *)(a2 + 8), (char *)&off_5542FA[2]);
if ( *(_BYTE *)v36 == 36 ) // v36 this
if ( *(_BYTE *)v36 == '$'/*36*/ )
{ {
// this->offset_24
v37 = (std::ostream::sentry *)(this + 6); v37 = (std::ostream::sentry *)(this + 6);
if ( std::operator==<char>((int)this, "$VAR") ) if ( std::operator==<char>((int)this, "$VAR") )
{ {
@ -27721,22 +27801,25 @@ int __thiscall WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(int *this, int a2, int
v33 = (char *)WXML::EXPRLib::Token::GetLiteral(v37); v33 = (char *)WXML::EXPRLib::Token::GetLiteral(v37);
std::operator<<<std::char_traits<char>>(v44, v33); std::operator<<<std::char_traits<char>>(v44, v33);
} }
goto LABEL_46; goto LABEL_46; // << "]"; return
} }
if ( *(_BYTE *)v36 == 79 && *((_BYTE *)v36 + 1) == 80 && *((_BYTE *)v36 + 2) == 95 )
// RenderAsOps - 5
// v36 -> this
if ( *(_BYTE *)v36 == 'O'/*79*/ && *((_BYTE *)v36 + 1) == 'P'/*80*/ && *((_BYTE *)v36 + 2) == '_'/*95*/ )
{ {
if ( std::operator==<char>((int)this, "OP_PATH") ) if ( std::operator==<char>((int)this, "OP_PATH") )
{ {
if ( this[14] - this[13] != 8 ) if ( this[14] - this[13] != 8 )
goto LABEL_46; goto LABEL_46; // << "]"; return
v8 = std::operator<<<std::char_traits<char>>(v44, (char *)&off_5542FA[2]); v8 = std::operator<<<std::char_traits<char>>(v44, (char *)&off_5542FA[2]);
v9 = std::operator<<<std::char_traits<char>>(v8, WXML::EXPRLib::OPShort::GET_FROM_ENV); v9 = std::operator<<<std::char_traits<char>>(v8, WXML::EXPRLib::OPShort::GET_FROM_ENV);
std::operator<<<std::char_traits<char>>(v9, "],"); std::operator<<<std::char_traits<char>>(v9, "],");
v35 = a4; v35 = a4;
v34 = a3; v34 = a3;
LABEL_16: LABEL_16:
WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, v34, v35); WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, v34, v35);
goto LABEL_46; goto LABEL_46; // << "]"; return
} }
if ( std::operator==<char>((int)this, "OP_LIST") ) if ( std::operator==<char>((int)this, "OP_LIST") )
{ {
@ -27745,7 +27828,7 @@ LABEL_16:
std::operator<<<std::char_traits<char>>(v11, "]"); std::operator<<<std::char_traits<char>>(v11, "]");
std::operator<<<std::char_traits<char>>(v44, ","); std::operator<<<std::char_traits<char>>(v44, ",");
if ( this[13] == this[14] ) if ( this[13] == this[14] )
goto LABEL_46; goto LABEL_46; // << "]"; return
goto LABEL_15; goto LABEL_15;
} }
if ( std::operator==<char>((int)this, "OP_LIST_CONCAT") ) if ( std::operator==<char>((int)this, "OP_LIST_CONCAT") )
@ -27798,7 +27881,7 @@ LABEL_16:
v20 = std::operator<<<std::char_traits<char>>(v44, (char *)&off_5542FA[2]); v20 = std::operator<<<std::char_traits<char>>(v44, (char *)&off_5542FA[2]);
v21 = std::operator<<<std::char_traits<char>>(v20, WXML::EXPRLib::OPShort::EX_DICT); v21 = std::operator<<<std::char_traits<char>>(v20, WXML::EXPRLib::OPShort::EX_DICT);
std::operator<<<std::char_traits<char>>(v21, "],"); std::operator<<<std::char_traits<char>>(v21, "],");
LABEL_15: LABEL_15:
v35 = a4; v35 = a4;
v34 = a3; v34 = a3;
goto LABEL_16; goto LABEL_16;
@ -27827,6 +27910,7 @@ LABEL_15:
} }
} }
} }
// RenderAsOps - 10
else else
{ {
v26 = std::operator<<<std::char_traits<char>>(v44, (char *)&off_5542FA[2]); v26 = std::operator<<<std::char_traits<char>>(v44, (char *)&off_5542FA[2]);
@ -27837,6 +27921,7 @@ LABEL_15:
v31 = std::operator<<<std::char_traits<char>>(v30, (char *)off_5542FA); v31 = std::operator<<<std::char_traits<char>>(v30, (char *)off_5542FA);
std::operator<<<std::char_traits<char>>(v31, "]"); std::operator<<<std::char_traits<char>>(v31, "]");
std::operator<<<std::char_traits<char>>(v44, ","); std::operator<<<std::char_traits<char>>(v44, ",");
// 13 * 4 = 52
for ( n = 0; (this[14] - this[13]) >> 3 > (unsigned int)n; n = (std::ostream::sentry *)((char *)n + 1) ) for ( n = 0; (this[14] - this[13]) >> 3 > (unsigned int)n; n = (std::ostream::sentry *)((char *)n + 1) )
{ {
if ( n ) if ( n )
@ -27844,6 +27929,7 @@ LABEL_15:
WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4); WXML::EXPRLib::ExprSyntaxTree::RenderAsOps(a2, a3, a4);
} }
} }
// RenderAsOps - 15
LABEL_46: LABEL_46:
std::operator<<<std::char_traits<char>>(v44, "]"); std::operator<<<std::char_traits<char>>(v44, "]");
return 0; return 0;