mirror of
https://github.com/msojocs/wx-compiler.git
synced 2025-07-19 00:00:04 +08:00
fix: Machine::Feed逻辑
This commit is contained in:
parent
4b4d792c92
commit
8fd49dc4c9
@ -189,7 +189,7 @@ namespace WXML
|
|||||||
~Machine();
|
~Machine();
|
||||||
void Reset(void);
|
void Reset(void);
|
||||||
void InitTransitTable(void);
|
void InitTransitTable(void);
|
||||||
void Feed(char,std::vector<WXML::DOMLib::Token> &,std::string &,std::vector<WXML::DOMLib::Token> &,int);
|
int Feed(char,std::vector<WXML::DOMLib::Token> &,std::string &,std::vector<WXML::DOMLib::Token> &,int);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -317,6 +317,7 @@ namespace WXML
|
|||||||
bool operator==(std::string tag);
|
bool operator==(std::string tag);
|
||||||
std::string ToCamelStyle(std::string const&);
|
std::string ToCamelStyle(std::string const&);
|
||||||
void AddTestAttr(std::string const&, std::stringstream &, char);
|
void AddTestAttr(std::string const&, std::stringstream &, char);
|
||||||
|
bool HasSpAttrPrefix(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -295,9 +295,8 @@ namespace WXML
|
|||||||
this->STT[ (0x5665E0 - 0x00566560)/4] = 3;
|
this->STT[ (0x5665E0 - 0x00566560)/4] = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int dword_567960[1000] = {0};
|
|
||||||
|
|
||||||
void Machine::Feed(
|
int Machine::Feed(
|
||||||
char inputChar,
|
char inputChar,
|
||||||
std::vector<WXML::DOMLib::Token> & a3,
|
std::vector<WXML::DOMLib::Token> & a3,
|
||||||
std::string &errorMessage,
|
std::string &errorMessage,
|
||||||
@ -321,14 +320,15 @@ namespace WXML
|
|||||||
v46 = this->TT[257 * v45 + inputChar];
|
v46 = this->TT[257 * v45 + inputChar];
|
||||||
if (!v46)
|
if (!v46)
|
||||||
{
|
{
|
||||||
v46 = dword_567960[257 * v45];
|
v46 = this->TT[ (0x567960 - 0x00567560)/4 + 257 * v45];
|
||||||
if(!v46)
|
if(!v46)
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "BAD STATE MACHINE! AT INPUT ";
|
ss << "BAD STATE MACHINE! AT INPUT ";
|
||||||
ss << this->offset_24 << " " << inputChar;
|
ss << this->offset_24 << " " << inputChar;
|
||||||
errorMessage = ss.str();
|
errorMessage = ss.str();
|
||||||
return;
|
throw errorMessage;
|
||||||
|
// return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (v46 < 0)
|
if (v46 < 0)
|
||||||
@ -346,7 +346,7 @@ namespace WXML
|
|||||||
ss << "unexpected end";
|
ss << "unexpected end";
|
||||||
}
|
}
|
||||||
errorMessage = ss.str();
|
errorMessage = ss.str();
|
||||||
return;
|
throw errorMessage;
|
||||||
}
|
}
|
||||||
this->offset_24 = (uint16_t)v46;
|
this->offset_24 = (uint16_t)v46;
|
||||||
if (bittest(&v46, 0x15u)) // 0x15 -> 21
|
if (bittest(&v46, 0x15u)) // 0x15 -> 21
|
||||||
@ -408,11 +408,12 @@ namespace WXML
|
|||||||
WXML::DOMLib::Token v49;
|
WXML::DOMLib::Token v49;
|
||||||
v49.offset_8 = this->offset_16;
|
v49.offset_8 = this->offset_16;
|
||||||
v49.offset_12 = this->offset_20;
|
v49.offset_12 = this->offset_20;
|
||||||
|
auto t4 = this->offset_4;
|
||||||
this->offset_4 = this->fileLength;
|
this->offset_4 = this->fileLength;
|
||||||
this->offset_20 = this->lineLength;
|
this->offset_20 = this->lineLength;
|
||||||
this->offset_16 = this->lineCount;
|
this->offset_16 = this->lineCount;
|
||||||
v49.offset_16 = this->offset_4;
|
v49.offset_16 = t4;
|
||||||
v49.offset_20 = this->lineLength + 1 - this->offset_4;
|
v49.offset_20 = this->fileLength - t4;
|
||||||
int stt = WXML::DOMLib::Machine::STT[v45];
|
int stt = WXML::DOMLib::Machine::STT[v45];
|
||||||
v49.offset_24 = stt;
|
v49.offset_24 = stt;
|
||||||
if (stt == 3)
|
if (stt == 3)
|
||||||
@ -430,12 +431,14 @@ namespace WXML
|
|||||||
offset_4 = fileLength;
|
offset_4 = fileLength;
|
||||||
offset_20 = lineLength;
|
offset_20 = lineLength;
|
||||||
}
|
}
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
catch(const std::exception& e)
|
catch(const std::exception& e)
|
||||||
{
|
{
|
||||||
std::cerr << e.what() << '\n';
|
std::cerr << e.what() << '\n';
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
void Machine::Reset()
|
void Machine::Reset()
|
||||||
|
@ -210,6 +210,7 @@ namespace WXML
|
|||||||
int v17 = 0;
|
int v17 = 0;
|
||||||
// TODO v18 = *v16 + v43[4];
|
// TODO v18 = *v16 + v43[4];
|
||||||
char* v18 = &v16[0] + token.offset_16;
|
char* v18 = &v16[0] + token.offset_16;
|
||||||
|
// offset_20第一次是3
|
||||||
while(token.offset_20 > v17)
|
while(token.offset_20 > v17)
|
||||||
{
|
{
|
||||||
int v19 = *(uint8_t *)(v18 + v17) - 9;
|
int v19 = *(uint8_t *)(v18 + v17) - 9;
|
||||||
|
@ -843,7 +843,7 @@ namespace WXML {
|
|||||||
}
|
}
|
||||||
if (!hasIf)
|
if (!hasIf)
|
||||||
{
|
{
|
||||||
int v7 = a2 - 1;
|
int v11 = a2 - 1;
|
||||||
if(this->offset_48.begin() == this->offset_48.end())
|
if(this->offset_48.begin() == this->offset_48.end())
|
||||||
{
|
{
|
||||||
for (int i = a2 + 1; i < this->offset_48.size(); i++)
|
for (int i = a2 + 1; i < this->offset_48.size(); i++)
|
||||||
@ -857,14 +857,22 @@ namespace WXML {
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// a3[1].find()
|
if(
|
||||||
// TODO...
|
a3.end() != std::find(a3.begin(), a3.end(), this->offset_72[i]->offset_0)
|
||||||
|
|| this->offset_72[i]->offset_72.begin() != this->offset_72[i]->offset_72.end()
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return hasElIf;
|
||||||
|
}
|
||||||
|
v11 = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
while (v11 >= a2)
|
||||||
|
this->offset_72.erase(this->offset_72.begin() + v11--);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
bool WXMLDom::operator==(std::string tag)
|
bool WXMLDom::operator==(std::string tag)
|
||||||
{
|
{
|
||||||
return this->offset_0.compare(tag) == 0;
|
return this->offset_0.compare(tag) == 0;
|
||||||
@ -891,5 +899,37 @@ namespace WXML {
|
|||||||
v15 << " with message: " << a5 << ".";
|
v15 << " with message: " << a5 << ".";
|
||||||
return v15.str();
|
return v15.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WXMLDom::HasSpAttrPrefix()
|
||||||
|
{
|
||||||
|
for (auto i = this->offset_48.begin(); i != this->offset_48.end(); i++)
|
||||||
|
{
|
||||||
|
auto v3 = i->first.data();
|
||||||
|
if (strncmp(v3, "bind", 4u))
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( strncmp(v3, "catch", 5u) )
|
||||||
|
{
|
||||||
|
if ( strncmp(v3, "capture-bind", 0xCu) )
|
||||||
|
{
|
||||||
|
if ( strncmp(v3, "capture-catch", 0xDu) )
|
||||||
|
{
|
||||||
|
if ( i->first != "slot" )
|
||||||
|
{
|
||||||
|
if ( strncmp(v3, "wx:", 3u) )
|
||||||
|
{
|
||||||
|
if ( strncmp(v3, "mark:", 5u) )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -27125,7 +27125,7 @@ LABEL_12:
|
|||||||
|
|
||||||
// this
|
// this
|
||||||
v31 = lpuexcpt;
|
v31 = lpuexcpt;
|
||||||
// offset_0 + 1 lineCount
|
// offset_0 + 1 fileLength
|
||||||
v32 = *(_DWORD *)lpuexcpt + 1;
|
v32 = *(_DWORD *)lpuexcpt + 1;
|
||||||
// offset_12 + 1 lineLength
|
// offset_12 + 1 lineLength
|
||||||
v33 = *((_DWORD *)lpuexcpt + 3) + 1;
|
v33 = *((_DWORD *)lpuexcpt + 3) + 1;
|
||||||
@ -27139,23 +27139,23 @@ LABEL_12:
|
|||||||
v57 = v59;
|
v57 = v59;
|
||||||
v61 = v63;
|
v61 = v63;
|
||||||
v65 = v67;
|
v65 = v67;
|
||||||
// offset_16
|
// this->offset_16
|
||||||
v35 = *((_DWORD *)v31 + 4);
|
v35 = *((_DWORD *)v31 + 4);
|
||||||
// offset_0
|
// v49.offset_0
|
||||||
v49 = 0;
|
v49 = 0;
|
||||||
// offset_8 = this->offset_16
|
// v49.offset_8 = this->offset_16
|
||||||
v51 = v35;
|
v51 = v35;
|
||||||
// offset_20
|
// this->offset_20
|
||||||
v36 = *((_DWORD *)v31 + 5);
|
v36 = *((_DWORD *)v31 + 5);
|
||||||
// offset_4
|
// v49.offset_4
|
||||||
v50 = 0;
|
v50 = 0;
|
||||||
// token.offset_12 = this->offset_20
|
// token.offset_12 = this->offset_20
|
||||||
v52 = v36;
|
v52 = v36;
|
||||||
// this.offset_4
|
// v37 = this.offset_4
|
||||||
v37 = *((_DWORD *)v31 + 1);
|
v37 = *((_DWORD *)v31 + 1);
|
||||||
// this.offset_4 = this.offset_4 + 1
|
// this.offset_4 = this.offset_0 + 1 = this->fileLength
|
||||||
*((_DWORD *)v31 + 1) = v32;
|
*((_DWORD *)v31 + 1) = v32;
|
||||||
// this.offset_8
|
// 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;
|
||||||
@ -27172,9 +27172,9 @@ LABEL_12:
|
|||||||
v56 = 0;
|
v56 = 0;
|
||||||
v64 = 0;
|
v64 = 0;
|
||||||
v60 = -1;
|
v60 = -1;
|
||||||
// offset_16 = this->offset_4
|
// token.offset_16 = this->offset_4
|
||||||
v53 = v37;
|
v53 = v37;
|
||||||
// offset_20 = - this->offset_4
|
// v49.offset_20 = (this->offset_0 + 1)fileLength - this->offset_4
|
||||||
v54 = v34 - v37;
|
v54 = v34 - v37;
|
||||||
if ( v39 == 3 )
|
if ( v39 == 3 )
|
||||||
v40 = a5;
|
v40 = a5;
|
||||||
@ -52736,10 +52736,12 @@ char __thiscall WXML::DOMLib::WXMLDom::IfHasItsElse(_DWORD *this, signed int a2,
|
|||||||
std::string::_M_dispose(v23);
|
std::string::_M_dispose(v23);
|
||||||
if ( !v18 )
|
if ( !v18 )
|
||||||
break;
|
break;
|
||||||
v12 = a3[1];
|
v12 = a3[1]; // a3.offset_4
|
||||||
if ( v12 != std::find<__gnu_cxx::__normal_iterator<std::string const*,std::vector<std::string>>,std::string>(
|
if ( v12 != std::find<__gnu_cxx::__normal_iterator<std::string const*,std::vector<std::string>>,std::string>(
|
||||||
*a3,
|
*a3, // start
|
||||||
v12,
|
v12, // end
|
||||||
|
// this->offset_(18 * 4) -> this->offset_72
|
||||||
|
// this->offset_72[i]
|
||||||
*(_DWORD *)(this[18] + v10))
|
*(_DWORD *)(this[18] + v10))
|
||||||
|| *(_DWORD *)(*(_DWORD *)(this[18] + v10) + 76) != *(_DWORD *)(*(_DWORD *)(this[18] + v10) + 72) )
|
|| *(_DWORD *)(*(_DWORD *)(this[18] + v10) + 76) != *(_DWORD *)(*(_DWORD *)(this[18] + v10) + 72) )
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user