feat: compile

This commit is contained in:
msojocs 2023-08-29 22:18:05 +08:00
parent 521c91e485
commit 86336dc14d
10 changed files with 1000 additions and 105 deletions

View File

@ -57,10 +57,10 @@
"variant": "cpp"
},
"cmake.debugConfig": {
"cwd": "/mnt/d/Work/WeChatProjects/miniprogram-demo/miniprogram",
"cwd": "/mnt/d/Work/WeChatProjects/miniprogram-1",
"args": [
"\"--config-path\"",
"\"/mnt/d/Work/disassembly/wcc-exec/wcsc/config/ll2.txt\""
"\"/mnt/d/Work/WeChatProjects/miniprogram-1/wcc/99a9bac3c05fc25dd070298212c4a7d3\""
]
},
"cmake.configureSettings": {

View File

@ -486,14 +486,13 @@ namespace WXML
int Compile(
std::map<std::string,std::string> const&,// a1
std::string&, // a2
std::string&, // a3
std::string&, // a3 result
std::map<std::string, std::vector<std::string>>,// a4
std::map<std::string,std::string> const&,// a5
bool,// a6
std::string const& gwxMark,// a7
uint mark, // a8
char lineEndMark, // a9
std::string const&, // a10
std::string const&, // a11
std::string const& , // a12
std::string const& ggMark, // a13

View File

@ -297,7 +297,32 @@ namespace night
}
night::ns_node *NSASTParse::ast_for()
{
throw "not implement";
this->offset_28->next();
auto v7 = this->offset_24->gen_son(night::NS_TYPE_FOR);
v7->offset_216 = nullptr;
v7->offset_228 = nullptr;
v7->offset_228 = this->make_list_by_parser("(", ")", ";", "ast_expression", false, 2, "");
auto v5 = v7->offset_228;
if (!v5)
{
this->offset_28->err("Expected `for(xxx;xxx;xxx)`", 0, 0, 0);
}
if (v5->size() == 2)
{
auto t = this->offset_24->gen_son(night::NS_TYPE_SKIP);
v5->emplace_back(t);
}
if (v5->size() != 3)
{
this->offset_28->err("Expected `for(xxx;xxx;xxx)`", 0, 0, 0);
}
this->offset_36++;
this->offset_40++;
v7->offset_216 = this->ast_expression();
this->offset_36--;
this->offset_40--;
return v7;
}
night::ns_node *NSASTParse::ast_while()
{

View File

@ -64,9 +64,7 @@ int main(int argc, const char **argv)
int mark = 0;
bool isReadFromStdin = false;
bool version = false;
bool hasXCParam = false;
bool hasCompleteCodeParam = false;
bool isLLA = false;
bool v53 = false;
bool hasLL = false;
string xc_Or_completeCode_Param;
string outputFileName;
@ -132,7 +130,7 @@ int main(int argc, const char **argv)
/* code */
if (param[2] == 'c' && i + 1 < paramList.size())
{
hasXCParam = true;
v53 = true;
if (paramList[i + 1][0] != '-')
{
xc_Or_completeCode_Param.assign(paramList[i + 1]);
@ -146,7 +144,7 @@ int main(int argc, const char **argv)
/* code */
if (param[2] == 'c' && i + 1 < paramList.size())
{
hasCompleteCodeParam = true;
v53 = false;
if (paramList[i + 1][0] != '-')
{
xc_Or_completeCode_Param.assign(paramList[i + 1]);
@ -244,7 +242,7 @@ int main(int argc, const char **argv)
printf("Error: expected -llw or -lla, but got %s\n", param.c_str());
return -1;
}
isLLA = true;
v53 = true;
}
string splitMark;
if (!splitMarkStr.compare(" "))
@ -368,7 +366,7 @@ int main(int argc, const char **argv)
componentListMap, // componentListMap
splitedData,
mapData1,
isLLA,
v53,
gwxMark,
mark,
10,
@ -458,28 +456,32 @@ int main(int argc, const char **argv)
{
std::string errorMessage;
const char off_5403C3[] = {'s', '\0', 'e', '\0'};
std::string v111;
std::string v113;
std::map<std::string, std::vector<std::string>> v126;
int compilerResult = 0;
// compilerResult = WXML::Compiler::Compile(
// v3,
// &v107,
// errorMessage
// (unsigned __int8 **)v113,
// v126,
// &v105,
// v53,
// (int *)gwxMark,
// mark,
// '\n',
// off_5403C3[2], // off_5403C3[2]
// off_5403C3, // off_5403C3
// "gg", // "gg"
// "e_", // "e_"
// "d_", // "d_"
// "p_", // "p_"
// '\0', // '\0'
// "boxofchocolate", // "boxofchocolate"
// "$gdwx", // "$gdwx"
// "f_"); // "f_"
std::map<std::string,std::string> v105;
compilerResult = WXML::Compiler::Compile(
fileContentMap, // a2
v111, // a3
v113, // a4
v126, // a5
v105, // a6
v53, // a7
gwxMark, // a8
mark, // a9
'\n', //
"e", // off_5403C3[2]
"s", // off_5403C3
"gg", // "gg" a13
"e_", // "e_"
"d_", // "d_"
"p_", // "p_"
"", // '\0'
"boxofchocolate", // "boxofchocolate"
"$gdwx", // "$gdwx"
"f_"); // "f_"
FILE *f;
if (compilerResult)
{
@ -493,7 +495,7 @@ int main(int argc, const char **argv)
{
f = fopen(outputFileName.data(), "w");
}
fprintf(f, "%s\n", "result...");
fprintf(f, "%s\n", v113.data());
fclose(f);
}
}

View File

@ -37,7 +37,7 @@ namespace WXML{
std::vector<WXML::DOMLib::Token> tokenList; // v102
parseResult = v50.Parse(content.c_str(), errorMessage, filePath, tokenList);
if (parseResult)
if (!parseResult)
{
// ParseSource - 5
// GetParsed
@ -788,18 +788,859 @@ namespace WXML{
}
int Compile(
std::map<std::string,std::string> const&,// a1
std::string&, // a2
std::string&, // a3
std::map<std::string, std::vector<std::string>>,// a4
std::map<std::string,std::string> const&,// a5
bool,// a6
std::string const& gwxMark,// a7
uint mark, // a8
char lineEndMark, // a9
std::string const&, // a10
std::string const&, // a11
std::string const& , // a12
std::map<std::string,std::string> const& a2,// a2
std::string& a3, // a3
std::string& a4, // a4
std::map<std::string, std::vector<std::string>> a5,// a5
std::map<std::string, std::string> const& a6,// a6
bool a7,// a7
std::string const& gwxMark,// a8
uint mark, // a9
char lineEndMark, // a10
std::string const& eMark1, // a11
std::string const& sMark, // a12
std::string const& ggMark, // a13
std::string const& eMark2, // a14
std::string const& dMark, // a15
std::string const& pMark, // a16
std::string const& endMark, // a17
std::string const& boxMark, // a18
std::string const& gdwxMark, // a19
std::string const& fMark) // a20
{
std::stringstream v317;
std::shared_ptr<WXML::DOMLib::StrCache> lb(new WXML::DOMLib::StrCache());
std::map<std::string,std::shared_ptr<WXML::DOMLib::WXMLDom>> v286;
std::map<std::string,std::string> v290;
std::map<std::string, int> v292;
for (auto i = a2.begin(); i != a2.end(); i++)
{
auto key = i->first;
std::string suffix = key.substr(key.length() - 5);
if (suffix == ".wxml")
{
WXML::DOMLib::Parser v228;
std::vector<WXML::DOMLib::Token> v283;
int v266 = v228.Parse(i->second.data(), a3, key, v283);
if (v266)
{
return v266;
}
auto v323 = v228.GetParsed();
v286[key] = v323;
std::stringstream v320;
if (v283.begin() != v283.end())
{
v320 << "f_['";
v320 << WXML::Rewrite::ToStringCode(key);
v320 << "']={};" << lineEndMark;
}
for (int j = 0; j < v283.size(); j++)
{
auto cur = v283[j];
std::string v299, v304, v301, v306;
int v280;
int v246 = WXML::Compiler::DealWxsTag(key, cur, v299, v301, v304, &v280, a3);
if (v246)
{
return v246;
}
v320 << fMark << "['";
v320 << WXML::Rewrite::ToStringCode(key) << "']['";
v320 << WXML::Rewrite::ToStringCode(v299) << "'] =";
if (v301.length())
{
MMBizWxaAppComm::PathCombine(key, v301, v306);
if (v306[0] == '/')
{
v306 = '.' + v306;
}
if (a2.find(v306) == a2.end())
{
if ((mark & 0x20) != 0 || gwxMark == "$gwx")
{
std::stringstream v323;
v323 << key << ":" << v280 << ":" << cur.offset_12;
v323 << ":" << v301 << " not found from " << key;
a3 = v323.str();
return 1;
}
}
v320 << "f_['";
v320 << WXML::Rewrite::ToStringCode(v306);
v320 << "'] || ";
v320 << "nv_require(\"";
v320 << WXML::Rewrite::ToStringCode("p_" + v306);
v320 << "\");" << lineEndMark;
v320 << fMark;
v320 << "['" << WXML::Rewrite::ToStringCode(key) << "']['";
v320 << WXML::Rewrite::ToStringCode(v299) << "']();" << lineEndMark;
}
else
{
std::string v314 = "m_" + key;
v314.append(":");
v314.append(v299);
WXML::Compiler::GetFuncId(v292, v314);
std::string v309, v297;
int v246 = night::compile_ns(key, v309, v304, v280, v297, false);
if(v246)
{
return v246;
}
v320 << "nv_require(\"";
v320 << WXML::Rewrite::ToStringCode(v314);
v320 << "\");" << lineEndMark;
v320 << v297 << lineEndMark;
}
// next
}
std::string v314 = v320.str();
if (v314.length())
{
v290[key].assign(v314);
}
}
else
{
std::string v316 = key.substr(key.length() - 4);
if (v316 == ".wxs")
{
std::string v311;
std::string v327 = "p_" + key;
std::string v314 = WXML::Compiler::GetFuncId(v292, v327);
int v266 = night::compile_ns(key, v314, i->second, 1, v311, false);
if (v266)
{
return v266;
}
std::stringstream v327_s;
v327_s << "f_['";
v327_s << WXML::Rewrite::ToStringCode(key) << "'] = nv_require(\"";
v327_s << WXML::Rewrite::ToStringCode("p_" + key) << "\");" << lineEndMark;
v327_s << v311 << lineEndMark;
std::string v323 = v327_s.str();
v290[key] = v323;
}
}
}
std::string v323;
// Compile - 5
if (a7)
{
v323 = "global";
}
else
{
v323 = "window";
}
std::string v327;
WXML::Compiler::GetVersionInfo(v327, v323);
v317 << v327 << std::endl;
WXML::NameAllocator v323_na(endMark, boxMark);
v317 << "var $gwxc" << lineEndMark;
v317 << "var $gaic={}" << lineEndMark;
v317 << gwxMark << "=function(path,global){" << lineEndMark;
v317 << "if(typeof global === 'undefined') global={};";
v317 << "if(typeof __WXML_GLOBAL__ === 'undefined') {";
v317 << "__WXML_GLOBAL__={};" << lineEndMark;
if ((mark & 0x80) != 0)
{
auto lccc = a6.find("life_cycle_callback_content");
if (lccc != a6.end())
{
v317 << lccc->second;
}
}
v317 << "}";
v317 << "__WXML_GLOBAL__.modules = __WXML_GLOBAL__.modules || {};" << lineEndMark;
if (gwxMark != "$gwx" && (mark & 0x60) == 0)
{
v317 << "$gwx('init', global);" << lineEndMark;
}
// Compile - 15
v317 << "function _(a,b){if(typeof(b)!='undefined')a.children.push(b);}" << lineEndMark;
v317 << "function _v(k){if(typeof(k)!='undefined')return {tag:'virtual','wxKey':k,children:[]};return {tag:'virtual',children:[]};}" << lineEndMark;
v317 << "function _n(tag){$gwxc++;if($gwxc>=16000){throw 'Dom limit exceeded, please check if there\\'s any mistake you"
"\\'ve made.'};return {tag:'wx-'+tag,attr:{},children:[],n:[],raw:{},generics:{}}}" << lineEndMark;
v317 << "function _p(a,b){b&&a.properities.push(b);}" << lineEndMark;
v317 << "function _s(scope,env,key){return typeof(scope[key])!='undefined'?scope[key]:env[key]}" << lineEndMark;
v317 << "function _wp(m){console.warn(\"WXMLRT_" << gwxMark << ":\"+m)}" << lineEndMark;
v317 << "function _wl(tname,prefix){_wp(prefix+':-1:-1:-1: Template `' + tname + '` is being called recursively, will be stop.')}" << lineEndMark;
v317 << aGwnConsoleWarn << lineEndMark;
v317 << "function wfor( to_iter, func, env, _s, global, father, itemname, indexname, keyname )\n"
"{\n"
"var _n = wh.hn( to_iter ) === 'n'; \n"
"var scope = wh.rv( _s ); \n"
"var has_old_item = scope.hasOwnProperty(itemname);\n"
"var has_old_index = scope.hasOwnProperty(indexname);\n"
"var old_item = scope[itemname];\n"
"var old_index = scope[indexname];\n"
"var full = Object.prototype.toString.call(wh.rv(to_iter));\n"
"var type = full[8]; \n"
"if( type === 'N' && full[10] === 'l' ) type = 'X'; \n"
"var _y;\n"
"if( _n )\n"
"{\n"
"if( type === 'A' ) \n"
"{\n"
"var r_iter_item;\n"
"for( var i = 0 ; i < to_iter.length ; i++ )\n"
"{\n"
"scope[itemname] = to_iter[i];\n"
"scope[indexname] = _n ? i : wh.nh(i, 'h');\n"
"r_iter_item = wh.rv(to_iter[i]);\n"
"var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin"
"ed;\n"
"_y = _v(key);\n"
"_(father,_y);\n"
"func( env, scope, _y, global );\n"
"}\n"
"}\n"
"else if( type === 'O' ) \n"
"{\n"
"var i = 0;\n"
"var r_iter_item;\n"
"for( var k in to_iter )\n"
"{\n"
"scope[itemname] = to_iter[k];\n"
"scope[indexname] = _n ? k : wh.nh(k, 'h');\n"
"r_iter_item = wh.rv(to_iter[k]);\n"
"var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin"
"ed;\n"
"_y = _v(key);\n"
"_(father,_y);\n"
"func( env,scope,_y,global );\n"
"i++;\n"
"}\n"
"}\n"
"else if( type === 'S' ) \n"
"{\n"
"for( var i = 0 ; i < to_iter.length ; i++ )\n"
"{\n"
"scope[itemname] = to_iter[i];\n"
"scope[indexname] = _n ? i : wh.nh(i, 'h');\n"
"_y = _v( to_iter[i] + i );\n"
"_(father,_y);\n"
"func( env,scope,_y,global );\n"
"}\n"
"}\n"
"else if( type === 'N' ) \n"
"{\n"
"for( var i = 0 ; i < to_iter ; i++ )\n"
"{\n"
"scope[itemname] = i;\n"
"scope[indexname] = _n ? i : wh.nh(i, 'h');\n"
"_y = _v( i );\n"
"_(father,_y);\n"
"func(env,scope,_y,global);\n"
"}\n"
"}\n"
"else\n"
"{\n"
"}\n"
"}\n"
"else\n"
"{\n"
"var r_to_iter = wh.rv(to_iter);\n"
"var r_iter_item, iter_item;\n"
"if( type === 'A' ) \n"
"{\n"
"for( var i = 0 ; i < r_to_iter.length ; i++ )\n"
"{\n"
"iter_item = r_to_iter[i];\n"
"iter_item = wh.hn(iter_item)==='n' ? wh.nh(iter_item,'h') : iter_item;\n"
"r_iter_item = wh.rv( iter_item );\n"
"scope[itemname] = iter_item\n"
"scope[indexname] = _n ? i : wh.nh(i, 'h');\n"
"var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin"
"ed;\n"
"_y = _v(key);\n"
"_(father,_y);\n"
"func( env, scope, _y, global );\n"
"}\n"
"}\n"
"else if( type === 'O' ) \n"
"{\n"
"var i=0;\n"
"for( var k in r_to_iter )\n"
"{\n"
"iter_item = r_to_iter[k];\n"
"iter_item = wh.hn(iter_item)==='n'? wh.nh(iter_item,'h') : iter_item;\n"
"r_iter_item = wh.rv( iter_item );\n"
"scope[itemname] = iter_item;\n"
"scope[indexname] = _n ? k : wh.nh(k, 'h');\n"
"var key = keyname && r_iter_item ? (keyname===\"*this\" ? r_iter_item : wh.rv(r_iter_item[keyname])) : undefin"
"ed;\n"
"_y=_v(key);\n"
"_(father,_y);\n"
"func( env, scope, _y, global );\n"
"i++\n"
"}\n"
"}\n"
"else if( type === 'S' ) \n"
"{\n"
"for( var i = 0 ; i < r_to_iter.length ; i++ )\n"
"{\n"
"iter_item = wh.nh(r_to_iter[i],'h');\n"
"scope[itemname] = iter_item;\n"
"scope[indexname] = _n ? i : wh.nh(i, 'h');\n"
"_y = _v( to_iter[i] + i );\n"
"_(father,_y);\n"
"func( env, scope, _y, global );\n"
"}\n"
"}\n"
"else if( type === 'N' ) \n"
"{\n"
"for( var i = 0 ; i < r_to_iter ; i++ )\n"
"{\n"
"iter_item = wh.nh(i,'h');\n"
"scope[itemname] = iter_item;\n"
"scope[indexname]= _n ? i : wh.nh(i,'h');\n"
"_y = _v( i );\n"
"_(father,_y);\n"
"func(env,scope,_y,global);\n"
"}\n"
"}\n"
"else\n"
"{\n"
"}\n"
"}\n"
"if(has_old_item)\n"
"{\n"
"scope[itemname]=old_item;\n"
"}\n"
"else\n"
"{\n"
"delete scope[itemname];\n"
"}\n"
"if(has_old_index)\n"
"{\n"
"scope[indexname]=old_index;\n"
"}\n"
"else\n"
"{\n"
"delete scope[indexname];\n"
"}\n"
"}\n" << lineEndMark;
// Compile - 20
v317 << "function _ca(o)\n"
"{ \n"
"if ( wh.hn(o) == 'h' ) return true;\n"
"if ( typeof o !== \"object\" ) return false;\n"
"for(var i in o){ \n"
"if ( o.hasOwnProperty(i) ){\n"
"if (_ca(o[i])) return true;\n"
"}\n"
"}\n"
"return false;\n"
"}\n"
"function _da( node, attrname, opindex, raw, o )\n"
"{\n"
"var isaffected = false;\n"
"var value = $gdc( raw, \"\", 2 );\n"
"if ( o.ap && value && value.constructor===Function ) \n"
"{\n"
"attrname = \"$wxs:\" + attrname; \n"
"node.attr[\"$gdc\"] = $gdc;\n"
"}\n"
"if ( o.is_affected || _ca(raw) ) \n"
"{\n"
"node.n.push( attrname );\n"
"node.raw[attrname] = raw;\n"
"}\n"
"node.attr[attrname] = value;\n"
"}\n"
"function _r( node, attrname, opindex, env, scope, global ) \n"
"{\n"
"global.opindex=opindex;\n"
"var o = {}, _env;\n"
"var a = grb( z[opindex], env, scope, global, o );\n"
"_da( node, attrname, opindex, a, o );\n"
"}\n"
"function _rz( z, node, attrname, opindex, env, scope, global ) \n"
"{\n"
"global.opindex=opindex;\n"
"var o = {}, _env;\n"
"var a = grb( z[opindex], env, scope, global, o );\n"
"_da( node, attrname, opindex, a, o );\n"
"}\n"
"function _o( opindex, env, scope, global )\n"
"{\n"
"global.opindex=opindex;\n"
"var nothing = {};\n"
"var r = grb( z[opindex], env, scope, global, nothing );\n"
"return (r&&r.constructor===Function) ? undefined : r;\n"
"}\n"
"function _oz( z, opindex, env, scope, global )\n"
"{\n"
"global.opindex=opindex;\n"
"var nothing = {};\n"
"var r = grb( z[opindex], env, scope, global, nothing );\n"
"return (r&&r.constructor===Function) ? undefined : r;\n"
"}\n"
"function _1( opindex, env, scope, global, o )\n"
"{\n"
"var o = o || {};\n"
"global.opindex=opindex;\n"
"return gra( z[opindex], env, scope, global, o );\n"
"}\n"
"function _1z( z, opindex, env, scope, global, o )\n"
"{\n"
"var o = o || {};\n"
"global.opindex=opindex;\n"
"return gra( z[opindex], env, scope, global, o );\n"
"}\n"
"function _2( opindex, func, env, scope, global, father, itemname, indexname, keyname )\n"
"{\n"
"var o = {};\n"
"var to_iter = _1( opindex, env, scope, global );\n"
"wfor( to_iter, func, env, scope, global, father, itemname, indexname, keyname );\n"
"}\n"
"function _2z( z, opindex, func, env, scope, global, father, itemname, indexname, keyname )\n"
"{\n"
"var o = {};\n"
"var to_iter = _1z( z, opindex, env, scope, global );\n"
"wfor( to_iter, func, env, scope, global, father, itemname, indexname, keyname );\n"
"}\n" << lineEndMark;
v317 << "\n"
"function _m(tag,attrs,generics,env,scope,global)\n"
"{\n"
"var tmp=_n(tag);\n"
"var base=0;\n"
"for(var i = 0 ; i < attrs.length ; i+=2 )\n"
"{\n"
"if(base+attrs[i+1]<0)\n"
"{\n"
"tmp.attr[attrs[i]]=true;\n"
"}\n"
"else\n"
"{\n"
"_r(tmp,attrs[i],base+attrs[i+1],env,scope,global);\n"
"if(base===0)base=attrs[i+1];\n"
"}\n"
"}\n"
"for(var i=0;i<generics.length;i+=2)\n"
"{\n"
"if(base+generics[i+1]<0)\n"
"{\n"
"tmp.generics[generics[i]]=\"\";\n"
"}\n"
"else\n"
"{\n"
"var $t=grb(z[base+generics[i+1]],env,scope,global);\n"
"if ($t!=\"\") $t=\"wx-\"+$t;\n"
"tmp.generics[generics[i]]=$t;\n"
"if(base===0)base=generics[i+1];\n"
"}\n"
"}\n"
"return tmp;\n"
"}\n"
"function _mz(z,tag,attrs,generics,env,scope,global)\n"
"{\n"
"var tmp=_n(tag);\n"
"var base=0;\n"
"for(var i = 0 ; i < attrs.length ; i+=2 )\n"
"{\n"
"if(base+attrs[i+1]<0)\n"
"{\n"
"tmp.attr[attrs[i]]=true;\n"
"}\n"
"else\n"
"{\n"
"_rz(z, tmp,attrs[i],base+attrs[i+1],env,scope,global);\n"
"if(base===0)base=attrs[i+1];\n"
"}\n"
"}\n"
"for(var i=0;i<generics.length;i+=2)\n"
"{\n"
"if(base+generics[i+1]<0)\n"
"{\n"
"tmp.generics[generics[i]]=\"\";\n"
"}\n"
"else\n"
"{\n"
"var $t=grb(z[base+generics[i+1]],env,scope,global);\n"
"if ($t!=\"\") $t=\"wx-\"+$t;\n"
"tmp.generics[generics[i]]=$t;\n"
"if(base===0)base=generics[i+1];\n"
"}\n"
"}\n"
"return tmp;\n"
"}\n" << lineEndMark;
v317 << aVarNfInitFunct << lineEndMark;
v317 << "function _af(p, a, r, c){\n"
"p.extraAttr = {\"t_action\": a, \"t_rawid\": r };\n"
"if ( typeof(c) != 'undefined' ) p.extraAttr.t_cid = c;\n"
"}\n" << lineEndMark;
// Compile - 25
if (!a7)
{
v317 << "function _gv( )" << lineEndMark;
v317 << "{if( typeof( window.__webview_engine_version__) == 'undefined' ) return 0.0;" << lineEndMark;
v317 << "return window.__webview_engine_version__;}" << lineEndMark;
}
v317 << "function _ai(i,p,e,me,r,c){var x=_grp(p,e,me);if(x)i.push(x);else{i.push('');_wp(me+':import:'+r+':'+c+': Path"
" `'+p+'` not found from `'+me+'`.')}}" << lineEndMark;
v317 << "function _grp(p,e,me){if(p[0]!='/'){var mepart=me.split('/');mepart.pop();var ppart=p.split('/');for(var i=0;i"
"<ppart.length;i++){if( ppart[i]=='..')mepart.pop();else if(!ppart[i]||ppart[i]=='.')continue;else mepart.push("
"ppart[i]);}p=mepart.join('/');}if(me[0]=='.'&&p[0]=='/')p='.'+p;if(e[p])return p;if(e[p+'.wxml'])return p+'.wxml';}";
v317 << lineEndMark;
// Compile - 30
v317 << "function _gd(p,c,e,d){if(!c)return;if(d[p][c])return d[p][c];for(var x=e[p].i.length-1;x>=0;x--){if(e[p].i[x]&&d[e[p"
"].i[x]][c])return d[e[p].i[x]][c]};";
v317 << "for(var x=e[p].ti.length-1;x>=0;x--){var q=_grp(e[p].ti[x],e,p);if(q&&d[q][c])return d[q][c]}";
v317 << "var ii=_gapi(e,p);for(var x=0;x<ii.length;x++){if(ii[x]&&d[ii[x]][c])return d[ii[x]][c]}";
v317 << "for(var k=e[p].j.length-1;k>=0;k--)if(e[p].j[k]){for(var q=e[e[p].j[k]].ti.length-1;q>=0;q--){var pp=_grp(e[e[p].j[k"
"]].ti[q],e,p);if(pp&&d[pp][c]){return d[pp][c]}}}";
v317 << "}" << lineEndMark;
v317 << "function _gapi(e,p){if(!p)return [];if($gaic[p]){return $gaic[p]};var ret=[],q=[],h=0,t=0,put={},visited={};q.push(p"
");visited[p]=true;t++;while(h<t){";
v317 << "var a=q[h++];for(var i=0;i<e[a].ic.length;i++){";
v317 << "var nd=e[a].ic[i];var np=_grp(nd,e,a);if(np&&!visited[np]){visited[np]=true;q.push(np);t++;}}for(var i=0;a!=p&&i<e[a"
"].ti.length;i++){";
v317 << "var ni=e[a].ti[i];var nm=_grp(ni,e,a);if(nm&&!put[nm]){put[nm]=true;ret.push(nm);}}";
v317 << "}$gaic[p]=ret;return ret;}" << lineEndMark;
v317 << "var $ixc={};";
v317 << "function _ic(p,ent,me,e,s,r,gg){var x=_grp(p,ent,me);ent[me].j.push(x);if(x){if($ixc[x]){_wp('-1:include:-1:-1"
": `'+p+'` is being included in a loop, will be stop.');return;}$ixc[x]=true;try{ent[x].f(e,s,r,gg)}catch(e){}$"
"ixc[x]=false;}else{_wp(me+':include:-1:-1: Included path `'+p+'` not found from `'+me+'`.')}}";
v317 << lineEndMark;
v317 << "function _w(tn,f,line,c){_wp(f+':template:'+line+':'+c+': Template `'+tn+'` not found.');}";
v317 << "function _ev(dom){var changed=false;delete dom.properities;delete dom.n;if(dom.children){do{changed=false;var "
"newch = [];for(var i=0;i<dom.children.length;i++){var ch=dom.children[i];if( ch.tag=='virtual'){changed=true;f"
"or(var j=0;ch.children&&j<ch.children.length;j++){newch.push(ch.children[j]);}}else { newch.push(ch); } } dom."
"children = newch; }while(changed);for(var i=0;i<dom.children.length;i++){_ev(dom.children[i]);}} return dom; }";
v317 << lineEndMark;
// Compile - 35
v317 << "function _tsd( root )\n"
"{\n"
"if( root.tag == \"wx-wx-scope\" ) \n"
"{\n"
"root.tag = \"virtual\";\n"
"root.wxCkey = \"11\";\n"
"root['wxScopeData'] = root.attr['wx:scope-data'];\n"
"delete root.n;\n"
"delete root.raw;\n"
"delete root.generics;\n"
"delete root.attr;\n"
"}\n"
"for( var i = 0 ; root.children && i < root.children.length ; i++ )\n"
"{\n"
"_tsd( root.children[i] );\n"
"}\n"
"return root;\n"
"}\n";
v317 << lineEndMark;
v317 << "var " << eMark2 << "={}" << lineEndMark;
v317 << "if(typeof(global.entrys)==='undefined')global.entrys={};" << eMark2;
v317 << "=global.entrys;" << lineEndMark;
v317 << "var " << dMark << "={}" << lineEndMark;
v317 << "if(typeof(global.defines)==='undefined')global.defines={};" << dMark << "=global.defines;";
v317 << lineEndMark;
v317 << "var " << fMark << "={}" << lineEndMark;
v317 << "if(typeof(global.modules)==='undefined')global.modules={};" << fMark << "=global.modules || {};" << lineEndMark;
v317 << "var " << pMark << "={}" << lineEndMark;
// Compile - 40
if ((mark & 2) != 0)
{
v317 << "var cs" << lineEndMark;
}
for (auto j = v286.begin(); j != v286.end(); j++)
{
j->second->RewriteTree();
std::string v327 = "ALL";
std::vector<std::string> v113 = a5[v327];
j->second->MarkIfHasDescendant(v113);
if (a7)
{
j->second->CutDomsForCustomComponent(v113);
}
}
// Compile - 45
v317 << "__WXML_GLOBAL__.ops_cached = __WXML_GLOBAL__.ops_cached || {}" << lineEndMark;
v317 << "__WXML_GLOBAL__.ops_set = __WXML_GLOBAL__.ops_set || {};" << lineEndMark;
v317 << "__WXML_GLOBAL__.ops_init = __WXML_GLOBAL__.ops_init || {};" << lineEndMark;
v317 << "var z=__WXML_GLOBAL__.ops_set." << gwxMark << " || [];" << lineEndMark;
if ((mark & 4) != 0)
{
v317 << "__WXML_GLOBAL__.debuginfo_set = __WXML_GLOBAL__.debuginfo_set || {};" << lineEndMark;
v317 << "var debugInfo=__WXML_GLOBAL__.debuginfo_set." << gwxMark << " || [];" << lineEndMark;
}
// Compile - 50
int v254 = 0;
for (auto k = v286.begin(); k != v286.end(); k++)
{
v254++;
std::stringstream v327;
v327 << gwxMark << "_" << v254;
std::string v314 = v327.str();
std::string v316 = "gz" + v314;
v317 << "function " << v316 << "(){" << lineEndMark;
v317 << "if( __WXML_GLOBAL__.ops_cached." << v314 << ")";
v317 << "return __WXML_GLOBAL__.ops_cached." << v314 << lineEndMark;
v317 << "__WXML_GLOBAL__.ops_cached." << v314 << "=[];" << lineEndMark;
v317 << "(function(z){var a=11;";
if ((mark & 4) != 0)
{
v317 << "function Z(ops,debugLine){z.push(['11182016',ops,debugLine])}";
}
else
{
v317 << "function Z(ops){z.push(ops)}";
}
v317 << lineEndMark;
std::map<std::string, WXML::DOMLib::RVMOpCodePosition> v311;
WXML::DOMLib::RVMOpCodePositionRecorder v306;
k->second->RenderAllOpsAndRecord(k->first, a3, v317, v311, &v306, (mark & 4) != 0, a6);
v317 << "})(__WXML_GLOBAL__.ops_cached." << v314 << ");";
v317 << "return __WXML_GLOBAL__.ops_cached." << v314 << lineEndMark;
v317 << "}" << lineEndMark;
k->second->offset_272["get_page_z_name"].assign(v316);
}
// Compile - 55
v317 << "__WXML_GLOBAL__.ops_set." << gwxMark << "=z;" << lineEndMark;
v317 << "__WXML_GLOBAL__.ops_init." << gwxMark << "=true;" << lineEndMark;
if ((mark & 4) != 0)
{
v317 << "__WXML_GLOBAL__.debuginfo_set." << gwxMark << "=debugInfo;" << lineEndMark;
}
v317 << "var nv_require=function(){var nnm={";
for (auto m = v292.rbegin(); m != v292.rend(); m++)
{
v317 << "\"";
v317 << WXML::Rewrite::ToStringCode(m->first);
v317 << "\":np_";
v317 << m->second << ",";
}
// Compile - 60
v317 << "};var nom={};return function(n){";
v317 << "if(n[0]==='p'&&n[1]==='_'&&f_[n.slice(2)])return f_[n.slice(2)];";
v317 << "return function(){if(!nnm[n]) return undefined;";
v317 << "try{if(!nom[n])nom[n]=nnm[n]();return nom[n];}" << "catch(e){";
v317 << "e.message=e.message.replace(/nv_/g,'');";
v317 << "var tmp = e.stack.substring(0,e.stack.lastIndexOf(n));";
v317 << "e.stack = tmp.substring(0,tmp.lastIndexOf('\\n'));";
v317 << "e.stack = e.stack.replace(/\\snv_/g,' ');";
v317 << "e.stack = $gstack(e.stack);";
v317 << "e.stack += '\\n at ' + n.substring(2);console.error(e);}" << lineEndMark;
v317 << "}}}()" << lineEndMark;
for (auto n = v290.rbegin(); n != v290.rend(); n++)
{
v317 << n->second << lineEndMark;
}
// Compile - 65
std::shared_ptr<WXML::DOMLib::StrCache> v281(new WXML::DOMLib::StrCache());
for (auto ii = v286.begin(); ii != v286.end(); ii++)
{
v281->Insert(ii->first);
ii->second->offset_248 = v281;
ii->second->RecordAllPath();
}
v281->RenderPathDefine(v317);
int inc = 0;
for (auto i = v286.begin(); i != v286.end(); i++)
{
std::map<std::string, std::string> v309;
v317 << dMark << "[x[";
int strId = v281->GetStrID(i->first);
v317 << strId << "]]={}" << lineEndMark;
std::string v165 = i->second->offset_272["get_page_z_name"];
int v266 = WXML::Compiler::RenderDefine(
*i->second,
i->first,
v309,
a3,
v317,
a6,
(mark & 2) != 0,
mark,
lineEndMark,
eMark1,
sMark,
ggMark,
gwxMark,
eMark2,
dMark,
pMark,
endMark,
boxMark,
gdwxMark,
v165
);
if (v266)
{
return v266;
}
std::stringstream v327;
v327 << "m";
inc++;
v327 << inc;
std::string v314 = v327.str();
auto v276 = i->second->offset_272["get_page_z_name"];
std::string v320 = "r";
i->second->RenderMeAsFunction(
i->first,
eMark2,
a3,
v314,
v317,
&v323_na,
eMark1,
sMark,
ggMark,
v320,
dMark,
lineEndMark,
pMark,
false,
(mark & 2) != 0,
mark,
v276
);
// if (v266)
// {
// return v266;
// }
v317 << eMark2 << "[x[";
int v167 = v281->GetStrID(i->first);
v317 << v167 << "]]={f:" << v314 << ",j:[],i:[],ti:[";
auto v171 = i->second->offset_72;
for (int j = 0; j < v171.size(); j++)
{
auto cur = v171[j];
if (cur->offset_0 == "import")
{
if (cur->offset_48.find("src") != cur->offset_48.end())
{
if (j)
{
v317 << ",";
}
v317 << "x[";
auto v172 = cur->offset_48.find("src");
auto v173 = v172->second.ToAttrContent();
int v174 = v281->GetStrID(v173);
v317 << v174 << "]";
}
}
}
v317 << "],ic:[";
for (int jj = 0; jj < i->second->offset_72.size(); jj++)
{
auto cur = i->second->offset_72[jj];
if (cur->offset_0 == "include")
{
auto src = cur->offset_48.find("src");
if (src != cur->offset_48.end())
{
if (jj)
{
v317 << ",";
}
auto v178 = src->second.ToAttrContent();
int v179 = v281->GetStrID(v178);
v317 << v179 << "]";
}
}
}
v317 << "]}" << lineEndMark;
}
// Compile - 70
v317 << "if(path&&" << eMark2 << "[path]){" << lineEndMark;
if (!a7)
{
v317 << "window.__wxml_comp_version__=0.02" << lineEndMark;
}
v317 << "return function(env,dd,global){$gwxc=0;var root={\"tag\":\"wx-page\"};root.children=[]" << lineEndMark;
v317 << "var main=" << eMark2 << "[path].f" << lineEndMark;
if ((mark & 2) != 0)
{
v317 << "cs=[]" << lineEndMark;
}
if ((mark & 0x10) != 0)
{
v317 << "console.log(path+': benv:\\n'+JSON.stringify(env))" << lineEndMark;
}
v317 << "if (typeof global===\"undefined\")global={};";
v317 << "global.f=$gdc(" << fMark << "[path],\"\",1);" << lineEndMark;
if (!a7)
{
v317 << "if(typeof(window.__webview_engine_version__)!='undefined'&&window.__webview_engine_version__+1e-6>=0.02+1e-"
"6&&window.__mergeData__)" << lineEndMark;
v317 << "{" << lineEndMark;
v317 << "env=window.__mergeData__(env,dd);" << lineEndMark;
v317 << "}" << lineEndMark;
}
v317 << "try{" << lineEndMark;
if ((mark & 0x10) != 0)
{
v317 << "console.log(path+': aenv:\\n'+JSON.stringify(env)+', '+JSON.stringify(dd))" << lineEndMark;
}
// Compile - 75
if ((mark & 0x80) != 0)
{
v317 << "if(__WXML_GLOBAL__.before_calculate)__WXML_GLOBAL__.before_calculate(path, env)" << lineEndMark;
}
v317 << "main(env,{},root,global);" << lineEndMark;
if ((mark & 0x80) != 0)
{
v317 << "if(__WXML_GLOBAL__.after_calculate)__WXML_GLOBAL__.after_calculate(path, root)" << lineEndMark;
}
v317 << "_tsd(root)" << lineEndMark;
if (!a7)
{
v317 << "if(typeof(window.__webview_engine_version__)=='undefined'|| window.__webview_engine_version__+1e-6<0.01+1e-"
"6){return _ev(root);}" << lineEndMark;
}
// Compile - 80
v317 << "}catch(err){" << lineEndMark;
if ((mark & 2) != 0)
{
v317 << "console.log(cs, env);" << lineEndMark;
}
v317 << "console.log(err)" << lineEndMark;
if ((mark & 2) != 0)
{
v317 << "throw err" << lineEndMark;
}
v317 << "}" << lineEndMark;
if ((mark & 0x10) != 0)
{
v317 << "console.log(path+': resp:\\n'+JSON.stringify(root))" << lineEndMark;
}
v317 << "return root;" << lineEndMark;
v317 << "}" << lineEndMark;
v317 << "}" << lineEndMark;
v317 << "}" << lineEndMark;
if ( (mark & 8) != 0 )
{
for (auto kk = v286.begin(); kk != v286.end(); kk++)
{
v317 << "//" << kk->first << ":" << std::endl;
kk->second->Print(0, "//", &v317);
}
}
a4 = v317.str();
/*
std::map<std::string,std::string> const& a2,// a2
std::string& a3, // a3
std::string& a4, // a4
std::map<std::string, std::vector<std::string>> a5,// a5
std::map<std::string, std::string> const& a6,// a6
bool a7,// a7
std::string const& gwxMark,// a8
uint mark, // a9
char lineEndMark, // a10
std::string const& a11, // a11
std::string const& a12, // a12
std::string const& ggMark, // a13
std::string const& eMark, // a14
std::string const& dMark, // a15
@ -808,7 +1649,7 @@ namespace WXML{
std::string const& boxMark, // a18
std::string const& gdwxMark, // a19
std::string const& fMark) // a20
{
*/
return 0;
}
int DealWxsTag(
@ -851,7 +1692,7 @@ namespace WXML{
std::vector<WXML::DOMLib::Token> v50;
bool parseResult = p.Parse(data.data(), errorMessage, filePath, v50);
// DealWxsTag - 10
if (parseResult)
if (!parseResult)
{
auto dom = p.GetParsed();
*a6 = a2.offset_8;

View File

@ -367,13 +367,11 @@ namespace WXML
}
if (bittest(&v46, 0x16u)) // 0x16 -> 22
{
throw "not implement";
// WXML::DOMLib::Token token(*(a5.end() - 1));
auto v49 = a5.back();
a5.pop_back();
// ----
// this->offset_4 =
// this->offset_5 =
this->offset_16 = v49.offset_8;
this->offset_20 = v49.offset_12;
this->offset_4 = v49.offset_16;
}
}while(bittest(&v46, 0x14u)); // 0x14 -> 20

View File

@ -100,7 +100,7 @@ namespace WXML
// DOMS
this->DOMS();
}
return ret == 0;
return ret;
}
std::shared_ptr<WXML::DOMLib::WXMLDom> Parser::GetParsed()

View File

@ -252,7 +252,7 @@ namespace WXML {
std::string const& a2,
std::string& a3,
std::stringstream & a4,
std::map<std::string,WXML::DOMLib::RVMOpCodePosition> &a5,
std::map<std::string, WXML::DOMLib::RVMOpCodePosition> &a5,
WXML::DOMLib::RVMOpCodePositionRecorder *a6,
bool a7,
const std::map<std::string,std::string> & a8
@ -293,6 +293,7 @@ namespace WXML {
}
return;
}
int RenderMeAsFunction_i = 0;
void WXMLDom::RenderMeAsFunction(
std::string const& a2,
std::string const& a3,
@ -313,8 +314,10 @@ namespace WXML {
std::string const& a18
)
{
try
{
RenderMeAsFunction_i++;
int inner_RenderMeAsFunction_i = RenderMeAsFunction_i;
// try
// {
std::string name;
a7->GetNextName(name);
if (a15)
@ -371,11 +374,11 @@ namespace WXML {
a6 << a13 << a14 << "[" << name << "]=false" << a13;
}
a6 << "return " << a11 << a13 << "}" << a13;
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
}
// }
// catch(const std::exception& e)
// {
// std::cerr << e.what() << '\n';
// }
}

View File

@ -11922,6 +11922,7 @@ std::ostream::sentry *__usercall WXML::Compiler::Compile@<eax>(
char v328[4]; // [esp+4A8h] [ebp-170h] BYREF
char v329[364]; // [esp+4ACh] [ebp-16Ch] BYREF
// Compile - 0
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::basic_stringstream((int)v317);
std::_Rb_tree_header::_Rb_tree_header(v287);
std::_Rb_tree_header::_Rb_tree_header(v289);
@ -11951,7 +11952,7 @@ std::ostream::sentry *__usercall WXML::Compiler::Compile@<eax>(
(int)v327,
(WXML::DOMLib::Parser *)a1,
*((char **)i + 10),
(int)a3,
(int)a3, // errorMessage
(int)lpuexcpt,
&v283);
if ( v266 )
@ -11959,7 +11960,7 @@ std::ostream::sentry *__usercall WXML::Compiler::Compile@<eax>(
LABEL_25:
WXML::DOMLib::Parser::~Parser((int)v327);
std::vector<WXML::DOMLib::Token>::~vector((void **)&v283);
goto LABEL_118;
goto LABEL_118; // 销毁数据返回v266
}
WXML::DOMLib::Parser::GetParsed(&v323, (WXML::DOMLib::Parser *)v327);
v20 = std::map<std::string,zcc::shared_ptr<WXML::DOMLib::WXMLDom>>::operator[](&v286, (int)lpuexcpt);
@ -11973,7 +11974,7 @@ LABEL_25:
v297[1] = 0;
v298 = 0;
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::basic_stringstream((int)v320);
if ( v283 != v284 )
if ( v283 != v284 ) // begin() != end()
{
v245 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v321, "f_['");
WXML::Rewrite::ToStringCode((int)&v323, lpuexcpt);
@ -11985,18 +11986,23 @@ LABEL_25:
}
while ( (unsigned int)v266 < -1227133513 * (((char *)v284 - (char *)v283) >> 4) )
{
v299[1] = 0;
v304[0] = &v305;
a1 = a3;
v299[0] = &v300;
v301 = (int)&v303;
v306 = (int)&v308;
v300 = 0;
v302 = 0;
v303 = 0;
v299[1] = 0;
v304[0] = &v305;
v304[1] = 0;
v305 = 0;
a1 = a3;
v301 = (int)&v303;
v302 = 0;
v306 = (int)&v308;
v307 = 0;
v300 = 0;
v303 = 0;
v305 = 0;
v308 = 0;
v246 = WXML::Compiler::DealWxsTag(
(int)lpuexcpt,
@ -12007,7 +12013,7 @@ LABEL_25:
&v280,
a3);
if ( v246 )
goto LABEL_21;
goto LABEL_21; // 销毁数据返回v246
v23 = std::operator<<<char>((std::ostream::sentry *)v321, a20);
v247 = std::operator<<<std::char_traits<char>>(v23, "['");
WXML::Rewrite::ToStringCode((int)v316, lpuexcpt);
@ -12021,9 +12027,9 @@ LABEL_25:
if ( v302 )
{
MMBizWxaAppComm::PathCombine(lpuexcpt, &v301, (unsigned int *)&v306);
if ( *(_BYTE *)v306 == 47 )
if ( *(_BYTE *)v306 == '/'/*47*/ )
{
std::operator+<char>((int)&v309, 46, (int)&v306);
std::operator+<char>((int)&v309, '.'/*46*/, (int)&v306);
std::string::operator=((unsigned __int8 **)&v306, (int)&v309);
std::string::_M_dispose((void **)&v309);
}
@ -12039,6 +12045,7 @@ LABEL_25:
std::operator<<<std::char_traits<char>>(v27, ":");
v28 = (std::ostream::sentry *)std::ostream::operator<<(v280);
std::operator<<<std::char_traits<char>>(v28, ":");
// int ** v283
v29 = (std::ostream::sentry *)std::ostream::operator<<(v283[28 * (_DWORD)v266 + 3]);
v30 = std::operator<<<std::char_traits<char>>(v29, ":");
v31 = std::operator<<<char>(v30, &v301);
@ -12058,7 +12065,7 @@ LABEL_21:
std::string::_M_dispose((void **)v297);
std::string::_M_dispose((void **)&v294);
v266 = (std::ostream::sentry *)v246;
goto LABEL_25;
goto LABEL_25; // 销毁数据返回v266
}
}
v249 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v321, "f_['");
@ -12103,7 +12110,7 @@ LABEL_21:
{
std::string::_M_assign((int)a3, (int)v297);
std::string::_M_dispose((void **)&v309);
goto LABEL_21;
goto LABEL_21; // 销毁数据返回v246
}
v253 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v321, "nv_require(\"");
std::operator+<char>((int)&v311, "m_", (int)lpuexcpt);
@ -12151,7 +12158,7 @@ LABEL_21:
std::string::_M_dispose((void **)v316);
if ( v267 )
{
v311 = (int)&v313;
v311 = (int)&v313; // std::string
v312 = 0;
v313 = 0;
std::operator+<char>((int)v327, "p_", (int)lpuexcpt);
@ -12170,7 +12177,7 @@ LABEL_21:
std::string::_M_assign((int)a3, (int)&v311);
std::string::_M_dispose((void **)v314);
std::string::_M_dispose((void **)&v311);
goto LABEL_118;
goto LABEL_118; // 销毁数据返回v266
}
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::basic_stringstream((int)v327);
v268 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v328, "f_['");
@ -12199,6 +12206,7 @@ LABEL_21:
}
}
}
// Compile - 5
if ( a7 )
std::string::basic_string((void **)&v323, "global");
else
@ -12220,6 +12228,7 @@ LABEL_21:
std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "if(typeof __WXML_GLOBAL__ === 'undefined') {");
v61 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "__WXML_GLOBAL__={};");
std::operator<<<std::char_traits<char>>(v61, a10);
// Compile - 10
if ( (a9 & 0x80) != 0 )
{
std::string::basic_string((void **)v327, "life_cycle_callback_content");
@ -12247,6 +12256,7 @@ LABEL_21:
v64 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "$gwx('init', global);");
std::operator<<<std::char_traits<char>>(v64, a10);
}
// Compile - 15
v65 = std::operator<<<std::char_traits<char>>(
(std::ostream::sentry *)v318,
"function _(a,b){if(typeof(b)!='undefined')a.children.push(b);}");
@ -12436,6 +12446,7 @@ LABEL_21:
"}\n"
"}\n");
std::operator<<<std::char_traits<char>>(v75, a10);
// Compile - 20
v76 = std::operator<<<std::char_traits<char>>(
(std::ostream::sentry *)v318,
"function _ca(o)\n"
@ -12595,6 +12606,7 @@ LABEL_21:
"if ( typeof(c) != 'undefined' ) p.extraAttr.t_cid = c;\n"
"}\n");
std::operator<<<std::char_traits<char>>(v79, a10);
// Compile - 25
if ( !a7 )
{
v80 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "function _gv( )");
@ -12619,6 +12631,7 @@ LABEL_21:
"<ppart.length;i++){if( ppart[i]=='..')mepart.pop();else if(!ppart[i]||ppart[i]=='.')continue;else mepart.push("
"ppart[i]);}p=mepart.join('/');}if(me[0]=='.'&&p[0]=='/')p='.'+p;if(e[p])return p;if(e[p+'.wxml'])return p+'.wxml';}");
std::operator<<<std::char_traits<char>>(v84, a10);
// Compile - 30
std::operator<<<std::char_traits<char>>(
(std::ostream::sentry *)v318,
"function _gd(p,c,e,d){if(!c)return;if(d[p][c])return d[p][c];for(var x=e[p].i.length-1;x>=0;x--){if(e[p].i[x]&&d[e[p"
@ -12668,6 +12681,7 @@ LABEL_21:
"or(var j=0;ch.children&&j<ch.children.length;j++){newch.push(ch.children[j]);}}else { newch.push(ch); } } dom."
"children = newch; }while(changed);for(var i=0;i<dom.children.length;i++){_ev(dom.children[i]);}} return dom; }");
std::operator<<<std::char_traits<char>>(v88, a10);
// Compile - 35
v89 = std::operator<<<std::char_traits<char>>(
(std::ostream::sentry *)v318,
"function _tsd( root )\n"
@ -12723,6 +12737,7 @@ LABEL_21:
v109 = std::operator<<<char>(v108, a16);
v110 = std::operator<<<std::char_traits<char>>(v109, "={}");
std::operator<<<std::char_traits<char>>(v110, a10);
// Compile - 40
if ( (a9 & 2) != 0 )
{
v111 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "var cs");
@ -12736,19 +12751,20 @@ LABEL_21:
break;
WXML::DOMLib::WXMLDom::RewriteTree(*((_DWORD *)j + 10));
v260 = (std::ostream::sentry *)*((_DWORD *)v270 + 10);
std::string::basic_string((void **)v327, (char *)off_550B3F);
std::string::basic_string((void **)v327, (char *)off_550B3F); // "ALL"
v113 = std::map<std::string,std::vector<std::string>>::operator[](a5, v327);
WXML::DOMLib::WXMLDom::MarkIfHasDescendant((int)v260, v113);
std::string::_M_dispose((void **)v327);
if ( a7 )
{
v261 = (std::ostream::sentry *)*((_DWORD *)v270 + 10);
std::string::basic_string((void **)v327, (char *)off_550B3F);
std::string::basic_string((void **)v327, (char *)off_550B3F); // "ALL"
v114 = std::map<std::string,std::vector<std::string>>::operator[](a5, v327);
WXML::DOMLib::WXMLDom::CutDomsForCustomComponent(v261, v114);
std::string::_M_dispose((void **)v327);
}
}
// Compile - 45
v115 = std::operator<<<std::char_traits<char>>(
(std::ostream::sentry *)v318,
"__WXML_GLOBAL__.ops_cached = __WXML_GLOBAL__.ops_cached || {}");
@ -12779,6 +12795,7 @@ LABEL_21:
std::operator<<<std::char_traits<char>>(v124, a10);
}
v254 = 0;
// Compile - 50
for ( k = v288; k != (std::ostream::sentry *)v287; k = (std::ostream::sentry *)std::_Rb_tree_increment((int)k) )
{
std::_Rb_tree_header::_Rb_tree_header(&v312);
@ -12840,6 +12857,7 @@ LABEL_21:
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::~basic_stringstream((int)v327);
std::_Rb_tree<std::string,std::pair<std::string const,WXML::DOMLib::RVMOpCodePosition>,std::_Select1st<std::pair<std::string const,WXML::DOMLib::RVMOpCodePosition>>,std::less<std::string>,std::allocator<std::pair<std::string const,WXML::DOMLib::RVMOpCodePosition>>>::~_Rb_tree((int)&v311);
}
// Compile - 55
v143 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "__WXML_GLOBAL__.ops_set.");
v144 = std::operator<<<char>(v143, a8);
v145 = std::operator<<<std::char_traits<char>>(v144, "=z;");
@ -12870,6 +12888,7 @@ LABEL_21:
std::operator<<<std::char_traits<char>>(v155, ",");
std::string::_M_dispose((void **)v327);
}
// Compile - 60
std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "};var nom={};return function(n){");
std::operator<<<std::char_traits<char>>(
(std::ostream::sentry *)v318,
@ -12904,16 +12923,17 @@ LABEL_21:
v159 = std::operator<<<char>((std::ostream::sentry *)v318, n + 10);
std::operator<<<std::char_traits<char>>(v159, a10);
}
// Compile - 65
for ( ii = v288; ; ii = (std::ostream::sentry *)std::_Rb_tree_increment((int)v274) )
{
v274 = ii;
v263 = v281;
if ( ii == (std::ostream::sentry *)v287 )
break;
std::string::basic_string((char *)v327, (int)ii + 16);
std::string::basic_string((char *)v327, (int)ii + 16); // first
WXML::DOMLib::StrCache::Insert(v263, (int)v327);
std::string::_M_dispose((void **)v327);
v161 = *((_DWORD *)v274 + 10); // v374 ii
v161 = *((_DWORD *)v274 + 10); // v274 ii second
*(_DWORD *)(v161 + 248) = v281;
std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=((volatile signed __int32 **)(v161 + 252), v282);
WXML::DOMLib::WXMLDom::RecordAllPath(*((_DWORD **)v274 + 10));
@ -12925,16 +12945,17 @@ LABEL_21:
while ( v264 != (std::ostream::sentry *)v287 )
{
v162 = std::operator<<<char>((std::ostream::sentry *)v318, a15);
std::operator<<<std::char_traits<char>>(v162, (char *)off_55101C);
std::operator<<<std::char_traits<char>>(v162, (char *)off_55101C); // "[x["
v275 = v281;
v255 = (int *)((char *)v264 + 16);
std::string::basic_string((char *)v327, (int)v264 + 16);
std::string::basic_string((char *)v327, (int)v264 + 16); // first
StrID = WXML::DOMLib::StrCache::GetStrID(v275, (int)v327);
std::ostream::operator<<(StrID);
std::string::_M_dispose((void **)v327);
v164 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "]]={}");
std::operator<<<std::char_traits<char>>(v164, a10);
std::string::basic_string((void **)v327, "get_page_z_name");
// cur->second->offset_272["get_page_z_name"]
v165 = std::map<std::string,std::string>::operator[]((_DWORD *)(*((_DWORD *)v264 + 10) + 272), v327);
v266 = WXML::Compiler::RenderDefine(
(unsigned int **)v264 + 10,
@ -12945,7 +12966,7 @@ LABEL_21:
(int)a6,
v234,
a9,
a10,
a10, // lineEndMark
a11,
a12,
a13,
@ -12959,11 +12980,13 @@ LABEL_21:
v165);
std::string::_M_dispose((void **)v327);
if ( v266 )
goto LABEL_117;
goto LABEL_117; // 销毁数据返回v266
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::basic_stringstream((int)v327);
v314[0] = (int)&v315;
v314[0] = (int)&v315; // std::string
v314[1] = 0;
v315 = 0;
std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v328, "m");
v231 = v238 + 1;
std::ostream::operator<<(v238);
@ -12999,10 +13022,10 @@ LABEL_21:
{
std::string::_M_dispose((void **)v314);
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::~basic_stringstream((int)v327);
goto LABEL_117;
goto LABEL_117; // 销毁数据返回v266
}
v166 = std::operator<<<char>((std::ostream::sentry *)v318, a14);
std::operator<<<std::char_traits<char>>(v166, (char *)off_55101C);
std::operator<<<std::char_traits<char>>(v166, (char *)off_55101C); // "[x["
v240 = v281;
std::string::basic_string((char *)v320, (int)v255);
v167 = WXML::DOMLib::StrCache::GetStrID(v240, (int)v320);
@ -13023,7 +13046,7 @@ LABEL_21:
{
v235 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v264 + 10) + 72) + 8 * (_DWORD)v256);
v229 = (_DWORD *)(v235 + 52);
std::string::basic_string((void **)v320, (char *)off_547B7D);
std::string::basic_string((void **)v320, (char *)off_547B7D); // "src"
v236 = 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 *)(v235 + 48),
(int)v320);
@ -13035,7 +13058,7 @@ LABEL_21:
std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "x[");
v230 = v281;
v237 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v264 + 10) + 72) + 8 * (_DWORD)v256);
std::string::basic_string((void **)v316, (char *)off_547B7D);
std::string::basic_string((void **)v316, (char *)off_547B7D); // src
v172 = 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 *)(v237 + 48),
(int)v316);
@ -13062,7 +13085,7 @@ LABEL_21:
{
v242 = *(_DWORD *)(*(_DWORD *)(*((_DWORD *)v264 + 10) + 72) + 8 * (_DWORD)jj);
v232 = (_DWORD *)(v242 + 52);
std::string::basic_string((void **)v320, (char *)off_547B7D);
std::string::basic_string((void **)v320, (char *)off_547B7D); // src
v243 = 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 *)(v242 + 48),
(int)v320);
@ -13096,6 +13119,7 @@ LABEL_21:
v264 = (std::ostream::sentry *)std::_Rb_tree_increment((int)v264);
v238 = v231;
}
// Compile - 70
v181 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "if(path&&");
v182 = std::operator<<<char>(v181, a14);
v183 = std::operator<<<std::char_traits<char>>(v182, "[path]){");
@ -13153,6 +13177,7 @@ LABEL_21:
"console.log(path+': aenv:\\n'+JSON.stringify(env)+', '+JSON.stringify(dd))");
std::operator<<<std::char_traits<char>>(v199, a10);
}
// Compile - 75
if ( (a9 & 0x80) != 0 )
{
v200 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "if(__WXML_GLOBAL__.");
@ -13185,6 +13210,7 @@ LABEL_21:
"6){return _ev(root);}");
std::operator<<<std::char_traits<char>>(v212, a10);
}
// Compile - 80
v213 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v318, "}catch(err){");
std::operator<<<std::char_traits<char>>(v213, a10);
if ( (a9 & 2) != 0 )
@ -13233,6 +13259,7 @@ LABEL_21:
std::stringbuf::str((int)v327, (int)v319);
std::string::operator=(a4, (int)v327);
std::string::_M_dispose((void **)v327);
// Compile - 85
v266 = 0;
LABEL_117:
std::_Rb_tree<std::string,std::pair<std::string const,std::string>,std::_Select1st<std::pair<std::string const,std::string>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::string>>>::~_Rb_tree((int)&v309);
@ -18984,11 +19011,11 @@ _DWORD *__fastcall night::NSASTParse::ast_for(int *a1)
std::string::_M_dispose(v15);
v7[57] = 0;
v7[54] = 0;
std::string::basic_string(v15, (char *)&byte_551F04);
std::string::basic_string(v15, (char *)&byte_551F04); // '\0'
std::string::basic_string(v14, "ast_expression");
std::string::basic_string(v13, ";");
std::string::basic_string(v12, (char *)&asc_5527F4[2]);
std::string::basic_string(v11, (char *)asc_5527F4);
std::string::basic_string(v11, (char *)asc_5527F4); // "(\000)\000{"
v7[57] = night::NSASTParse::make_list_by_parser(a1, (int)v11, (int)v12, (int)v13, (int)v14, 0, 2, (int)v15);
std::string::_M_dispose(v11);
std::string::_M_dispose(v12);
@ -191583,8 +191610,8 @@ int main(int argc, const char **argv, const char **envp)
v68 = (int)WXML::Compiler::Compile(
v3,
&v107,
(int *)v111,
(unsigned __int8 **)v113,
(int *)v111, // errpr
(unsigned __int8 **)v113, // result
v126,
&v105,
v53,

View File

@ -2,7 +2,7 @@
root_dir=$(cd `dirname $0`/.. && pwd -P)
cd /mnt/d/Work/WeChatProjects/miniprogram-demo/miniprogram
cd /mnt/d/Work/WeChatProjects/miniprogram-1
# list="cmd1 cmd2"
# for cmd in $list;
@ -11,6 +11,6 @@ cd /mnt/d/Work/WeChatProjects/miniprogram-demo/miniprogram
# /root/github/wx-compiler/build/wcc "--config-path" "/mnt/d/Work/disassembly/wcc-exec/wcc/config/$cmd.txt" > /root/github/wx-compiler/test/wcc_linux.json
# /mnt/d/Work/disassembly/wcc-exec/wcc/wcc.exe "--config-path" "d:/Work/disassembly/wcc-exec/wcc/config/$cmd.txt" > /root/github/wx-compiler/test/wcc_win.json
# done;
filename="llw2.txt"
/root/github/wx-compiler/build/wcc "--config-path" "/mnt/d/Work/disassembly/wcc-exec/wcc/config/$filename" > /root/github/wx-compiler/test/wcc_linux.json
/mnt/d/Work/disassembly/wcc-exec/wcc/wcc.exe "--config-path" "d:/Work/disassembly/wcc-exec/wcc/config/$filename" > /root/github/wx-compiler/test/wcc_win.json
filename="WeChatProjects/miniprogram-1/wcc/99a9bac3c05fc25dd070298212c4a7d3"
/root/github/wx-compiler/build/wcc "--config-path" "/mnt/d/Work/$filename" > /root/github/wx-compiler/test/wcc_linux.json
/mnt/d/Work/disassembly/wcc-exec/wcc/wcc.exe "--config-path" "d:/Work/$filename" > /root/github/wx-compiler/test/wcc_win.json