fix: 逻辑错误

This commit is contained in:
msojocs 2023-06-18 16:46:49 +08:00
parent b7deccb9bb
commit 448b876120
3 changed files with 175 additions and 179 deletions

View File

@ -299,13 +299,26 @@ namespace WXML
namespace Compiler namespace Compiler
{ {
WXML::DOMLib::Parser ParseSource(
std::string const& content, // 源码a2
std::string const& fileName, // 文件名? a3
char lineEndMark, // '\n' a4
std::string const& gwxMark, // gwxMark a5
std::string const& fMark, // "f_" a6
std::map<std::string,std::string> const&, // fileData a7
std::string&, // 错误信息 a8
std::map<std::string, std::shared_ptr<DOMLib::WXMLDom>>&,// map<string, ?> a9
std::map<std::string,std::string>&,// ??? a10
std::map<std::string,int>&, // ??? a11
bool, // mark指定运算结果是否非0 a12
bool); // mark指定运算结果是否非0 a13
int CompileLazy( int CompileLazy(
std::map<std::string,std::string> const& fileContent, std::map<std::string,std::string> const& fileContent,
std::string& errorMessage, // 错误信息 std::string& errorMessage, // 错误信息
std::map<std::string,std::string>& outputMap, // 输出1 std::map<std::string,std::string>& outputContentMap, // 输出1 编译后的代码映射
std::map<std::string,std::string>& dict, // 输出2 std::map<std::string,std::string>& outputFuncMap, // 输出2 编译后的函数名
std::map<std::string, std::vector<std::string>>, std::map<std::string, std::vector<std::string>>&,
std::map<std::string, std::vector<std::string>>, // vecFileContentMap std::map<std::string, std::vector<std::string>>& componentListMap, // vecFileContentMap componentList 页面使用的组件列表
std::vector<std::string> const&, // splitedData std::vector<std::string> const&, // splitedData
std::map<std::string,std::string> const&, // mapData1 std::map<std::string,std::string> const&, // mapData1
bool, // isLLA bool, // isLLA
@ -360,20 +373,6 @@ namespace WXML
// void GetFuncId(); // void GetFuncId();
void GetVersionInfo(std::string &a1, std::string a2); void GetVersionInfo(std::string &a1, std::string a2);
WXML::DOMLib::Parser ParseSource(
std::string const& content, // 源码a2
std::string const& fileName, // 文件名? a3
char lineEndMark, // '\n' a4
std::string const& gwxMark, // gwxMark a5
std::string const& fMark, // "f_" a6
std::map<std::string,std::string> const&, // fileData a7
std::string&, // 错误信息 a8
std::map<std::string, WXML::DOMLib::WXMLDom &>,// map<string, ?> a9
std::map<std::string,std::string>&,// ??? a10
std::map<std::string,int>, // ??? a11
bool, // mark指定运算结果是否非0 a12
bool); // mark指定运算结果是否非0 a13
int RenderDefine( int RenderDefine(
WXML::DOMLib::WXMLDom &, WXML::DOMLib::WXMLDom &,
std::string const&, std::string const&,

View File

@ -69,7 +69,7 @@ int main(int argc, const char **argv)
vector<string> splitedData; vector<string> splitedData;
map<string, string> mapData1; map<string, string> mapData1;
map<string, string> fileContentMap; map<string, string> fileContentMap;
map<string, vector<string>> vecFileContentMap; map<string, vector<string>> componentListMap;
for (int i = 0; i < paramList.size(); i++) for (int i = 0; i < paramList.size(); i++)
{ {
string param = paramList[i]; string param = paramList[i];
@ -300,37 +300,33 @@ int main(int argc, const char **argv)
if (!xc_Or_completeCode_Param.empty()) if (!xc_Or_completeCode_Param.empty())
{ {
string data; string data;
string arg2; vector<string> allComponentList;
vector<string> list1;
vector<string> list2;
data = getNextArg(xc_Or_completeCode_Param, splitMarkStr); data = getNextArg(xc_Or_completeCode_Param, splitMarkStr);
unsigned long long count = strtoull(&data[0], 0, 10); unsigned long long count = strtoull(&data[0], 0, 10);
for (unsigned long long i = 0; i < count; i++) for (unsigned long long i = 0; i < count; i++)
{ {
vector<string> componentList;
string arg1 = getNextArg(xc_Or_completeCode_Param, splitMarkStr); string arg1 = getNextArg(xc_Or_completeCode_Param, splitMarkStr);
data = getNextArg(xc_Or_completeCode_Param, splitMarkStr); data = getNextArg(xc_Or_completeCode_Param, splitMarkStr);
unsigned long long jCount = strtoull(&data[0], 0, 10); unsigned long long jCount = strtoull(&data[0], 0, 10);
for (unsigned long long i = 0; i < jCount; i++) for (unsigned long long i = 0; i < jCount; i++)
{ {
arg2 = getNextArg(xc_Or_completeCode_Param, splitMarkStr); string componentName = getNextArg(xc_Or_completeCode_Param, splitMarkStr);
list1.push_back(arg2); componentList.push_back(componentName);
auto it = vecFileContentMap.find(arg2); // TODO: 确认逻辑是否正确
if (it == vecFileContentMap.end()) auto it = std::find(allComponentList.begin(), allComponentList.end(), componentName);
if (it == allComponentList.end())
{ {
list2.push_back(arg2); allComponentList.push_back(componentName);
} }
} }
// TODO: 还有问题 auto it = componentListMap.lower_bound(arg1);
auto it = vecFileContentMap.lower_bound(arg1); if (it == componentListMap.end() || arg1 < it->first)
if (it == vecFileContentMap.end() || arg1 < it->first)
{ {
vector<string> d; componentListMap.emplace(arg1, componentList);
vecFileContentMap.emplace(arg1, d);
} }
// list1
it->second = list1;
} }
vecFileContentMap["ALL"] = list2; componentListMap["ALL"] = allComponentList;
} }
// //
@ -359,7 +355,7 @@ int main(int argc, const char **argv)
outputMap1, outputMap1,
outputMap2, // map<string, string> outputMap2, // map<string, string>
vecFileContentMap2, // std::map<std::string,std::vector<std::string>> vecFileContentMap2, // std::map<std::string,std::vector<std::string>>
vecFileContentMap, // vecFileContentMap componentListMap, // componentListMap
splitedData, splitedData,
mapData1, mapData1,
isLLA, isLLA,

View File

@ -8,159 +8,23 @@ namespace WXML{
namespace Compiler namespace Compiler
{ {
int CompileLazy(
std::map<std::string,std::string> const& fileContentMap,
std::string& errorMessage, // 错误信息
std::map<std::string,std::string>& outputMap, // 输出
std::map<std::string,std::string>& dict, // 输出
std::map<std::string, std::vector<std::string>>,
std::map<std::string, std::vector<std::string>>, // vecFileContentMap
std::vector<std::string> const& splitedData, // splitedData
std::map<std::string,std::string> const& mapData1, // mapData1
bool isLLA, // isLLA
std::string const& gwxMark, // gwxMark
uint mark, // mark
char lineEndMark, // '\n'
std::string const& , // 'e'
std::string const& , // const char off_5403C3[] = {'s','\0','e','\0'}
std::string const& ggMark, // "gg"
std::string const& eMark, // "e_"
std::string const& dMark, // "d_"
std::string const& pMark, // "p_"
std::string const& strEndMark, // '\0'
std::string const& boxMark, // "boxofchocolate"
std::string const& gdwxMark, // "$gdwx"
std::string const& fMark // "f_"
)
{
try
{
/* code */
std::map<std::string, std::shared_ptr<std::stringstream>> ssDataMap;
std::map<std::string,std::vector<std::string>> v307_localVecStrMap1;
for (auto it = fileContentMap.begin(); it != fileContentMap.end(); it++)
{
/* code */
// WXML::DOMLib::Parser parseResult = ParseSource(
// it->second, // 源码a2
// it->first, // 文件名 a3
// lineEndMark, // '\n' a4
// gwxMark, // gwxMark a5
// fMark, // "f_" a6
// fileContentMap, // fileContentMap a7
// errorMessage, // 错误信息 a8
// &v304, // map<string, WXML::DOMLib::WXMLDom> a9
// &v309, // ??? a10
// &v311, // ??? a11
// (mark & 4) != 0, // a11 -> mark a12
// (mark & 0x20) != 0); // a13
// if (parseResult) {
// return parseResult;
// }
}
std::shared_ptr<std::stringstream> v301_localCommonStream1; // v301
ssDataMap["__COMMON__"] = v301_localCommonStream1;
std::vector<std::string> commonVec;
v307_localVecStrMap1["__COMMON__"] = commonVec;
for (int i = 0; i < splitedData.size(); i++)
{
std::shared_ptr<std::stringstream> v328_ss;
auto it = ssDataMap.lower_bound(splitedData[i]);
if (it == ssDataMap.end())
{
}
std::string path = "./" + splitedData[i] + ".wxml";
std::vector<std::string> j;
j.push_back(path);
v307_localVecStrMap1[splitedData[i]] = j;
}
// for (auto it = splitedData.begin(); it != splitedData.end(); it++)
// {
// }
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
}
return 0;
}
int DealWxsTag(
std::string const& a1,
std::string &a2,
std::string& a3,
std::string& a4,
std::string& a5,
int & a6,
std::string& a7)
{
int pos = a2.find('>', a2[4]);
std::string sub;
if (a2[pos - 1] == '/')
{
// 这个尖括号附近是这样的:/>
sub = a2.substr(a2[4] + 1, pos + 1 - a2[4] - 6);
}
else
{
sub = a2.substr(a2[4] + 1, pos + 1 - a2[4] - 5);
}
std::string data = "<fak";
data = data.append(sub);
data = data.append("/>");
for (int i = 1; i < a2[2]; i++)
{
data = "\n" + data;
}
for (int i = 1; i < a2[3]; i++)
{
data = " " + data;
}
// WXML::DOMLib::Parser::Parser(data);
// TODO...
return 0;
}
void GetVersionInfo(std::string &a1, std::string a2)
{
std::stringstream result;
result << "/*";
result << "v0.5vv_20200413_syb_scopedata";
result << "*/";
result << a2;
result << ".__wcc_version__='";
result << "v0.5vv_20200413_syb_scopedata";
result << "';";
result << a2;
result << ".__wcc_version_info__={\"customComponents\":true,\"fixZeroRpx\":true,\"propValueDeepCopy\":false};";
result.str(a1);
}
WXML::DOMLib::Parser ParseSource( WXML::DOMLib::Parser ParseSource(
std::string const& fileName, // 文件名a2 std::string const& fileName, // 文件名a2
std::string const& content, // 源码a3 std::string const& content, // 源码a3
char lineEndMark, // '\n' a4 char lineEndMark, // '\n' a4
std::string const& gwxMark, // gwxMark a5 std::string const& gwxMark, // gwxMark a5
std::string const& fMark, // "f_" a6 std::string const& fMark, // "f_" a6
std::map<std::string,std::string> const&, // fileContentMap a7 std::map<std::string,std::string> const& fileContentMap, // fileContentMap a7
std::string& errorMessage, // 错误信息 a8 std::string& errorMessage, // 错误信息 a8
std::map<std::string, WXML::DOMLib::WXMLDom> result,// map<string, ?> a9 std::map<std::string, std::shared_ptr<WXML::DOMLib::WXMLDom>>& result,// map<string, ?> a9
std::map<std::string,std::string>& map1,// ??? a10 std::map<std::string,std::string>& map1,// ??? a10
std::map<std::string,int> map2, // ??? a11 std::map<std::string,int>& map2, // ??? a11
bool b1, // mark指定运算结果是否非0 a12 bool b1, // mark指定运算结果是否非0 a12
bool b2) // mark指定运算结果是否非0 a13 bool b2) // mark指定运算结果是否非0 a13
{ {
WXML::DOMLib::Parser pResult; WXML::DOMLib::Parser pResult;
bool isWxml = fileName.substr(fileName.length() - 5) == ".wxml"; bool isWxml = fileName.substr(fileName.length() - 5) == ".wxml";
if (isWxml) if (isWxml)
{ {
// parse // parse
bool parseResult = false; bool parseResult = false;
@ -171,7 +35,7 @@ namespace WXML{
if (parseResult) if (parseResult)
{ {
// GetParsed // GetParsed
// WXML::DOMLib::WXMLDom parseDom = v50.GetParsed(); WXML::DOMLib::WXMLDom parseDom = v50.GetParsed();
// result[fileName] = parseDom; // result[fileName] = parseDom;
int a; int a;
int b; int b;
@ -311,6 +175,143 @@ namespace WXML{
} }
return pResult; return pResult;
} }
int CompileLazy(
std::map<std::string,std::string> const& fileContentMap, // a2
std::string& errorMessage, // 错误信息 a3
std::map<std::string,std::string>& outputContentMap, // 输出 a4
std::map<std::string,std::string>& outputFuncMap, // 输出 a5
std::map<std::string, std::vector<std::string>>& dependencyListMap, // a6
std::map<std::string, std::vector<std::string>>& componentListMap, // componentListMap a7
std::vector<std::string> const& splitedData, // splitedData a8
std::map<std::string,std::string> const& mapData1, // mapData1 a9
bool isLLA, // isLLA a10
std::string const& gwxMark, // gwxMark a11
uint mark, // mark
char lineEndMark, // '\n'
std::string const& eMark1, // 'e'
std::string const& charArr, // const char off_5403C3[] = {'s','\0','e','\0'}
std::string const& ggMark, // "gg"
std::string const& eMark, // "e_"
std::string const& dMark, // "d_"
std::string const& pMark, // "p_"
std::string const& strEndMark, // '\0'
std::string const& boxMark, // "boxofchocolate"
std::string const& gdwxMark, // "$gdwx"
std::string const& fMark // "f_"
)
{
try
{
/* code */
std::map<std::string, std::shared_ptr<std::stringstream>> ssDataMap;
std::map<std::string, std::vector<std::string>> v307_localVecStrMap1;
std::map<std::string, std::shared_ptr<DOMLib::WXMLDom>> v304;
std::map<std::string, std::string> v309;
std::map<std::string, int> v311;
for (auto it = fileContentMap.begin(); it != fileContentMap.end(); it++)
{
/* code */
WXML::DOMLib::Parser parseResult = WXML::Compiler::ParseSource(
it->second, // 源码a2
it->first, // 文件名 a3
lineEndMark, // '\n' a4
gwxMark, // gwxMark a5
fMark, // "f_" a6
fileContentMap, // fileContentMap a7
errorMessage, // 错误信息 a8
v304, // map<string, WXML::DOMLib::WXMLDom> a9
v309, // ??? a10
v311, // ??? a11
(mark & 4) != 0, // a11 -> mark a12
(mark & 0x20) != 0); // a13
}
std::shared_ptr<std::stringstream> v301_localCommonStream1; // v301
ssDataMap["__COMMON__"] = v301_localCommonStream1;
std::vector<std::string> commonVec;
v307_localVecStrMap1["__COMMON__"] = commonVec;
for (int i = 0; i < splitedData.size(); i++)
{
std::shared_ptr<std::stringstream> v328_ss;
auto it = ssDataMap.lower_bound(splitedData[i]);
if (it == ssDataMap.end())
{
}
std::string path = "./" + splitedData[i] + ".wxml";
std::vector<std::string> j;
j.push_back(path);
v307_localVecStrMap1[splitedData[i]] = j;
}
// for (auto it = splitedData.begin(); it != splitedData.end(); it++)
// {
// }
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
}
return 0;
}
int DealWxsTag(
std::string const& a1,
std::string &a2,
std::string& a3,
std::string& a4,
std::string& a5,
int & a6,
std::string& a7)
{
int pos = a2.find('>', a2[4]);
std::string sub;
if (a2[pos - 1] == '/')
{
// 这个尖括号附近是这样的:/>
sub = a2.substr(a2[4] + 1, pos + 1 - a2[4] - 6);
}
else
{
sub = a2.substr(a2[4] + 1, pos + 1 - a2[4] - 5);
}
std::string data = "<fak";
data = data.append(sub);
data = data.append("/>");
for (int i = 1; i < a2[2]; i++)
{
data = "\n" + data;
}
for (int i = 1; i < a2[3]; i++)
{
data = " " + data;
}
// WXML::DOMLib::Parser::Parser(data);
// TODO...
return 0;
}
void GetVersionInfo(std::string &a1, std::string a2)
{
std::stringstream result;
result << "/*";
result << "v0.5vv_20200413_syb_scopedata";
result << "*/";
result << a2;
result << ".__wcc_version__='";
result << "v0.5vv_20200413_syb_scopedata";
result << "';";
result << a2;
result << ".__wcc_version_info__={\"customComponents\":true,\"fixZeroRpx\":true,\"propValueDeepCopy\":false};";
result.str(a1);
}
int RenderDefine( int RenderDefine(
WXML::DOMLib::WXMLDom & a1, WXML::DOMLib::WXMLDom & a1,
std::string const& a2, std::string const& a2,