fix: 修复一些小问题

This commit is contained in:
msojocs 2023-07-10 15:41:35 +08:00
parent 1b995ef08f
commit c1c1e1e797
8 changed files with 89 additions and 33 deletions

43
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,43 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/wcc",
"args": [
"\"--config-path\"",
"\"/mnt/d/Work/disassembly/wcc-exec/wcc/cmd1.txt\""
],
"stopAtEntry": false,
"cwd": "/mnt/d/Work/WeChatProjects/miniprogram-demo/miniprogram",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"sourceFileMap":{
"${workspaceRoot}": {
"editorPath": "${workspaceRoot}",
"useForBreakpoints": true
}
}
}
]
}

View File

@ -547,9 +547,9 @@ namespace WXML
private: private:
/* data */ /* data */
public: public:
int offset_0; int offset_0 = 0;
std::string offset_4; std::string offset_4;
std::string offset_12; std::string offset_16;
Token(/* args */); Token(/* args */);
~Token(); ~Token();
std::string GetLiteral(void); std::string GetLiteral(void);

View File

@ -5,9 +5,6 @@ namespace WXML
{ {
namespace DOMLib namespace DOMLib
{ {
const char *szWXIFControlAttrs[4] = { "wx-if", "wx:if", "wx:elif", "wx:else" }; // weak
Parser::Parser(/* args */) Parser::Parser(/* args */)
{ {
this->offset_104.offset_24 = 4; this->offset_104.offset_24 = 4;

View File

@ -386,11 +386,10 @@ namespace WXML {
if (forItems == cur->offset_48.end() && cur->offset_0 != "block") if (forItems == cur->offset_48.end() && cur->offset_0 != "block")
{ {
const char **v38 = WXML::DOMLib::szWXIFControlAttrs; const char **v38 = WXML::DOMLib::szWXIFControlAttrs;
while (*v38) for (size_t j = 0; j < 4; j++)
{ {
std::string v101 = *v38; std::string v101 = v38[j];
auto v9 = cur->offset_48.find(v101); auto v9 = cur->offset_48.find(v101);
++v38;
if (v9 != cur->offset_48.end()) if (v9 != cur->offset_48.end())
{ {
std::shared_ptr<WXML::DOMLib::WXMLDom> v98(new WXML::DOMLib::WXMLDom()); std::shared_ptr<WXML::DOMLib::WXMLDom> v98(new WXML::DOMLib::WXMLDom());
@ -651,17 +650,14 @@ namespace WXML {
{ {
goto LABEL_56; goto LABEL_56;
} }
while (true) for (size_t i = 0; i < 4; i++)
{ {
if (!*v98) auto v97 = cur->offset_48.find(v98[i]);
break;
auto v97 = cur->offset_48.find(*v98);
if (v97 != cur->offset_48.end()) if (v97 != cur->offset_48.end())
{ {
v153 = *v98; v153 = v98[i];
break; break;
} }
++v98;
} }
if(cur->offset_48[v153].offset_56 == -3) if(cur->offset_48[v153].offset_56 == -3)
{ {

View File

@ -5,6 +5,19 @@ namespace WXML
namespace EXPRLib namespace EXPRLib
{ {
int off_55F220()
{
return 1;
}
int off_55F20C()
{
return 3;
}
int off_55F1E4()
{
return 2;
}
Parser::Parser(/* args */) Parser::Parser(/* args */)
{ {
} }
@ -48,9 +61,11 @@ namespace WXML
// WXML::EXPRLib::Parser::Parse - 15 // WXML::EXPRLib::Parser::Parse - 15
std::shared_ptr<WXML::EXPRLib::Base> v68(new WXML::EXPRLib::Base()); std::shared_ptr<WXML::EXPRLib::Base> v68(new WXML::EXPRLib::Base());
v68->offset_0 = off_55F220;
v68->offset_4 = "$"; v68->offset_4 = "$";
this->offset_0.push_back(v68); this->offset_0.push_back(v68);
std::shared_ptr<WXML::EXPRLib::Base> v70(new WXML::EXPRLib::Base()); std::shared_ptr<WXML::EXPRLib::Base> v70(new WXML::EXPRLib::Base());
v70->offset_0 = off_55F1E4;
if (a7) if (a7)
{ {
v70->offset_4 = WXML::EXPRLib::TransitTable::GetAttrListNTType(); v70->offset_4 = WXML::EXPRLib::TransitTable::GetAttrListNTType();
@ -66,14 +81,13 @@ namespace WXML
{ {
auto v72 = *cur; auto v72 = *cur;
WXML::EXPRLib::Token v84 = v72->offset_8[v49]; // ??? WXML::EXPRLib::Token v84 = v74[v49]; // ???
int v15 = v72->offset_0(); int v15 = v72->offset_0();
// WXML::EXPRLib::Parser::Parse - 20-1 // WXML::EXPRLib::Parser::Parse - 20-1
if (v15 == 1) if (v15 == 1)
{ {
std::string tokenName = v84.GetTokenName(); std::string tokenName = v84.GetTokenName();
if (v72->offset_4 != tokenName || v49 >= 5) if (v72->offset_4 != tokenName || v49 >= v74.size())
{ {
a6 = "error at token `"; a6 = "error at token `";
a6 += v84.GetLiteral(); a6 += v84.GetLiteral();

View File

@ -48,9 +48,9 @@ namespace WXML
if (this->offset_0 != 5) if (this->offset_0 != 5)
{ {
result = ""; result = "";
if (this->offset_12.size()) if (this->offset_16.size())
{ {
return this->offset_12; return this->offset_16;
} }
} }
} }

View File

@ -182,8 +182,9 @@ namespace WXML {
int v21 = 18899; int v21 = 18899;
WXML::EXPRLib::Tokenizer::InitTransitTable(); WXML::EXPRLib::Tokenizer::InitTransitTable();
int v24 = 1; int v24 = 1;
int v29; int v29 = 0;
for (int v28 = 0; v28 < this->offset_0.size();) int v28 = 0;
while (v28 <= this->offset_0.size())
{ {
if (!--v21) if (!--v21)
{ {
@ -199,7 +200,7 @@ namespace WXML {
int t = WXML::EXPRLib::Tokenizer::TT[257 * v24 + v3]; int t = WXML::EXPRLib::Tokenizer::TT[257 * v24 + v3];
if (!t) if (!t)
{ {
t = WXML::EXPRLib::Tokenizer::TT[257 * v24]; t = WXML::EXPRLib::Tokenizer::TT[(0x6689A0 - 0x006685A0) / 4 + 257 * v24];
if (!t) if (!t)
{ {
std::stringstream v39; std::stringstream v39;
@ -214,6 +215,7 @@ namespace WXML {
v39 << "unexpected `" << v3 << "` at pos" << v28; v39 << "unexpected `" << v3 << "` at pos" << v28;
a3 = v39.str(); a3 = v39.str();
} }
v24 = (uint16_t)t;
if ((t & 0x30000) != 0) if ((t & 0x30000) != 0)
{ {
int v8 = 1; int v8 = 1;
@ -229,14 +231,16 @@ namespace WXML {
if (v29 <= v27) if (v29 <= v27)
{ {
WXML::EXPRLib::Token v39; WXML::EXPRLib::Token v39;
char* KEYWORDS[] = {}; v39.offset_0 = v8;
const char* KEYWORDS[4] = { "true", "false", "undefined", "null"};
if (v8) if (v8)
{ {
char **v31 = KEYWORDS; const char **v31 = KEYWORDS;
std::string v26 = this->offset_0.substr(v29, v27 + 1); std::string v26 = this->offset_0.substr(v29, v27 + 1);
while (*v31)
for (int i = 0; i < 4; i++)
{ {
if (!strcmp(v26.data(), *v31++)) if (!strcmp(v26.data(), v31[i]))
{ {
v39.offset_0 = 4; v39.offset_0 = 4;
break; break;
@ -246,13 +250,14 @@ namespace WXML {
} }
else else
{ {
a2.push_back(v39); v39.offset_4 = this->offset_0.substr(v29, v27 + 1 - v29);
} }
a2.push_back(v39);
v29 = v27 + 1; v29 = v27 + 1;
} }
} }
v28 += (t & 0x400000) == 0; v28 += (t & 0x400000) == 0;
if (t &0x800000 != 0) if (((uint)t & 0x800000) != 0)
v29 = v28; v29 = v28;
} }
return 0; return 0;

View File

@ -7682,9 +7682,9 @@ void (__cdecl *off_55F0D4)(__cxxabiv1::__class_type_info *__hidden this) = &__cx
void (__cdecl *off_55F114)(__cxxabiv1::__si_class_type_info *__hidden this) = &__cxxabiv1::__si_class_type_info::~__si_class_type_info; // weak void (__cdecl *off_55F114)(__cxxabiv1::__si_class_type_info *__hidden this) = &__cxxabiv1::__si_class_type_info::~__si_class_type_info; // weak
void (__cdecl *off_55F140)(__cxxabiv1::__vmi_class_type_info *__hidden this) = &__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info; // weak void (__cdecl *off_55F140)(__cxxabiv1::__vmi_class_type_info *__hidden this) = &__cxxabiv1::__vmi_class_type_info::~__vmi_class_type_info; // weak
void (__cdecl *off_55F16C)(_anonymous_namespace_::io_error_category *__hidden this) = &`anonymous namespace'::io_error_category::~io_error_category; // weak void (__cdecl *off_55F16C)(_anonymous_namespace_::io_error_category *__hidden this) = &`anonymous namespace'::io_error_category::~io_error_category; // weak
void (__cdecl *off_55F1E4)(WXML::EXPRLib::NonTerminal *__hidden this) = &WXML::EXPRLib::NonTerminal::~NonTerminal; // weak void (__cdecl *off_55F1E4)(WXML::EXPRLib::NonTerminal *__hidden this) = &WXML::EXPRLib::NonTerminal::~NonTerminal; // weak return 2
void (__cdecl *off_55F20C)(WXML::EXPRLib::Action *__hidden this) = &WXML::EXPRLib::Action::~Action; // weak void (__cdecl *off_55F20C)(WXML::EXPRLib::Action *__hidden this) = &WXML::EXPRLib::Action::~Action; // weak return 3
void (__cdecl *off_55F220)(WXML::EXPRLib::Terminal *__hidden this) = &WXML::EXPRLib::Terminal::~Terminal; // weak void (__cdecl *off_55F220)(WXML::EXPRLib::Terminal *__hidden this) = &WXML::EXPRLib::Terminal::~Terminal; // weak // return 1
int (*off_55F234[2])() = int (*off_55F234[2])() =
{ {
&__gnu_cxx::stdio_filebuf<char>::~stdio_filebuf, &__gnu_cxx::stdio_filebuf<char>::~stdio_filebuf,
@ -29713,6 +29713,7 @@ int __thiscall WXML::EXPRLib::Tokenizer::GetTokens(int *this, _DWORD *a2, unsign
} }
else else
{ {
// v25 -> *this
v10 = (char *)(v29 + v25); v10 = (char *)(v29 + v25);
do do
{ {
@ -29724,7 +29725,7 @@ int __thiscall WXML::EXPRLib::Tokenizer::GetTokens(int *this, _DWORD *a2, unsign
*((_BYTE *)v40 + v27 + 1 - v29) = 0; *((_BYTE *)v40 + v27 + 1 - v29) = 0;
} }
v32 = a2[1]; v32 = a2[1];
if ( v32 == a2[2] ) if ( v32 == a2[2] ) // begin == end
{ {
std::vector<WXML::EXPRLib::Token>::_M_realloc_insert<WXML::EXPRLib::Token const&>( std::vector<WXML::EXPRLib::Token>::_M_realloc_insert<WXML::EXPRLib::Token const&>(
a2, a2,
@ -29750,7 +29751,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 临时存储,其它地方没用到
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 )