mirror of
https://github.com/msojocs/wx-compiler.git
synced 2025-07-19 00:00:04 +08:00
feat: 添加一些方法
This commit is contained in:
parent
fc4f2347f2
commit
1b995ef08f
@ -30,10 +30,13 @@ 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/base.cpp
|
||||||
src/wxml/expr_lib/common.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/parser.cpp
|
||||||
src/wxml/expr_lib/token.cpp
|
src/wxml/expr_lib/token.cpp
|
||||||
|
src/wxml/expr_lib/tokenizer.cpp
|
||||||
|
src/wxml/expr_lib/transit_table.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
|
||||||
|
@ -522,11 +522,87 @@ namespace WXML
|
|||||||
{
|
{
|
||||||
void OutputAsStringOrKeyWord(std::stringstream &,std::string const&,std::string const&, bool &);
|
void OutputAsStringOrKeyWord(std::stringstream &,std::string const&,std::string const&, bool &);
|
||||||
|
|
||||||
|
|
||||||
|
class TransitTable
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
/* data */
|
||||||
|
public:
|
||||||
|
TransitTable(/* args */);
|
||||||
|
~TransitTable();
|
||||||
|
static int GetExprNTType(void);
|
||||||
|
static int GetAttrListNTType(void);
|
||||||
|
static void Init(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class Token
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 内存结构:
|
||||||
|
* 00 00 00 00 标识type
|
||||||
|
* 00 00 00 00... 当标识为0时后面为需要的动态字符串tokenName
|
||||||
|
* /////
|
||||||
|
* 03 00 00 00 00 00 00 00 00 00 00 00 70 87 E8 00(std::string地址)
|
||||||
|
*/
|
||||||
|
private:
|
||||||
|
/* data */
|
||||||
|
public:
|
||||||
|
int offset_0;
|
||||||
|
std::string offset_4;
|
||||||
|
std::string offset_12;
|
||||||
|
Token(/* args */);
|
||||||
|
~Token();
|
||||||
|
std::string GetLiteral(void);
|
||||||
|
const char * GetTokenName();
|
||||||
|
};
|
||||||
|
|
||||||
|
using Offset0Type = int();
|
||||||
|
class Base
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
/* data */
|
||||||
|
public:
|
||||||
|
Offset0Type *offset_0;
|
||||||
|
std::string offset_4;
|
||||||
|
std::vector<WXML::EXPRLib::Token> offset_8;
|
||||||
|
// int offset_12 = 0;
|
||||||
|
WXML::EXPRLib::Token offset_28;
|
||||||
|
int offset_32 = 0;
|
||||||
|
Base(/* args */);
|
||||||
|
~Base();
|
||||||
|
};
|
||||||
|
|
||||||
|
class ExprSyntaxTree
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
/* data */
|
||||||
|
public:
|
||||||
|
std::string offset_0;
|
||||||
|
WXML::EXPRLib::Token offset_24;
|
||||||
|
std::vector<std::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>> offset_52;
|
||||||
|
ExprSyntaxTree(/* args */);
|
||||||
|
~ExprSyntaxTree();
|
||||||
|
void RenderAsOps(
|
||||||
|
std::stringstream & a2,
|
||||||
|
std::string const& a3,
|
||||||
|
bool & a4
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
class Parser
|
class Parser
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
/* data */
|
/* data */
|
||||||
public:
|
public:
|
||||||
|
/*
|
||||||
|
deque 会占用40个字节
|
||||||
|
E9 3A 55 00 00 00 00 00 38(offset_0) F8 DE 00 08 00 00 00
|
||||||
|
70 F8 DE 00 70 F8 DE 00 70 FA DE 00 44 F8 DE 00
|
||||||
|
70 F8 DE 00 70 F8 DE 00 70 FA DE 00 44 F8 DE 00
|
||||||
|
*/
|
||||||
|
std::deque<std::shared_ptr<WXML::EXPRLib::Base>> offset_0;
|
||||||
|
std::deque<std::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>> offset_40;
|
||||||
|
std::shared_ptr<WXML::EXPRLib::ExprSyntaxTree> offset_80;
|
||||||
Parser(/* args */);
|
Parser(/* args */);
|
||||||
~Parser();
|
~Parser();
|
||||||
int Parse(
|
int Parse(
|
||||||
@ -538,51 +614,22 @@ namespace WXML
|
|||||||
bool a7);
|
bool a7);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Tokenizer
|
class Tokenizer
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
/* data */
|
/* data */
|
||||||
public:
|
public:
|
||||||
Tokenizer(/* args */);
|
// 006685A0
|
||||||
~Tokenizer();
|
static int TT[0x605C];
|
||||||
};
|
static bool bInited;
|
||||||
|
|
||||||
|
|
||||||
class Token
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 内存结构:
|
|
||||||
* 00 00 00 00 标识type
|
|
||||||
* 00 00 00 00... 当标识为0时后面为需要的动态字符串tokenName
|
|
||||||
*/
|
|
||||||
private:
|
|
||||||
/* data */
|
|
||||||
public:
|
|
||||||
int offset_0;
|
|
||||||
std::string offset_4;
|
|
||||||
Token(/* args */);
|
|
||||||
~Token();
|
|
||||||
std::string GetLiteral(void);
|
|
||||||
const char * GetTokenName();
|
|
||||||
};
|
|
||||||
|
|
||||||
class ExprSyntaxTree
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
/* data */
|
|
||||||
public:
|
|
||||||
std::string offset_0;
|
std::string offset_0;
|
||||||
WXML::EXPRLib::Token offset_24;
|
Tokenizer(/* args */);
|
||||||
// offset_52
|
Tokenizer(char const*,std::string const&,int,int);
|
||||||
ExprSyntaxTree(/* args */);
|
~Tokenizer();
|
||||||
~ExprSyntaxTree();
|
void InitTransitTable(void);
|
||||||
void RenderAsOps(
|
int GetTokens(std::vector<WXML::EXPRLib::Token> &,std::string &);
|
||||||
std::stringstream & a2,
|
|
||||||
std::string const& a3,
|
|
||||||
bool & a4
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum OPShort
|
enum OPShort
|
||||||
{
|
{
|
||||||
AOP = 2,
|
AOP = 2,
|
||||||
|
@ -151,6 +151,8 @@ namespace WXML {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
WXML::EXPRLib::ExprSyntaxTree v70;
|
WXML::EXPRLib::ExprSyntaxTree v70;
|
||||||
|
v70.offset_0 = v85;
|
||||||
|
// v70.offset_0 = v77[i].offset_4;
|
||||||
v70.RenderAsOps(a3, v85, v77_b);
|
v70.RenderAsOps(a3, v85, v77_b);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
17
src/wxml/expr_lib/base.cpp
Normal file
17
src/wxml/expr_lib/base.cpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "../../include/wxml.h"
|
||||||
|
|
||||||
|
namespace WXML
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace EXPRLib
|
||||||
|
{
|
||||||
|
|
||||||
|
Base::Base(/* args */)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Base::~Base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,172 @@ namespace WXML
|
|||||||
std::string& a6,
|
std::string& a6,
|
||||||
bool a7)
|
bool a7)
|
||||||
{
|
{
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 0
|
||||||
|
this->offset_0.clear();
|
||||||
|
this->offset_40.clear();
|
||||||
|
|
||||||
|
WXML::EXPRLib::Tokenizer v77(&a2[0], a3, a4, a5);
|
||||||
|
std::vector<WXML::EXPRLib::Token> v74;
|
||||||
|
int ret = v77.GetTokens(v74, a6);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 5
|
||||||
|
// tokenList是空的
|
||||||
|
if (v74.begin() == v74.end())
|
||||||
|
{
|
||||||
|
std::shared_ptr<WXML::EXPRLib::ExprSyntaxTree> v8;
|
||||||
|
this->offset_80 = v8;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 10
|
||||||
|
WXML::EXPRLib::Token v82;
|
||||||
|
v82.offset_0 = 5;
|
||||||
|
v74.push_back(v82);
|
||||||
|
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 15
|
||||||
|
std::shared_ptr<WXML::EXPRLib::Base> v68(new WXML::EXPRLib::Base());
|
||||||
|
v68->offset_4 = "$";
|
||||||
|
this->offset_0.push_back(v68);
|
||||||
|
std::shared_ptr<WXML::EXPRLib::Base> v70(new WXML::EXPRLib::Base());
|
||||||
|
if (a7)
|
||||||
|
{
|
||||||
|
v70->offset_4 = WXML::EXPRLib::TransitTable::GetAttrListNTType();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
v70->offset_4 = WXML::EXPRLib::TransitTable::GetExprNTType();
|
||||||
|
}
|
||||||
|
this->offset_0.push_back(v70);
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20
|
||||||
|
int v49 = 0;
|
||||||
|
for(auto cur = this->offset_0.rbegin(); cur != this->offset_0.rend(); cur++)
|
||||||
|
{
|
||||||
|
|
||||||
|
auto v72 = *cur;
|
||||||
|
WXML::EXPRLib::Token v84 = v72->offset_8[v49]; // ???
|
||||||
|
int v15 = v72->offset_0();
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20-1
|
||||||
|
if (v15 == 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
std::string tokenName = v84.GetTokenName();
|
||||||
|
if (v72->offset_4 != tokenName || v49 >= 5)
|
||||||
|
{
|
||||||
|
a6 = "error at token `";
|
||||||
|
a6 += v84.GetLiteral();
|
||||||
|
a6 += "`";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
++v49;
|
||||||
|
this->offset_0.pop_back();
|
||||||
|
if (v84.offset_0 - 1 <= 3)
|
||||||
|
{
|
||||||
|
std::shared_ptr<WXML::EXPRLib::ExprSyntaxTree> v80(new WXML::EXPRLib::ExprSyntaxTree());
|
||||||
|
|
||||||
|
std::string v18 = v84.GetTokenName();
|
||||||
|
v80->offset_0 = v18;
|
||||||
|
this->offset_40.push_back(v80);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20-2
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (v15 == 3)
|
||||||
|
{
|
||||||
|
this->offset_0.pop_back();
|
||||||
|
int v47 = v72->offset_28.offset_0;
|
||||||
|
if (v47 == 2)
|
||||||
|
{
|
||||||
|
if (this->offset_40.begin() == this->offset_40.end())
|
||||||
|
{
|
||||||
|
a6 = "interal error: 1001, expr: `";
|
||||||
|
a6 += a2;
|
||||||
|
a6 += "`";
|
||||||
|
return 1001;
|
||||||
|
}
|
||||||
|
auto v78 = this->offset_40.back();
|
||||||
|
this->offset_40.pop_back();
|
||||||
|
if (this->offset_40.begin() == this->offset_40.end())
|
||||||
|
{
|
||||||
|
a6 = "interal error: 1002, expr: `";
|
||||||
|
a6 += a2;
|
||||||
|
a6 += "`";
|
||||||
|
return 1002;
|
||||||
|
}
|
||||||
|
auto v21 = this->offset_40.back();
|
||||||
|
this->offset_40.pop_back();
|
||||||
|
this->offset_40.push_back(v78);
|
||||||
|
|
||||||
|
}
|
||||||
|
///////////////////////
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::shared_ptr<WXML::EXPRLib::ExprSyntaxTree> v22(new WXML::EXPRLib::ExprSyntaxTree());
|
||||||
|
std::shared_ptr<WXML::EXPRLib::ExprSyntaxTree> v78;
|
||||||
|
v78->offset_0.assign(v72->offset_4);
|
||||||
|
for (size_t i = 0; i < v72->offset_32; i++)
|
||||||
|
{
|
||||||
|
if (this->offset_40.begin() == this->offset_40.end())
|
||||||
|
{
|
||||||
|
a6 = "interal error: 1003, expr: `";
|
||||||
|
a6 += a2;
|
||||||
|
a6 += "`";
|
||||||
|
return 1003;
|
||||||
|
}
|
||||||
|
auto v23 = this->offset_40.back();
|
||||||
|
v78->offset_52.push_back(v23);
|
||||||
|
this->offset_40.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!v47)
|
||||||
|
{
|
||||||
|
if (v78->offset_52.begin() != v78->offset_52.end())
|
||||||
|
{
|
||||||
|
auto v51 = v78->offset_52.begin();
|
||||||
|
for (auto i = v78->offset_52.rbegin(); i < v78->offset_52.rend(); i++)
|
||||||
|
{
|
||||||
|
auto v80 = *v51;
|
||||||
|
*v51 = *i;
|
||||||
|
*i = v80;
|
||||||
|
v51++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this->offset_40.push_back(v78);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20-3
|
||||||
|
if ( v15 == 2)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// while block end
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 25
|
||||||
|
if (this->offset_40.begin() == this->offset_40.end())
|
||||||
|
{
|
||||||
|
a6 = "interal error: 1004, expr: `" + a2 + "`";
|
||||||
|
return 1004;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto v37 = this->offset_40.back();
|
||||||
|
this->offset_80 = v37;
|
||||||
|
}
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 30
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,13 +47,14 @@ namespace WXML
|
|||||||
result = "$";
|
result = "$";
|
||||||
if (this->offset_0 != 5)
|
if (this->offset_0 != 5)
|
||||||
{
|
{
|
||||||
if (this->offset_4.size())
|
result = "";
|
||||||
|
if (this->offset_12.size())
|
||||||
{
|
{
|
||||||
// return
|
return this->offset_12;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "";
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,261 @@
|
|||||||
|
|
||||||
namespace WXML {
|
namespace WXML {
|
||||||
namespace EXPRLib {
|
namespace EXPRLib {
|
||||||
|
inline
|
||||||
|
unsigned char bittest(std::int32_t const *a, std::int32_t b)
|
||||||
|
{
|
||||||
|
auto const bits{ reinterpret_cast<unsigned char const*>(a) };
|
||||||
|
auto const value{ bits[b >> 3] };
|
||||||
|
auto const mask{ (unsigned char)(1 << (b & 7)) };
|
||||||
|
return (value & mask) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Tokenizer::TT[0x605C];
|
||||||
Tokenizer::Tokenizer(/* args */)
|
Tokenizer::Tokenizer(/* args */)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Tokenizer::Tokenizer(char const* Str, std::string const& a3, int a4, int a5)
|
||||||
|
{
|
||||||
|
this->offset_0 = Str;
|
||||||
|
}
|
||||||
|
|
||||||
Tokenizer::~Tokenizer()
|
Tokenizer::~Tokenizer()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Tokenizer::bInited = false;
|
||||||
|
|
||||||
|
void Tokenizer::InitTransitTable(void)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Tokenizer::TT -> 0x006685A0
|
||||||
|
* end -> 0x66E5FC
|
||||||
|
*/
|
||||||
|
if (!Tokenizer::bInited)
|
||||||
|
{
|
||||||
|
Tokenizer::bInited = true;
|
||||||
|
const char* ntr = " \n\t\r";
|
||||||
|
for (const char* i = ntr; ; i++)
|
||||||
|
{
|
||||||
|
char v1 = *i;
|
||||||
|
if (!v1)
|
||||||
|
break;
|
||||||
|
Tokenizer::TT[(0x6689A4 - 0x006685A0) / 4 + v1] = 8388609;
|
||||||
|
}
|
||||||
|
const char* $abc = "$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";
|
||||||
|
for (const char* j = $abc; ; ++j )
|
||||||
|
{
|
||||||
|
char v3 = *j;
|
||||||
|
if ( !v3 )
|
||||||
|
break;
|
||||||
|
// dword_6689A4[v3] = 13;
|
||||||
|
Tokenizer::TT[(0x6689A4 - 0x006685A0) / 4 + v3] = 13;
|
||||||
|
}
|
||||||
|
const char *_0123 = "0123456789";
|
||||||
|
for ( const char* k = _0123; ; ++k )
|
||||||
|
{
|
||||||
|
char v5 = *k;
|
||||||
|
if ( !v5 )
|
||||||
|
break;
|
||||||
|
// dword_6689A4[v5] = 10;
|
||||||
|
Tokenizer::TT[(0x6689A4 - 0x006685A0) / 4 + v5] = 10;
|
||||||
|
}
|
||||||
|
const char* plus = "+-*/%^~()[],?:{}";
|
||||||
|
for ( const char* m = plus; ; ++m )
|
||||||
|
{
|
||||||
|
char v7 = *m;
|
||||||
|
if ( !v7 )
|
||||||
|
break;
|
||||||
|
// dword_6689A4[v7] = 327681;
|
||||||
|
Tokenizer::TT[(0x6689A4 - 0x006685A0) / 4 + v7] = 327681;
|
||||||
|
}
|
||||||
|
Tokenizer::TT[(0x668A5C - 0x006685A0) / 4] = 3;
|
||||||
|
Tokenizer::TT[(0x668A2C - 0x006685A0) / 4] = 6;
|
||||||
|
Tokenizer::TT[(0x668A40 - 0x006685A0) / 4] = 8;
|
||||||
|
Tokenizer::TT[(0x668A98 - 0x006685A0) / 4] = 12;
|
||||||
|
Tokenizer::TT[(0x668B94 - 0x006685A0) / 4] = 15;
|
||||||
|
Tokenizer::TT[(0x668A3C - 0x006685A0) / 4] = 14;
|
||||||
|
Tokenizer::TT[(0x668A94 - 0x006685A0) / 4] = 16;
|
||||||
|
Tokenizer::TT[(0x668A9C - 0x006685A0) / 4] = 17;
|
||||||
|
Tokenizer::TT[(0x668A28 - 0x006685A0) / 4] = 18;
|
||||||
|
Tokenizer::TT[(0x6689A4 - 0x006685A0) / 4] = 8519681;
|
||||||
|
Tokenizer::TT[(0x668DA4 - 0x006685A0) / 4] = -1;
|
||||||
|
Tokenizer::TT[(0x668A60 - 0x006685A0) / 4] = 21;
|
||||||
|
Tokenizer::TT[(0x66DA9C - 0x006685A0) / 4] = 22;
|
||||||
|
Tokenizer::TT[(0x66DDF4 - 0x006685A0) / 4] = 4325377;
|
||||||
|
Tokenizer::TT[(0x66DEA0 - 0x006685A0) / 4] = 23;
|
||||||
|
Tokenizer::TT[(0x66E1F8 - 0x006685A0) / 4] = 8388630;
|
||||||
|
Tokenizer::TT[(0x66E2B8 - 0x006685A0) / 4] = 8388609;
|
||||||
|
Tokenizer::TT[(0x66E2A4 - 0x006685A0) / 4] = 4194326;
|
||||||
|
Tokenizer::TT[(0x66E5FC - 0x006685A0) / 4] = 22;
|
||||||
|
const char* v8 = $abc;
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
char v9 = *v8;
|
||||||
|
if ( !v9 )
|
||||||
|
break;
|
||||||
|
// dword_66B9D4[v9] = 13;
|
||||||
|
Tokenizer::TT[(0x66B9D4 - 0x006685A0) / 4 + v9] = 13;
|
||||||
|
++v8;
|
||||||
|
}
|
||||||
|
for (const char* n = _0123; ; ++n )
|
||||||
|
{
|
||||||
|
char v11 = *n;
|
||||||
|
if ( !v11 )
|
||||||
|
break;
|
||||||
|
// dword_66B9D4[v11] = 13;
|
||||||
|
Tokenizer::TT[(0x66B9D4 - 0x006685A0) / 4 + v11] = 13;
|
||||||
|
}
|
||||||
|
Tokenizer::TT[(0x66BDD4 - 0x006685A0) / 4] = 0x620001;
|
||||||
|
for (const char* n = _0123; ; ++n )
|
||||||
|
{
|
||||||
|
char v11 = *n;
|
||||||
|
if ( !v11 )
|
||||||
|
break;
|
||||||
|
Tokenizer::TT[(0x6691AC - 0x006685A0) / 4 + v11] = 11;
|
||||||
|
}
|
||||||
|
Tokenizer::TT[(0x669264 - 0x006685A0) / 4] = 4;
|
||||||
|
Tokenizer::TT[(0x6695AC - 0x006685A0) / 4] = 0x460001;
|
||||||
|
Tokenizer::TT[(0x669668 - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x6699B0 - 0x006685A0) / 4] = -1;
|
||||||
|
v8 = _0123;
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
char v9 = *v8;
|
||||||
|
if ( !v9 )
|
||||||
|
break;
|
||||||
|
Tokenizer::TT[(0x66ADC8 - 0x006685A0) / 4 + v9] = 10;
|
||||||
|
++v8;
|
||||||
|
}
|
||||||
|
Tokenizer::TT[(0x66AE80 - 0x006685A0) / 4] = 11;
|
||||||
|
Tokenizer::TT[(0x66B1C8 - 0x006685A0) / 4] = 0x4A0001;
|
||||||
|
v8 = _0123;
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
char v9 = *v8;
|
||||||
|
if ( !v9 )
|
||||||
|
break;
|
||||||
|
Tokenizer::TT[(0x66B1CC - 0x006685A0) / 4 + v9] = 11;
|
||||||
|
++v8;
|
||||||
|
}
|
||||||
|
Tokenizer::TT[(0x66B5CC - 0x006685A0) / 4] = 0x4A0001;
|
||||||
|
Tokenizer::TT[(0x66B6C4 - 0x006685A0) / 4] = 19;
|
||||||
|
Tokenizer::TT[(0x66B9D0 - 0x006685A0) / 4] = -1;
|
||||||
|
Tokenizer::TT[(0x66D2E0 - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66D5EC - 0x006685A0) / 4] = 0x460001;
|
||||||
|
Tokenizer::TT[(0x66BE70 - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66C1D8 - 0x006685A0) / 4] = 4325377;
|
||||||
|
Tokenizer::TT[(0x66C3CC - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66C5DC - 0x006685A0) / 4] = 4325377;
|
||||||
|
Tokenizer::TT[(0x668E9C - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x6691A8 - 0x006685A0) / 4] = 0x460001;
|
||||||
|
Tokenizer::TT[(0x669F28 - 0x006685A0) / 4] = 7;
|
||||||
|
Tokenizer::TT[(0x669DE0 - 0x006685A0) / 4] = 9568257;
|
||||||
|
Tokenizer::TT[(0x66A5BC - 0x006685A0) / 4] = 6;
|
||||||
|
Tokenizer::TT[(0x66A1E4 - 0x006685A0) / 4] = 9568257;
|
||||||
|
Tokenizer::TT[(0x669E40 - 0x006685A0) / 4] = 1114113;
|
||||||
|
Tokenizer::TT[(0x66A1B8 - 0x006685A0) / 4] = 6;
|
||||||
|
Tokenizer::TT[(0x66A730 - 0x006685A0) / 4] = 9;
|
||||||
|
Tokenizer::TT[(0x66A5E8 - 0x006685A0) / 4] = 9568257;
|
||||||
|
Tokenizer::TT[(0x66ADC4 - 0x006685A0) / 4] = 8;
|
||||||
|
Tokenizer::TT[(0x66A9EC - 0x006685A0) / 4] = 9568257;
|
||||||
|
Tokenizer::TT[(0x66A65C - 0x006685A0) / 4] = 1114113;
|
||||||
|
Tokenizer::TT[(0x66A9C0 - 0x006685A0) / 4] = 8;
|
||||||
|
Tokenizer::TT[(0x66C6D4 - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66C6D0 - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66C9E0 - 0x006685A0) / 4] = 0x460001;
|
||||||
|
Tokenizer::TT[(0x66CAD8 - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66CADC - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66CDE4 - 0x006685A0) / 4] = 0x460001;
|
||||||
|
Tokenizer::TT[(0x66CEDC - 0x006685A0) / 4] = 20;
|
||||||
|
Tokenizer::TT[(0x66D6E4 - 0x006685A0) / 4] = 327681;
|
||||||
|
Tokenizer::TT[(0x66D9F0 - 0x006685A0) / 4] = 0x460001;
|
||||||
|
Tokenizer::TT[(0x66D1E8 - 0x006685A0) / 4] = 0x460001;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int Tokenizer::GetTokens(std::vector<WXML::EXPRLib::Token> & a2, std::string &a3)
|
||||||
|
{
|
||||||
|
int v21 = 18899;
|
||||||
|
WXML::EXPRLib::Tokenizer::InitTransitTable();
|
||||||
|
int v24 = 1;
|
||||||
|
int v29;
|
||||||
|
for (int v28 = 0; v28 < this->offset_0.size();)
|
||||||
|
{
|
||||||
|
if (!--v21)
|
||||||
|
{
|
||||||
|
a3 = "something must be wrong";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
std::string v25 = this->offset_0;
|
||||||
|
int v3 = this->offset_0[v28];
|
||||||
|
if (v28 == this->offset_0.size())
|
||||||
|
{
|
||||||
|
v3 = 0;
|
||||||
|
}
|
||||||
|
int t = WXML::EXPRLib::Tokenizer::TT[257 * v24 + v3];
|
||||||
|
if (!t)
|
||||||
|
{
|
||||||
|
t = WXML::EXPRLib::Tokenizer::TT[257 * v24];
|
||||||
|
if (!t)
|
||||||
|
{
|
||||||
|
std::stringstream v39;
|
||||||
|
v39 << "no transition for " << v24 << " with input " << v3;
|
||||||
|
a3 = v39.str();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (t == -1)
|
||||||
|
{
|
||||||
|
std::stringstream v39;
|
||||||
|
v39 << "unexpected `" << v3 << "` at pos" << v28;
|
||||||
|
a3 = v39.str();
|
||||||
|
}
|
||||||
|
if ((t & 0x30000) != 0)
|
||||||
|
{
|
||||||
|
int v8 = 1;
|
||||||
|
int v27 = ((t & 0x20000) == 0) + v28 - 1;
|
||||||
|
if (!bittest(&t, 0x13u))
|
||||||
|
{
|
||||||
|
v8 = 2;
|
||||||
|
if (!bittest(&t, 0x14u))
|
||||||
|
{
|
||||||
|
v8 = ((t << 10) >> 31) & 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (v29 <= v27)
|
||||||
|
{
|
||||||
|
WXML::EXPRLib::Token v39;
|
||||||
|
char* KEYWORDS[] = {};
|
||||||
|
if (v8)
|
||||||
|
{
|
||||||
|
char **v31 = KEYWORDS;
|
||||||
|
std::string v26 = this->offset_0.substr(v29, v27 + 1);
|
||||||
|
while (*v31)
|
||||||
|
{
|
||||||
|
if (!strcmp(v26.data(), *v31++))
|
||||||
|
{
|
||||||
|
v39.offset_0 = 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a2.push_back(v39);
|
||||||
|
}
|
||||||
|
v29 = v27 + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
v28 += (t & 0x400000) == 0;
|
||||||
|
if (t &0x800000 != 0)
|
||||||
|
v29 = v28;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
28
src/wxml/expr_lib/transit_table.cpp
Normal file
28
src/wxml/expr_lib/transit_table.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "../../include/wxml.h"
|
||||||
|
|
||||||
|
namespace WXML
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace EXPRLib
|
||||||
|
{
|
||||||
|
TransitTable::TransitTable(/* args */)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
TransitTable::~TransitTable()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
int TransitTable::GetExprNTType(void)
|
||||||
|
{
|
||||||
|
return 14;
|
||||||
|
}
|
||||||
|
int TransitTable::GetAttrListNTType(void)
|
||||||
|
{
|
||||||
|
return 12;
|
||||||
|
}
|
||||||
|
void Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -24066,6 +24066,8 @@ int __cdecl WXML::DOMLib::WXMLDom::DealSingleTokenToOps(
|
|||||||
v86[0] = v109;
|
v86[0] = v109;
|
||||||
if ( v109 )
|
if ( v109 )
|
||||||
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy((int)v109);
|
std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_copy((int)v109);
|
||||||
|
/*
|
||||||
|
*/
|
||||||
v70 = v85;
|
v70 = v85;
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)v86);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count((volatile signed __int32 **)v86);
|
||||||
std::string::basic_string((void **)&v85, (char *)&byte_5537CA);
|
std::string::basic_string((void **)&v85, (char *)&byte_5537CA);
|
||||||
@ -28741,11 +28743,14 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
int *v84; // [esp+F4h] [ebp-24h] BYREF
|
int *v84; // [esp+F4h] [ebp-24h] BYREF
|
||||||
int v85[3]; // [esp+F8h] [ebp-20h] BYREF
|
int v85[3]; // [esp+F8h] [ebp-20h] BYREF
|
||||||
volatile signed __int32 *v86[4]; // [esp+104h] [ebp-14h] BYREF
|
volatile signed __int32 *v86[4]; // [esp+104h] [ebp-14h] BYREF
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 0
|
||||||
|
// int this
|
||||||
|
// 清空
|
||||||
while ( *(_DWORD *)(this + 24) != *(_DWORD *)(this + 8) )
|
while ( *(_DWORD *)(this + 24) != *(_DWORD *)(this + 8) )
|
||||||
std::deque<zcc::shared_ptr<WXML::EXPRLib::Base>>::pop_back((_DWORD *)this);
|
std::deque<zcc::shared_ptr<WXML::EXPRLib::Base>>::pop_back((_DWORD *)this);
|
||||||
while ( *(_DWORD *)(this + 64) != *(_DWORD *)(this + 48) )
|
while ( *(_DWORD *)(this + 64) != *(_DWORD *)(this + 48) )
|
||||||
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::pop_back((_DWORD *)(this + 40));
|
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::pop_back((_DWORD *)(this + 40));
|
||||||
|
|
||||||
if ( !(_BYTE)`guard variable for WXML::EXPRLib::TransitTable::GetInstance(void)::ret
|
if ( !(_BYTE)`guard variable for WXML::EXPRLib::TransitTable::GetInstance(void)::ret
|
||||||
&& __cxa_guard_acquire(&`guard variable for WXML::EXPRLib::TransitTable::GetInstance(void)::ret) )
|
&& __cxa_guard_acquire(&`guard variable for WXML::EXPRLib::TransitTable::GetInstance(void)::ret) )
|
||||||
{
|
{
|
||||||
@ -28760,6 +28765,7 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
}
|
}
|
||||||
WXML::EXPRLib::TransitTable::Init(v41);
|
WXML::EXPRLib::TransitTable::Init(v41);
|
||||||
WXML::EXPRLib::Tokenizer::Tokenizer(v77, *a2, a3, a4, a5);
|
WXML::EXPRLib::Tokenizer::Tokenizer(v77, *a2, a3, a4, a5);
|
||||||
|
// std::vector<WXML::EXPRLib::Token> v74;
|
||||||
v74 = 0;
|
v74 = 0;
|
||||||
v75 = 0;
|
v75 = 0;
|
||||||
v76 = 0;
|
v76 = 0;
|
||||||
@ -28767,12 +28773,14 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
v43 = v7;
|
v43 = v7;
|
||||||
if ( Tokens )
|
if ( Tokens )
|
||||||
goto LABEL_78;
|
goto LABEL_78;
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 5
|
||||||
if ( v74 == (char *)v75 )
|
if ( v74 == (char *)v75 )
|
||||||
{
|
{
|
||||||
|
// _DWORD *v8; WXML::EXPRLib::ExprSyntaxTree
|
||||||
v8 = operator new(0x40u);
|
v8 = operator new(0x40u);
|
||||||
memset(v8, 0, 0x40u);
|
memset(v8, 0, 0x40u);
|
||||||
*v8 = v8 + 2;
|
*v8 = v8 + 2; // std::string地址指向“向后偏移8位”的位置
|
||||||
WXML::EXPRLib::Token::Token(v8 + 6);
|
WXML::EXPRLib::Token::Token(v8 + 6); // v8.offset_24
|
||||||
v8[13] = 0;
|
v8[13] = 0;
|
||||||
v8[14] = 0;
|
v8[14] = 0;
|
||||||
v8[15] = 0;
|
v8[15] = 0;
|
||||||
@ -28780,8 +28788,10 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
*(_DWORD *)(this + 80) = v84;
|
*(_DWORD *)(this + 80) = v84;
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(this + 84), v85[0]);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(this + 84), v85[0]);
|
||||||
v9 = (volatile signed __int32 **)v85;
|
v9 = (volatile signed __int32 **)v85;
|
||||||
goto LABEL_77;
|
goto LABEL_77; // 销毁数据,返回
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 10
|
||||||
WXML::EXPRLib::Token::Token(v82);
|
WXML::EXPRLib::Token::Token(v82);
|
||||||
v82[0] = 5;
|
v82[0] = 5;
|
||||||
if ( v75 == v76 )
|
if ( v75 == v76 )
|
||||||
@ -28797,22 +28807,31 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
WXML::EXPRLib::Token::Token((int *)v75, (WXML::EXPRLib::Token *)v82, v43);
|
WXML::EXPRLib::Token::Token((int *)v75, (WXML::EXPRLib::Token *)v82, v43);
|
||||||
v75 += 28;
|
v75 += 28;
|
||||||
}
|
}
|
||||||
v11 = operator new(0x38u);
|
// WXML::EXPRLib::Parser::Parse - 15
|
||||||
*v11 = &off_55F220;
|
// _DWORD *v11
|
||||||
v11[1] = v11 + 3;
|
v11 = operator new(0x38u); // 0x38 -> 56
|
||||||
|
*v11 = &off_55F220; // 函数?
|
||||||
|
v11[1] = v11 + 3; // std::string
|
||||||
v11[2] = 0;
|
v11[2] = 0;
|
||||||
|
// v11.offset_12
|
||||||
*((_BYTE *)v11 + 12) = 0;
|
*((_BYTE *)v11 + 12) = 0;
|
||||||
|
// v11.offset_28
|
||||||
WXML::EXPRLib::Token::Token(v11 + 7);
|
WXML::EXPRLib::Token::Token(v11 + 7);
|
||||||
zcc::shared_ptr<WXML::EXPRLib::Base>::shared_ptr(&v68, (int)v11);
|
zcc::shared_ptr<WXML::EXPRLib::Base>::shared_ptr(&v68, (int)v11);
|
||||||
Blockh = v68;
|
Blockh = v68;
|
||||||
|
// Blockh - v68 - v11 WXML::EXPRLib::Base
|
||||||
std::string::basic_string((void **)&v84, "$");
|
std::string::basic_string((void **)&v84, "$");
|
||||||
|
// Blockh -> v11 -> v68
|
||||||
std::string::_M_assign((int)Blockh + 4, (int)&v84);
|
std::string::_M_assign((int)Blockh + 4, (int)&v84);
|
||||||
std::string::_M_dispose((void **)&v84);
|
std::string::_M_dispose((void **)&v84);
|
||||||
std::deque<zcc::shared_ptr<WXML::EXPRLib::Base>>::push_back(this, (int *)&v68);
|
std::deque<zcc::shared_ptr<WXML::EXPRLib::Base>>::push_back(this, (int *)&v68);
|
||||||
|
|
||||||
|
// WXML::EXPRLib::Base
|
||||||
v12 = operator new(8u);
|
v12 = operator new(8u);
|
||||||
*v12 = &off_55F1E4;
|
*v12 = &off_55F1E4; // 函数?
|
||||||
v12[1] = 0;
|
v12[1] = 0;
|
||||||
zcc::shared_ptr<WXML::EXPRLib::Base>::shared_ptr(&v70, (int)v12);
|
zcc::shared_ptr<WXML::EXPRLib::Base>::shared_ptr(&v70, (int)v12);
|
||||||
|
// Block - v70 - v12
|
||||||
Block = v70;
|
Block = v70;
|
||||||
if ( a7 )
|
if ( a7 )
|
||||||
Block[1] = WXML::EXPRLib::TransitTable::GetAttrListNTType();
|
Block[1] = WXML::EXPRLib::TransitTable::GetAttrListNTType();
|
||||||
@ -28822,19 +28841,25 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
v72 = 0;
|
v72 = 0;
|
||||||
v73 = 0;
|
v73 = 0;
|
||||||
v49 = 0;
|
v49 = 0;
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20
|
||||||
while ( 1 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
v13 = *(_DWORD *)(this + 24);
|
// int this
|
||||||
if ( *(_DWORD *)(this + 8) == v13 )
|
v13 = *(_DWORD *)(this + 24); // this->offset_24
|
||||||
|
if ( *(_DWORD *)(this + 8) == v13 ) // this->offset_8
|
||||||
break;
|
break;
|
||||||
if ( v13 == *(_DWORD *)(this + 28) )
|
if ( v13 == *(_DWORD *)(this + 28) ) // this->offset_28
|
||||||
v13 = *(_DWORD *)(*(_DWORD *)(this + 36) - 4) + 512;
|
v13 = *(_DWORD *)(*(_DWORD *)(this + 36) - 4) + 512;
|
||||||
v42 = *(_DWORD *)(v13 - 4);
|
// int v13
|
||||||
|
v42 = *(_DWORD *)(v13 - 4); // 00(v72) 00 00 00, 00(v42) 00 00 00(v13) shared_ptr
|
||||||
v72 = *(_DWORD **)(v13 - 8);
|
v72 = *(_DWORD **)(v13 - 8);
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(&v73, v42);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(&v73, v42);
|
||||||
|
// v49在递增
|
||||||
WXML::EXPRLib::Token::Token((int *)&v84, (WXML::EXPRLib::Token *)&v74[28 * v49], v44);
|
WXML::EXPRLib::Token::Token((int *)&v84, (WXML::EXPRLib::Token *)&v74[28 * v49], v44);
|
||||||
|
// v72.offset_8
|
||||||
v15 = (*(int (__thiscall **)(_DWORD *, int))(*v72 + 8))(v72, v14);
|
v15 = (*(int (__thiscall **)(_DWORD *, int))(*v72 + 8))(v72, v14);
|
||||||
Blocka = v72;
|
Blocka = v72;
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20-1
|
||||||
if ( v15 == 1 )
|
if ( v15 == 1 )
|
||||||
{
|
{
|
||||||
TokenName = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84);
|
TokenName = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84);
|
||||||
@ -28852,9 +28877,9 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
Blocki[1] = 0;
|
Blocki[1] = 0;
|
||||||
*((_BYTE *)Blocki + 8) = 0;
|
*((_BYTE *)Blocki + 8) = 0;
|
||||||
WXML::EXPRLib::Token::Token(Blocki + 6);
|
WXML::EXPRLib::Token::Token(Blocki + 6);
|
||||||
Blocki[13] = 0;
|
Blocki[13] = 0; // offset_52
|
||||||
Blocki[14] = 0;
|
Blocki[14] = 0; // offset_56
|
||||||
Blocki[15] = 0;
|
Blocki[15] = 0; // offset_60
|
||||||
zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>::shared_ptr(Blocki);
|
zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>::shared_ptr(Blocki);
|
||||||
Blockb = v80;
|
Blockb = v80;
|
||||||
v80[6] = v84;
|
v80[6] = v84;
|
||||||
@ -28868,10 +28893,11 @@ int __thiscall WXML::EXPRLib::Parser::Parse(int this, char **a2, int a3, int a4,
|
|||||||
std::string::operator=((unsigned int *)v80, v18);
|
std::string::operator=((unsigned int *)v80, v18);
|
||||||
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::push_back(this + 40, (int *)&v80);
|
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::push_back(this + 40, (int *)&v80);
|
||||||
v19 = v81;
|
v19 = v81;
|
||||||
LABEL_37:
|
LABEL_37:
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v19);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v19);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20-2
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( (*(int (__fastcall **)(_DWORD *))(*v72 + 8))(v72) == 3 )
|
if ( (*(int (__fastcall **)(_DWORD *))(*v72 + 8))(v72) == 3 )
|
||||||
@ -28889,9 +28915,10 @@ LABEL_37:
|
|||||||
std::string::operator+=(a6, (int)a2);
|
std::string::operator+=(a6, (int)a2);
|
||||||
std::string::operator+=(a6, "`");
|
std::string::operator+=(a6, "`");
|
||||||
Tokens = 1001;
|
Tokens = 1001;
|
||||||
goto LABEL_72;
|
goto LABEL_72; // 销毁数据,return Tokens
|
||||||
}
|
}
|
||||||
v20 = (int *)std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::back((_DWORD *)(this + 40));
|
v20 = (int *)std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::back((_DWORD *)(this + 40));
|
||||||
|
// v78 - v20
|
||||||
std::__shared_ptr<WXML::EXPRLib::ExprSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr((int *)&v78, v20);
|
std::__shared_ptr<WXML::EXPRLib::ExprSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr((int *)&v78, v20);
|
||||||
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::pop_back((_DWORD *)(this + 40));
|
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::pop_back((_DWORD *)(this + 40));
|
||||||
if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) )
|
if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) )
|
||||||
@ -28903,13 +28930,14 @@ LABEL_37:
|
|||||||
std::string::operator+=(a6, "`");
|
std::string::operator+=(a6, "`");
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v79);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v79);
|
||||||
Tokens = 1002;
|
Tokens = 1002;
|
||||||
goto LABEL_72;
|
goto LABEL_72; // 销毁数据,return Tokens
|
||||||
}
|
}
|
||||||
v21 = (int *)std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::back((_DWORD *)(this + 40));
|
v21 = (int *)std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::back((_DWORD *)(this + 40));
|
||||||
std::__shared_ptr<WXML::EXPRLib::ExprSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr((int *)&v80, v21);
|
std::__shared_ptr<WXML::EXPRLib::ExprSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr((int *)&v80, v21);
|
||||||
std::vector<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::push_back(v80 + 13, (int *)&v78);
|
std::vector<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::push_back(v80 + 13, (int *)&v78);
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v81);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v81);
|
||||||
}
|
}
|
||||||
|
//////////////////////
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
v45 = v72[8];
|
v45 = v72[8];
|
||||||
@ -28921,7 +28949,10 @@ LABEL_37:
|
|||||||
v22[14] = 0;
|
v22[14] = 0;
|
||||||
v22[15] = 0;
|
v22[15] = 0;
|
||||||
zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>::shared_ptr(v22);
|
zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>::shared_ptr(v22);
|
||||||
std::string::_M_assign((int)v78, (int)(v50 + 1));
|
|
||||||
|
// OP_PATH...
|
||||||
|
std::string::_M_assign((int)v78, (int)(v50 + 1)); // v50 -> v72
|
||||||
|
|
||||||
for ( Blockc = 0; (int)Blockc < v45; ++Blockc )
|
for ( Blockc = 0; (int)Blockc < v45; ++Blockc )
|
||||||
{
|
{
|
||||||
if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) )
|
if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) )
|
||||||
@ -28933,28 +28964,31 @@ LABEL_37:
|
|||||||
std::string::operator+=(a6, "`");
|
std::string::operator+=(a6, "`");
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v79);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v79);
|
||||||
Tokens = 1003;
|
Tokens = 1003;
|
||||||
goto LABEL_72;
|
goto LABEL_72; // 销毁数据,return Tokens
|
||||||
}
|
}
|
||||||
v23 = (int *)std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::back((_DWORD *)(this + 40));
|
v23 = (int *)std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::back((_DWORD *)(this + 40));
|
||||||
|
// v78.offset_52
|
||||||
std::vector<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::push_back(v78 + 13, v23);
|
std::vector<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::push_back(v78 + 13, v23);
|
||||||
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::pop_back((_DWORD *)(this + 40));
|
std::deque<zcc::shared_ptr<WXML::EXPRLib::ExprSyntaxTree>>::pop_back((_DWORD *)(this + 40));
|
||||||
}
|
}
|
||||||
if ( !v47 )
|
if ( !v47 )
|
||||||
{
|
{
|
||||||
|
// v78->offset_56
|
||||||
v24 = v78[14];
|
v24 = v78[14];
|
||||||
if ( v78[13] != v24 )
|
if ( v78[13] != v24 )
|
||||||
{
|
{
|
||||||
v51 = v78[13];
|
v51 = v78[13]; // WXML::EXPRLib::ExprSyntaxTree
|
||||||
for ( Blockd = (volatile signed __int32 **)(v24 - 2); Blockd > (volatile signed __int32 **)v51; Blockd -= 2 )
|
for ( Blockd = (volatile signed __int32 **)(v24 - 2); Blockd > (volatile signed __int32 **)v51; Blockd -= 2 )
|
||||||
{
|
{
|
||||||
std::__shared_ptr<WXML::EXPRLib::ExprSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr(
|
std::__shared_ptr<WXML::EXPRLib::ExprSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr(
|
||||||
(int *)&v80,
|
(int *)&v80,
|
||||||
v51);
|
v51);
|
||||||
*v51 = (int)*Blockd;
|
*v51 = (int)*Blockd; // cur
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(
|
||||||
(volatile signed __int32 **)v51 + 1,
|
(volatile signed __int32 **)v51 + 1,
|
||||||
(int)Blockd[1]);
|
(int)Blockd[1]);
|
||||||
*Blockd = (volatile signed __int32 *)v80;
|
*Blockd = (volatile signed __int32 *)v80;
|
||||||
|
// v80 - v51
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(Blockd + 1, (int)v81[0]);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(Blockd + 1, (int)v81[0]);
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v81);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v81);
|
||||||
v51 += 2;
|
v51 += 2;
|
||||||
@ -28966,6 +29000,7 @@ LABEL_37:
|
|||||||
v19 = v79;
|
v19 = v79;
|
||||||
goto LABEL_37;
|
goto LABEL_37;
|
||||||
}
|
}
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 20-3
|
||||||
if ( (*(int (__fastcall **)(_DWORD *))(*v72 + 8))(v72) == 2 )
|
if ( (*(int (__fastcall **)(_DWORD *))(*v72 + 8))(v72) == 2 )
|
||||||
{
|
{
|
||||||
v67 = v72[1];
|
v67 = v72[1];
|
||||||
@ -29020,14 +29055,14 @@ LABEL_37:
|
|||||||
if ( Blockf )
|
if ( Blockf )
|
||||||
{
|
{
|
||||||
std::string::operator=(a6, "unexpected token `");
|
std::string::operator=(a6, "unexpected token `");
|
||||||
LABEL_66:
|
LABEL_66:
|
||||||
Literal = (char *)WXML::EXPRLib::Token::GetLiteral(&v84);
|
Literal = (char *)WXML::EXPRLib::Token::GetLiteral(&v84);
|
||||||
std::string::operator+=(a6, Literal);
|
std::string::operator+=(a6, Literal);
|
||||||
std::string::operator+=(a6, "`");
|
std::string::operator+=(a6, "`");
|
||||||
Tokens = -1;
|
Tokens = -1;
|
||||||
LABEL_72:
|
LABEL_72: // 销毁数据,return Tokens
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v86);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v86);
|
||||||
goto LABEL_76;
|
goto LABEL_76; // 销毁数据,return Tokens
|
||||||
}
|
}
|
||||||
std::deque<zcc::shared_ptr<WXML::EXPRLib::Base>>::pop_back((_DWORD *)this);
|
std::deque<zcc::shared_ptr<WXML::EXPRLib::Base>>::pop_back((_DWORD *)this);
|
||||||
v34 = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84);
|
v34 = (char *)WXML::EXPRLib::Token::GetTokenName((const char **)&v84);
|
||||||
@ -29048,6 +29083,7 @@ LABEL_72:
|
|||||||
}
|
}
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v86);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(v86);
|
||||||
}
|
}
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 25
|
||||||
if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) )
|
if ( *(_DWORD *)(this + 64) == *(_DWORD *)(this + 48) )
|
||||||
{
|
{
|
||||||
std::string::operator=(a6, "interal error: ");
|
std::string::operator=(a6, "interal error: ");
|
||||||
@ -29065,6 +29101,7 @@ LABEL_72:
|
|||||||
*(_DWORD *)(this + 80) = v38;
|
*(_DWORD *)(this + 80) = v38;
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(this + 84), v39);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(this + 84), v39);
|
||||||
}
|
}
|
||||||
|
// WXML::EXPRLib::Parser::Parse - 30
|
||||||
LABEL_76:
|
LABEL_76:
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v73);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v73);
|
||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v71);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v71);
|
||||||
@ -29237,6 +29274,7 @@ const char *__fastcall WXML::EXPRLib::Token::GetLiteral(_DWORD *a1)
|
|||||||
result = "$";
|
result = "$";
|
||||||
if ( *a1 != 5 )
|
if ( *a1 != 5 )
|
||||||
{
|
{
|
||||||
|
// a1->offset_12
|
||||||
v2 = a1[3];
|
v2 = a1[3];
|
||||||
result = (const char *)&unk_5545E0;
|
result = (const char *)&unk_5545E0;
|
||||||
if ( v2 )
|
if ( v2 )
|
||||||
@ -29473,7 +29511,7 @@ unsigned int __thiscall WXML::EXPRLib::Tokenizer::Tokenizer(void **this, char *S
|
|||||||
size_t v6; // eax
|
size_t v6; // eax
|
||||||
void **v8; // [esp+1Ch] [ebp-Ch]
|
void **v8; // [esp+1Ch] [ebp-Ch]
|
||||||
|
|
||||||
*this = this + 2;
|
*this = this + 2; // std::string缓冲区
|
||||||
v5 = -1;
|
v5 = -1;
|
||||||
if ( Str )
|
if ( Str )
|
||||||
{
|
{
|
||||||
@ -29712,6 +29750,7 @@ int __thiscall WXML::EXPRLib::Tokenizer::GetTokens(int *this, _DWORD *a2, unsign
|
|||||||
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v42);
|
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count(&v42);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// v19 临时存储,其它弟妹没用到
|
||||||
v19 = v29;
|
v19 = v29;
|
||||||
v28 += ((unsigned int)lpuexcpt & 0x400000) == 0;
|
v28 += ((unsigned int)lpuexcpt & 0x400000) == 0;
|
||||||
if ( ((unsigned int)lpuexcpt & 0x800000) != 0 )
|
if ( ((unsigned int)lpuexcpt & 0x800000) != 0 )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user