feat: support for --wxs

This commit is contained in:
msojocs 2024-07-13 21:49:54 +08:00
parent fc07e7cc38
commit 2c0cb9bdfc
23 changed files with 10781 additions and 9796 deletions

View File

@ -5,6 +5,7 @@ module.exports = {
],
recursive: true,
spec: "./test/spec/**/*.spec.ts",
// spec: "test/spec/wcsc/module/module.spec.ts",
// spec: 'test/spec/wcc/module/module.spec.ts',
// spec: "test/spec/wcc/wxs/wxs.spec.ts",
timeout: 20000,
}

103
.vscode/launch.json vendored
View File

@ -5,6 +5,105 @@
"version": "0.2.0",
"configurations": [
{
"name": "wcc wxs sample2",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build/wcc",
"args": [
"--wxs",
"${workspaceRoot}/test/spec/wcc/wxs/sample2.json"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/",
"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
}
}
},
{
"name": "wcc wxs sample3",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build/wcc",
"args": [
"--wxs",
"${workspaceRoot}/test/spec/wcc/wxs/sample3.json"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/",
"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
}
}
},
{
"name": "wcc wxs sample4",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build/wcc",
"args": [
"--wxs",
"${workspaceRoot}/test/spec/wcc/wxs/sample4.json"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/",
"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
}
}
},
{
"name": "(gdb) Launch",
"type": "cppdbg",
@ -12,10 +111,10 @@
"program": "${workspaceFolder}/build/wcc",
"args": [
"\"--config-path\"",
"\"/home/msojocs/github/wx-compiler/test/spec/issue/102/case1.txt\""
"\"${workspaceRoot}/test/spec/issue/102/case1.txt\""
],
"stopAtEntry": false,
"cwd": "/home/msojocs/github/wx-compiler/test/spec/issue/102/wxapp",
"cwd": "${workspaceRoot}/test/spec/issue/102/wxapp",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",

View File

@ -1,3 +1,9 @@
## 🌈 v0.1.0 / 2024-07-13
🚀Features
- 编译器:支持 `--wxs` 参数
## 🌈 v0.0.9 / 2024-07-07
🚀Features

File diff suppressed because one or more lines are too long

View File

@ -6,4 +6,5 @@
std::string DictToJsonString(std::map<std::string,std::string> const&);
std::string EscapeToJsonString(std::string const&);
int GetJsonDict(std::string &a1, std::map<std::string, std::string>& a2);
#endif

View File

@ -54,6 +54,7 @@ namespace night
int compile_ns(std::string const&,std::string const&,std::string const&,uint,std::string&,bool);
void compile_ns_with_sourcemap(std::string const&,std::string const&,std::string const&,std::string const&,uint,std::string&,std::string&);
int compile_ns_no_wrapper(std::string const& a1, std::string const& a2, uint a5, std::string& a6, bool a7);
void readfile(char const*, std::string &);
void writefile(char const*, std::string &);
@ -310,7 +311,7 @@ namespace night
std::vector<std::string> * offset_28 = nullptr;
int offset_32 = 0;
std::vector<night::ns_sourcemap> offset_36;
int offset_48;
int offset_48 = 1;
NSCompileJs(/* args */);
~NSCompileJs();
std::string compile(night::ns_node *);

View File

@ -1,10 +1,12 @@
#ifndef __WXML_H_
#define __WXML_H_
#include "define.h"
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <cstring>
#include <memory>
@ -711,6 +713,19 @@ namespace WXML
} // namespace EXPRLib
namespace GlassEaselWxs {
const std::string sWrapper = "function n(nv_require,nv_exports,nv_module){%s}const t={nv_exports:{}};n((function(n){n.startsWith(\"p_\")&&(n=\"/\"+n.slice(2)),n.endsWith(\".wxs\")&&(n=n.slice(0,n.length-4));const t=gdc(require(n),\"nv_\");return function(){return t}}),t.nv_exports,t),Object.assign(module,gdc(t,void 0));";
const std::string sGenFuncDeepCopy = "var gdc=function(){var e=function(){return void 0!==this?this:\"undefined\"!=typeof globalThis?globalThis:\"undefine"
"d\"!=typeof self?self:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:{}}();return function("
"n,t,o,i=e){if(null==n)return n;if(\"undefined\"!=typeof __wxCodeSpace__&&\"function\"==typeof __wxCodeSpace__.isWxsS"
"tateObject&&__wxCodeSpace__.isWxsStateObject(n))return n;if(\"string\"==typeof n||\"boolean\"==typeof n||\"number\"="
"=typeof n)return n;if(Array.isArray(n)){const e=[];for(let i=0;i<n.length;i++)e.push(gdc(n[i],t,o,n));return e}if(n "
"instanceof Date){const e=new Date;return e.setTime(n.getTime()),e}if(n instanceof RegExp){let e=\"\";return n.global"
"&&(e+=\"g\"),n.ignoreCase&&(e+=\"i\"),n.multiline&&(e+=\"m\"),new RegExp(n.source,e)}if(\"object\"==typeof n){const "
"e={};for(let i in n)Object.prototype.hasOwnProperty.call(n,i)&&(void 0===t?e[i.substring(3)]=gdc(n[i],t,o,n):e[t+i]="
"gdc(n[i],t,o,n));return e}return\"function\"==typeof n?1===o?null:function(...e){const o=gdc(e,void 0===t?\"nv_\":vo"
"id 0),r=n.apply(i,o);return gdc(r,t)}:null}}();";
const std::string sWxsEnvInit = aUndefinedTypeo;
};
}
#endif

View File

@ -1,12 +1,14 @@
// hello.cc
#include "./include/wcc.hh"
#include "../include/file.h"
#include "../include/night.h"
#include "../include/string_utils.h"
#include "../include/wxml.h"
#include "v8.h"
#include <algorithm>
#include <cstdio>
#include <node.h>
#include <string>
#include <algorithm>
namespace wx_compiler {
@ -26,226 +28,261 @@ using std::vector;
int compile(Isolate *isolate, WCCOptions &options, Local<Value> &result,
std::string &errMsg) {
int mark = 0;
if (options.debug) {
mark |= 2u;
}
if (options.debugWXS) {
mark |= 4u;
}
std::map<std::string, std::string> fileContentMap;
for (int i = 0; i < options.files.size(); i++) {
fileContentMap[options.files[i]] = options.contents[i];
}
map<string, vector<string>> componentListMap;
std::string xc_Or_completeCode_Param = options.wxmlCompileConfig;
if (!xc_Or_completeCode_Param.empty())
{
try {
int mark = 0;
if (options.debug) {
mark |= 2u;
}
if (options.debugWXS) {
mark |= 4u;
}
std::map<std::string, std::string> fileContentMap;
std::map<std::string, std::string> wxsMap;
for (int i = 0; i < options.files.size(); i++) {
auto file = options.files[i];
fileContentMap[file] = options.contents[i];
if (file.find(".wxs") != std::string::npos) {
wxsMap[file] = options.contents[i];
}
}
map<string, vector<string>> componentListMap;
std::string xc_Or_completeCode_Param = options.wxmlCompileConfig;
if (!xc_Or_completeCode_Param.empty()) {
string data;
vector<string> allComponentList;
data = getNextArg(xc_Or_completeCode_Param, options.wxmlCompileConfigSplit);
data =
getNextArg(xc_Or_completeCode_Param, options.wxmlCompileConfigSplit);
unsigned long long count = strtoull(&data[0], 0, 10);
for (unsigned long long i = 0; i < count; i++)
{
vector<string> componentList;
string arg1 = getNextArg(xc_Or_completeCode_Param, options.wxmlCompileConfigSplit);
data = getNextArg(xc_Or_completeCode_Param, options.wxmlCompileConfigSplit);
unsigned long long jCount = strtoull(&data[0], 0, 10);
for (unsigned long long i = 0; i < jCount; i++)
{
string componentName = getNextArg(xc_Or_completeCode_Param, options.wxmlCompileConfigSplit);
componentList.push_back(componentName);
auto it = std::find(allComponentList.begin(), allComponentList.end(), componentName);
if (it == allComponentList.end())
{
allComponentList.push_back(componentName);
}
}
auto it = componentListMap.lower_bound(arg1);
if (it == componentListMap.end() || arg1 < it->first)
{
componentListMap.emplace(arg1, componentList);
for (unsigned long long i = 0; i < count; i++) {
vector<string> componentList;
string arg1 = getNextArg(xc_Or_completeCode_Param,
options.wxmlCompileConfigSplit);
data = getNextArg(xc_Or_completeCode_Param,
options.wxmlCompileConfigSplit);
unsigned long long jCount = strtoull(&data[0], 0, 10);
for (unsigned long long i = 0; i < jCount; i++) {
string componentName = getNextArg(xc_Or_completeCode_Param,
options.wxmlCompileConfigSplit);
componentList.push_back(componentName);
auto it = std::find(allComponentList.begin(), allComponentList.end(),
componentName);
if (it == allComponentList.end()) {
allComponentList.push_back(componentName);
}
}
auto it = componentListMap.lower_bound(arg1);
if (it == componentListMap.end() || arg1 < it->first) {
componentListMap.emplace(arg1, componentList);
}
}
componentListMap["ALL"] = allComponentList;
}
}
if (options.lazyload) {
// 懒加载
std::vector<std::string> splitedData;
split(splitedData, options.lazyloadConfig, options.wxmlCompileConfigSplit);
// 处理文件路径
for (int i = 0; i < splitedData.size(); i++) {
string path = splitedData[i];
if (path[0] == '.' && path[1] == '/') {
// 以"./"开头,去掉前两个字符
splitedData[i] = path.substr(2);
if (wxsMap.size())
{
std::string wxs;
for (auto m=wxsMap.begin(); m != wxsMap.end(); m++) {
auto v152 = m->first;
auto v156 = m->second;
std::string v146;
if ( night::compile_ns_no_wrapper(v152, v156, 1, v146, 0) )
{
errMsg = "Error: " + v146 + "\n";
return -2;
}
auto v31 = snprintf(0, 0, WXML::GlassEaselWxs::sWrapper.c_str(),
v146.c_str()) + 1; char *v32 = (char *)operator new[](v31);
snprintf(v32, v31, WXML::GlassEaselWxs::sWrapper.c_str(),
v146.c_str()); wxsMap[v152] = v32; delete[] v32;
}
}
if (options.lazyload) {
// 懒加载
std::vector<std::string> splitedData;
split(splitedData, options.lazyloadConfig,
options.wxmlCompileConfigSplit);
// 处理文件路径
for (int i = 0; i < splitedData.size(); i++) {
string path = splitedData[i];
if (path[0] == '.' && path[1] == '/') {
// 以"./"开头,去掉前两个字符
splitedData[i] = path.substr(2);
}
}
}
int compilerResult = 0;
int compilerResult = 0;
std::map<std::string, std::string> outputContentMap;
map<string, string> outputFuncMap;
map<string, vector<string>> dependencyListMap;
map<string, string> mapData1;
const char off_5403C3[] = {'s', '\0', 'e', '\0'};
std::map<std::string, std::string> outputContentMap;
map<string, string> outputFuncMap;
map<string, vector<string>> dependencyListMap;
map<string, string> mapData1;
const char off_5403C3[] = {'s', '\0', 'e', '\0'};
compilerResult = WXML::Compiler::CompileLazy(
fileContentMap, errMsg, outputContentMap,
outputFuncMap, // map<string, string>
dependencyListMap, // std::map<std::string,std::vector<std::string>>
componentListMap, // componentListMap
splitedData, mapData1,
options.isCut, // isLLA,
options.genfuncname, mark, 10, &off_5403C3[2], off_5403C3, "gg", "e_",
"d_", "p_", "\0", "boxofchocolate", "$gdwx", "f_");
if (outputContentMap.count("__COMMON__") == 0) {
string helperCode;
WXML::Compiler::WXMLHelperCode(helperCode);
string data =
"var __wxAppData=__wxAppData||{};var "
"__wxAppCode__=__wxAppCode__||{};var global=global||{};var "
"__WXML_GLOBAL__="
"__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_"
"init:undefined,total_ops:0};var Component=Comp"
"onent||function(){};var definePlugin=definePlugin||function(){};var "
"requirePlugin=requirePlugin||function(){};"
"var Behavior=Behavior||function(){};var "
"__vd_version_info__=__vd_version_info__||{};var "
"__GWX_GLOBAL__=__GWX_G"
"LOBAL__||{};var __globalThis=(typeof "
"__vd_version_info__!=='undefined'&&typeof "
"__vd_version_info__.globalThis!"
"=='undefined')?__vd_version_info__.globalThis:(typeof "
"window!=='undefined'?window:globalThis);";
data = data + helperCode;
outputContentMap["__COMMON__"] = data;
} else {
string helperCode;
WXML::Compiler::WXMLHelperCode(helperCode);
string commonData =
"var __wxAppData=__wxAppData||{};var "
"__wxAppCode__=__wxAppCode__||{};var global=global||{};var "
"__WXML_GLOBAL__="
"__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_"
"init:undefined,total_ops:0};var Component=Comp"
"onent||function(){};var definePlugin=definePlugin||function(){};var "
"requirePlugin=requirePlugin||function(){};"
"var Behavior=Behavior||function(){};var "
"__vd_version_info__=__vd_version_info__||{};var "
"__GWX_GLOBAL__=__GWX_G"
"LOBAL__||{};var __globalThis=(typeof "
"__vd_version_info__!=='undefined'&&typeof "
"__vd_version_info__.globalThis!"
"=='undefined')?__vd_version_info__.globalThis:(typeof "
"window!=='undefined'?window:globalThis);";
commonData = commonData + helperCode;
commonData = commonData.append(outputContentMap["__COMMON__"]);
compilerResult = WXML::Compiler::CompileLazy(
fileContentMap, errMsg, outputContentMap,
outputFuncMap, // map<string, string>
dependencyListMap, // std::map<std::string,std::vector<std::string>>
componentListMap, // componentListMap
splitedData, mapData1,
options.isCut, // isLLA,
options.genfuncname, mark, 10, &off_5403C3[2], off_5403C3, "gg", "e_",
"d_", "p_", "\0", "boxofchocolate", "$gdwx", "f_");
if (outputContentMap.count("__COMMON__") == 0) {
string helperCode;
WXML::Compiler::WXMLHelperCode(helperCode);
string data =
"var __wxAppData=__wxAppData||{};var "
"__wxAppCode__=__wxAppCode__||{};var global=global||{};var "
"__WXML_GLOBAL__="
"__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_"
"init:undefined,total_ops:0};var Component=Comp"
"onent||function(){};var "
"definePlugin=definePlugin||function(){};var "
"requirePlugin=requirePlugin||function(){};"
"var Behavior=Behavior||function(){};var "
"__vd_version_info__=__vd_version_info__||{};var "
"__GWX_GLOBAL__=__GWX_G"
"LOBAL__||{};var __globalThis=(typeof "
"__vd_version_info__!=='undefined'&&typeof "
"__vd_version_info__.globalThis!"
"=='undefined')?__vd_version_info__.globalThis:(typeof "
"window!=='undefined'?window:globalThis);";
data = data + helperCode;
outputContentMap["__COMMON__"] = data;
} else {
string helperCode;
WXML::Compiler::WXMLHelperCode(helperCode);
string commonData =
"var __wxAppData=__wxAppData||{};var "
"__wxAppCode__=__wxAppCode__||{};var global=global||{};var "
"__WXML_GLOBAL__="
"__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_"
"init:undefined,total_ops:0};var Component=Comp"
"onent||function(){};var "
"definePlugin=definePlugin||function(){};var "
"requirePlugin=requirePlugin||function(){};"
"var Behavior=Behavior||function(){};var "
"__vd_version_info__=__vd_version_info__||{};var "
"__GWX_GLOBAL__=__GWX_G"
"LOBAL__||{};var __globalThis=(typeof "
"__vd_version_info__!=='undefined'&&typeof "
"__vd_version_info__.globalThis!"
"=='undefined')?__vd_version_info__.globalThis:(typeof "
"window!=='undefined'?window:globalThis);";
commonData = commonData + helperCode;
commonData = commonData.append(outputContentMap["__COMMON__"]);
outputContentMap["__COMMON__"] = commonData;
}
outputContentMap["__COMMON__"] = commonData;
}
std::stringstream dep;
dep << ";var __WXML_DEP__=__WXML_DEP__||{};";
// dependencyListMap v121
for (auto j = dependencyListMap.begin(); j != dependencyListMap.end();
j++) {
std::stringstream dep;
dep << ";var __WXML_DEP__=__WXML_DEP__||{};";
// dependencyListMap v121
for (auto j = dependencyListMap.begin(); j != dependencyListMap.end();
j++) {
if (j->second.begin() != j->second.end()) {
dep << "__WXML_DEP__[\"";
dep << j->first;
dep << "\"]=[";
auto list = j->second;
if (j->second.begin() != j->second.end()) {
dep << "__WXML_DEP__[\"";
dep << j->first;
dep << "\"]=[";
auto list = j->second;
for (auto k = list.begin(); k != list.end(); k++) {
dep << "\"";
dep << WXML::Rewrite::ToStringCode(*k);
dep << "\",";
for (auto k = list.begin(); k != list.end(); k++) {
dep << "\"";
dep << WXML::Rewrite::ToStringCode(*k);
dep << "\",";
}
dep << "];";
}
}
std::string v140 = dep.str();
outputContentMap["__COMMON__"].append(v140);
if (!compilerResult) {
v8::Local<v8::Object> funcContent = v8::Object::New(isolate);
for (auto content : outputContentMap) {
funcContent
->Set(isolate->GetCurrentContext(),
String::NewFromUtf8(isolate, content.first.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked(),
String::NewFromUtf8(isolate, content.second.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked())
.Check();
}
v8::Local<v8::Object> funcName = v8::Object::New(isolate);
for (auto func : outputFuncMap) {
funcName
->Set(isolate->GetCurrentContext(),
String::NewFromUtf8(isolate, func.first.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked(),
String::NewFromUtf8(isolate, func.second.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked())
.Check();
}
dep << "];";
// 你可以在这里设置对象的属性和方法
// 创建一个实例
v8::Local<v8::Object> object_instance = v8::Object::New(isolate);
auto _ = object_instance->Set(
isolate->GetCurrentContext(),
String::NewFromUtf8(isolate, "generateFunctionName",
v8::NewStringType::kNormal)
.ToLocalChecked(),
funcName);
_ = object_instance->Set(isolate->GetCurrentContext(),
String::NewFromUtf8(isolate,
"generateFunctionContent",
v8::NewStringType::kNormal)
.ToLocalChecked(),
funcContent);
result = object_instance;
}
return compilerResult;
} else {
// 普通
int compilerResult = 0;
std::map<std::string, std::string> v105;
map<string, vector<string>> componentListMap;
std::string r;
compilerResult =
WXML::Compiler::Compile(fileContentMap, // a2
errMsg, // a3
r, // a4
componentListMap, // a5
v105, // a6
false, // a7
options.genfuncname, // 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_"
result = String::NewFromUtf8(isolate, r.c_str(), NewStringType::kNormal)
.ToLocalChecked();
return compilerResult;
}
std::string v140 = dep.str();
outputContentMap["__COMMON__"].append(v140);
if (!compilerResult) {
v8::Local<v8::Object> funcContent = v8::Object::New(isolate);
for (auto content : outputContentMap) {
funcContent
->Set(isolate->GetCurrentContext(),
String::NewFromUtf8(isolate, content.first.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked(),
String::NewFromUtf8(isolate, content.second.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked())
.Check();
}
v8::Local<v8::Object> funcName = v8::Object::New(isolate);
for (auto func : outputFuncMap) {
funcName
->Set(isolate->GetCurrentContext(),
String::NewFromUtf8(isolate, func.first.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked(),
String::NewFromUtf8(isolate, func.second.c_str(),
v8::NewStringType::kNormal)
.ToLocalChecked())
.Check();
}
// 你可以在这里设置对象的属性和方法
// 创建一个实例
v8::Local<v8::Object> object_instance = v8::Object::New(isolate);
auto _ = object_instance->Set(isolate->GetCurrentContext(),
String::NewFromUtf8(isolate, "generateFunctionName",
v8::NewStringType::kNormal)
.ToLocalChecked(),
funcName);
_ = object_instance->Set(isolate->GetCurrentContext(),
String::NewFromUtf8(isolate,
"generateFunctionContent",
v8::NewStringType::kNormal)
.ToLocalChecked(),
funcContent);
result = object_instance;
}
return compilerResult;
} else {
// 普通
int compilerResult = 0;
std::map<std::string, std::string> v105;
map<string, vector<string>> componentListMap;
std::string r;
compilerResult =
WXML::Compiler::Compile(fileContentMap, // a2
errMsg, // a3
r, // a4
componentListMap, // a5
v105, // a6
false, // a7
options.genfuncname, // 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_"
result = String::NewFromUtf8(isolate, r.c_str(), NewStringType::kNormal)
.ToLocalChecked();
return compilerResult;
} catch (std::string err) {
fprintf(stderr, "err: %s\n", err.c_str());
errMsg = err;
return 1;
}
return 0;
}
@ -280,9 +317,13 @@ void wcc(const FunctionCallbackInfo<Value> &args) {
// Convert the "msg" property to a C++ string and return it.
if (code) {
// error
args.GetReturnValue().Set(
String::NewFromUtf8(isolate, errMsg.c_str(), NewStringType::kNormal)
.ToLocalChecked());
// args.GetReturnValue().Set(
// String::NewFromUtf8(isolate, errMsg.c_str(), NewStringType::kNormal)
// .ToLocalChecked());
isolate->ThrowException(String::NewFromUtf8(isolate,
errMsg.c_str(),
NewStringType::kNormal)
.ToLocalChecked());
} else {
// ok
args.GetReturnValue().Set(result);

View File

@ -1,4 +1,5 @@
#include "../include/night.h"
#include <vector>
namespace night
{
@ -156,6 +157,42 @@ namespace night
throw "not implement";
}
int compile_ns_no_wrapper(
std::string const& a1,
std::string const& a2,
uint a3,
std::string& a4,
bool a5
)
{
const char off_51B9E4[] = { '\0', '%', 'u', '\0' }; // idb
a4 = off_51B9E4;
// a4 = "";
night::NSStream v22(a1, a2, a3);
night::NSGod v8;
night::NSToken v11;
v11.offset_0 = &v8;
v11.offset_4 = &v22;
std::string v13 = a1;
night::NSASTParse v23(v13, &v11, &v8);
v13 = "";
night::NSCompileJs compile;
compile.offset_24 = &v23;
std::vector<std::string> v9;
std::string v10 = compile.compile_once(a4, &v9, a5);
v8.hamlet();
int v5 =0;
if(v10.length())
{
a4 = v10;
v5 = 121;
}
return v5;
}
/**
*
*

View File

@ -1,4 +1,6 @@
#include "../include/night.h"
#include <cstdio>
#include <exception>
namespace night
{
@ -694,14 +696,22 @@ namespace night
int inner_compile_once_i = compile_once_i;
this->offset_28 = a4;
a3 = "";
night::ns_node* v5 = this->offset_24->top_down();
if (a5)
{
std::string ret = v5->debug_no_space();
printf("ast :%s\n", ret.data());
try {
night::ns_node* v5 = this->offset_24->top_down();
if (a5)
{
std::string ret = v5->debug_no_space();
printf("ast :%s\n", ret.data());
}
std::string v9 = this->compile(v5);
a3.assign(v9);
}
catch(const std::exception& err)
{
// printf("%s\n", err.what());
std::string ret(err.what());
return ret;
}
std::string v9 = this->compile(v5);
a3.assign(v9);
return this->offset_0;
}

View File

@ -31,11 +31,11 @@ namespace night
{
if (this->offset_24.length())
{
sprintf(str, "(%d,%d)type[%s] value[%s]", this->offset_48, this->offset_52, this->offset_0, this->offset_60);
sprintf(str, "(%d,%d)type[%s] value[%s]", this->offset_48, this->offset_52, this->offset_0.c_str(), this->offset_60.c_str());
}
else
{
sprintf(str, "type[%s] value[%s]", this->offset_0, this->offset_60);
sprintf(str, "type[%s] value[%s]", this->offset_0.c_str(), this->offset_60.c_str());
}
}
if (
@ -49,22 +49,22 @@ namespace night
{
if (this->offset_24.length())
{
sprintf(str, "(%d,%d)type[%s] value[%s]", this->offset_48, this->offset_52, this->offset_0, this->offset_60);
sprintf(str, "(%d,%d)type[%s] value[%s]", this->offset_48, this->offset_52, this->offset_0.c_str(), this->offset_60.c_str());
}
else
{
sprintf(str, "type[%s] value[%s]", this->offset_0, this->offset_60);
sprintf(str, "type[%s] value[%s]", this->offset_0.c_str(), this->offset_60.c_str());
}
}
if ("var" == this->offset_0)
{
if (this->offset_24.length())
{
sprintf(str, "(%d,%d)type[%s] value[%s] flag[%d]", this->offset_48, this->offset_52, this->offset_0, this->offset_60, this->offset_56);
sprintf(str, "(%d,%d)type[%s] value[%s] flag[%d]", this->offset_48, this->offset_52, this->offset_0.c_str(), this->offset_60.c_str(), this->offset_56);
}
else
{
sprintf(str, "type[%s] value[%s] flag[%d]", this->offset_0, this->offset_60, this->offset_56);
sprintf(str, "type[%s] value[%s] flag[%d]", this->offset_0.c_str(), this->offset_60.c_str(), this->offset_56);
}
}
// debug_no_space - 5

View File

@ -1,4 +1,6 @@
#include "../include/night.h"
#include <exception>
#include <stdexcept>
namespace night
{
@ -128,7 +130,8 @@ namespace night
v12.append(":");
v10 += v12;
v10 += a2;
throw v10;
throw std::runtime_error(v10.c_str());
}
}

View File

@ -320,12 +320,12 @@ namespace night
bool NSToken::tk_is_whitespace(char ch, void *)
{
auto v1 = night::NS_BUILTIN_SPACE.find(ch, 0);
int v1 = night::NS_BUILTIN_SPACE.find(ch, 0);
return v1 != -1;
}
bool NSToken::tk_is_not_line_break(char ch, void *)
{
return ch != 10;
return ch != 10; // \n
}
bool NSToken::tk_is_valid_op_str(char ch, void *t)
{

View File

@ -1,7 +1,9 @@
#include <cstdint>
#include <iostream>
#include <map>
#include <iomanip>
#include <sstream>
#include <string>
std::string EscapeToJsonString(std::string const& a2)
{
@ -48,3 +50,233 @@ std::string DictToJsonString(std::map<std::string, std::string> const& a2)
ret << "}";
return ret.str();
}
int HexDigit(char a1, int a2)
{
int v2; // eax
if ( (uint8_t)(a1 - 48) > 9u )
{
if ( (uint8_t)(a1 - 97) > 5u )
{
v2 = 0;
if ( (uint8_t)(a1 - 65) <= 5u )
v2 = a1 - 55;
}
else
{
v2 = a1 - 87;
}
}
else
{
v2 = a1 - 48;
}
return v2 << a2;
}
int GetUnicodeNum(std::string &a1, int a2)
{
int v3; // ebx
int v4; // ebx
int v5; // ebx
v3 = HexDigit(a1[a2 + 2], 12);
v4 = HexDigit(a1[a2 + 3], 8) + v3;
v5 = HexDigit(a1[a2 + 4], 4) + v4;
return v5 + HexDigit(a1[a2 + 5], 0);
}
void GetUnicode(std::string& a1, unsigned int a2)
{
char v2; // bl
unsigned int v3; // eax
unsigned int v4; // eax
v2 = a2;
if ( a2 > 0x7F )
{
if ( a2 > 0x7FF )
{
if ( a2 > 0xFFFF )
{
a1.push_back((a2 >> 18) | 0xF0);
v4 = (a2 >> 12) & 0x3F | 0xFFFFFF80;
}
else
{
v4 = (a2 >> 12) | 0xFFFFFFE0;
}
a1.push_back(v4);
v3 = (a2 >> 6) & 0x3F | 0xFFFFFF80;
}
else
{
v3 = (a2 >> 6) | 0xFFFFFFC0;
}
a1.push_back(v3);
v2 = a2 & 0x3F | 0x80;
}
a1.push_back(v2);
}
int GetJsonString(std::string &a1, int *a2, std::string& a3)
{
std::ostringstream v17;
int v3 = *a2;
if ( a1[*a2] != '"' )
{
LABEL_41:
int v9 = ~v3;
return v9;
}
std::string v16;
for ( *a2 = v3 + 1; ; ++*a2 )
{
v3 = *a2;
char v12;
int v6;
int v14 = a1.length();
if ( *a2 >= v14 )
return ~v3;
char v5 = a1[v3];
if ( v5 == '"' )
break;
if ( v5 == '\\' )
{
if ( v3 + 1 >= v14 )
{
v6 = -2;
LABEL_31:
return v6 - v3;
}
char v7 = a1[v3 + 1];
if ( v7 == 'n' )
{
v12 = 10;
goto LABEL_26;
}
if ( v7 <= 'n' )
{
if ( v7 == 'b' )
{
v12 = 8;
goto LABEL_26;
}
if ( v7 <= 'b' )
{
if ( v7 != '/' && v7 != '\\' && v7 != '"' )
goto LABEL_41;
v17 << a1[v3 + 1];
goto LABEL_27;
}
if ( v7 != 'f' )
goto LABEL_41;
v12 = 12;
LABEL_26:
v17 << v12;
LABEL_27:
++*a2;
continue;
}
if ( v7 == 't' )
{
int v12 = 9;
goto LABEL_26;
}
if ( v7 != 'u' )
{
if ( v7 != 'r' )
goto LABEL_41;
int v12 = 13;
goto LABEL_26;
}
int UnicodeNum = GetUnicodeNum(a1, v3);
if ( (unsigned int)(UnicodeNum - 55296) > 0x3FF )
{
*a2 = v3 + 5;
}
else
{
if ( v3 + 11 >= v14 || a1[v3 + 6] != '\\' )
{
v6 = -7;
goto LABEL_31;
}
if ( a1[v3 + 7] != 'u' )
{
v6 = -8;
goto LABEL_31;
}
int v10 = GetUnicodeNum(a1, v3 + 6);
*a2 = v3 + 11;
UnicodeNum = (v10 & 0x3FF | (UnicodeNum << 10) & 0xFFC00) + 0x10000;
}
GetUnicode(v16, UnicodeNum);
v17 << v16;
}
else
{
v17 << a1[v3];
}
}
*a2 = v3 + 1;
a3 = v17.str();
return 0;
}
int GetJsonDict(std::string &a1, std::map<std::string, std::string>& a2)
{
if ( a1[0] != '{' )
return -1;
int v10 = 1;
while ( 1 )
{
int v3 = a1.length();
if ( v10 >= v3 )
return 0;
std::string v11;
std::string v13;
while ( v10 < v3 )
{
if ( a1[v10] == '"' )
goto LABEL_9;
++v10;
}
if ( v10 == v3 )
return 0;
LABEL_9:
int JsonString = GetJsonString(a1, &v10, v11);
if ( JsonString )
return JsonString;
int v5 = a1.length();
while ( v10 < v5 )
{
if ( a1[v10] == ':' )
goto LABEL_18;
++v10;
}
if ( v10 == v5 )
{
LABEL_26:
return 0;
}
LABEL_18:
while ( v10 < v5 )
{
if (a1[v10] == '"' )
goto LABEL_20;
++v10;
}
if ( v10 == v5 )
return 0;
LABEL_20:
JsonString = GetJsonString(a1, &v10, v13);
if ( JsonString )
{
LABEL_27:
return JsonString;
}
a2[v11] = v13;
int v7 = a1.length();
while ( v10 < v7 && a1[v10] != ',' )
++v10;
}
}

View File

@ -1,4 +1,6 @@
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
@ -7,6 +9,7 @@
#include "include/string_utils.h"
#include "include/wxml.h"
#include "include/json.h"
#include "include/night.h"
using namespace std;
@ -64,6 +67,9 @@ int main(int argc, const char **argv)
bool version = false;
bool isLLA = false;
bool hasLL = false;
bool isWxs = false;
bool isGDC = false;
bool isWxsEnv = false;
string xc_Or_completeCode_Param;
string outputFileName;
vector<string> fileList;
@ -218,17 +224,18 @@ int main(int argc, const char **argv)
mapData1["life_cycle_callback_content"] = callbackData;
}
}
else if (!param.compare("--pm"))
{
// 参数是--pm
if (i + 1 < paramList.size())
{
mapData1["plain_text_marker"] = paramList[i + 1];
continue;
}
}
else
{
if (!param.compare("--pm"))
{
// 参数是--pm
if (i + 1 < paramList.size())
{
mapData1["plain_text_marker"] = paramList[i + 1];
continue;
}
}
if (param[1] == 'l' && param[2] == 'l')
{
// -ll
@ -259,6 +266,19 @@ int main(int argc, const char **argv)
i++;
hasLL = true;
}
else if (!param.compare("--wxs"))
{
isWxs = true;
}
else if (!param.compare("--gdc"))
{
isGDC = true;
}
else if (!param.compare("--wxs-env"))
{
isWxsEnv = true;
}
}
}
@ -280,6 +300,74 @@ int main(int argc, const char **argv)
fclose(f);
}
if (isWxs)
{
std::string wxs;
if (fileList.size() == 0)
{
fprintf(stderr, "WXS file is needed\n");
return -1;
}
if ( readFile(fileList[0].c_str(), wxs))
{
fprintf(stderr, "Failed to read input from %s\n", fileList[0].c_str());
return -1;
}
std::map<std::string, std::string> cfg;
int ret = GetJsonDict(wxs, cfg);
if (ret)
{
fprintf(stderr, "Failed to read JSON at position %d (%c)", ret, wxs[ret]);
return -2;
}
for (auto m=cfg.begin(); m != cfg.end(); m++) {
auto v152 = m->first;
auto v156 = m->second;
std::string v146;
if ( night::compile_ns_no_wrapper(v152, v156, 1, v146, 0) )
{
fprintf(stderr, "Error in file %s: %s\n", v152.c_str(), v146.c_str());
return -2;
}
auto v31 = snprintf(0, 0, WXML::GlassEaselWxs::sWrapper.c_str(), v146.c_str()) + 1;
char *v32 = (char *)operator new[](v31);
snprintf(v32, v31, WXML::GlassEaselWxs::sWrapper.c_str(), v146.c_str());
cfg[v152] = v32;
delete[] v32;
}
std::string v136 = DictToJsonString(cfg);
FILE *f = stdout;
if (!outputFileName.empty())
f = fopen(outputFileName.c_str(), "w");
fprintf(f, "%s\n", v136.data());
if (f != stdout)
return fclose(f);
return 0;
}
if (isGDC)
{
std::string v136 = WXML::GlassEaselWxs::sGenFuncDeepCopy.c_str();
FILE *f = stdout;
if (!outputFileName.empty())
f = fopen(outputFileName.c_str(), "w");
fprintf(f, "%s\n", v136.data());
if (f != stdout)
return fclose(f);
return 0;
}
if (isWxsEnv)
{
std::string v136 = WXML::GlassEaselWxs::sWxsEnvInit.c_str();
FILE *f = stdout;
if (!outputFileName.empty())
f = fopen(outputFileName.c_str(), "w");
fprintf(f, "%s\n", v136.data());
if (f != stdout)
return fclose(f);
return 0;
}
// main - 30
if (fileList.empty())
{
@ -498,7 +586,8 @@ int main(int argc, const char **argv)
f = fopen(outputFileName.data(), "w");
}
fprintf(f, "%s\n", v113.data());
fclose(f);
if (f != stdout)
fclose(f);
}
}
// main - 55

919
test/main.cpp Normal file
View File

@ -0,0 +1,919 @@
//----- (00500ED0) --------------------------------------------------------
int main(int argc, const char **argv, const char **envp)
{
int v3; // ebx
char **v4; // edi
int v5; // eax
bool v6; // dl
int v7; // edi
int v8; // ebx
void **v9; // eax
_BYTE *v10; // edx
char v11; // al
char v12; // al
void **v13; // eax
void **v14; // eax
bool v15; // si
_BYTE *v16; // edx
char *v17; // eax
_DWORD *v18; // eax
const char **v19; // ecx
_BYTE *v20; // eax
void **v21; // esi
_DWORD *v22; // eax
char v23; // dl
void **v24; // ebx
char *v25; // ecx
int v26; // edx
int v27; // edx
FILE *v28; // ebx
int JsonDict; // eax
char **m; // ebx
int v31; // edi
char *v32; // esi
_DWORD *v33; // eax
const char **v34; // edx
unsigned int v35; // ebx
_DWORD *v36; // eax
_DWORD *v37; // eax
int v38; // esi
int v39; // edi
int v40; // esi
int *inserted; // ebx
char *v42; // eax
void **v43; // edi
char *v44; // esi
int insert_hint_unique_pos; // eax
_DWORD *v46; // edx
int v47; // edx
_DWORD *v48; // eax
int v49; // edx
FILE *v50; // ebx
int v51; // edi
void **j; // ebx
int *v53; // eax
int *v54; // esi
_DWORD *v55; // ebx
_DWORD *v56; // eax
_DWORD *v57; // eax
void **v58; // ecx
_DWORD *v59; // eax
int *k; // edi
std::ostream::sentry *v61; // esi
std::ostream::sentry *v62; // eax
int *v63; // ebx
std::ostream::sentry *v64; // eax
_DWORD *v65; // eax
FILE *v66; // ebx
int v67; // edx
int v68; // edx
int v69; // edx
void (__cdecl *v71)(void *); // [esp-6Ch] [ebp-414h]
char v72; // [esp+6h] [ebp-3A2h]
char v73; // [esp+7h] [ebp-3A1h]
char v74; // [esp+8h] [ebp-3A0h]
char v75; // [esp+9h] [ebp-39Fh]
char v76; // [esp+Ah] [ebp-39Eh]
char v77; // [esp+Bh] [ebp-39Dh]
const char **v78; // [esp+Ch] [ebp-39Ch]
char **v79; // [esp+Ch] [ebp-39Ch]
int v80; // [esp+10h] [ebp-398h]
int v81; // [esp+10h] [ebp-398h]
char v82; // [esp+14h] [ebp-394h]
int *v83; // [esp+14h] [ebp-394h]
int v84; // [esp+18h] [ebp-390h]
std::ostream::sentry *i; // [esp+18h] [ebp-390h]
std::ostream::sentry *v86; // [esp+18h] [ebp-390h]
bool excb; // [esp+1Ch] [ebp-38Ch]
int exc; // [esp+1Ch] [ebp-38Ch]
int exca; // [esp+1Ch] [ebp-38Ch]
char *FileName; // [esp+28h] [ebp-380h] BYREF
const char **v91; // [esp+2Ch] [ebp-37Ch] BYREF
void **v92; // [esp+30h] [ebp-378h]
int v93; // [esp+34h] [ebp-374h]
void **v94; // [esp+38h] [ebp-370h] BYREF
int v95; // [esp+3Ch] [ebp-36Ch]
int v96; // [esp+40h] [ebp-368h]
void **v97; // [esp+44h] [ebp-364h] BYREF
int v98; // [esp+48h] [ebp-360h]
int v99; // [esp+4Ch] [ebp-35Ch]
char *v100; // [esp+50h] [ebp-358h] BYREF
int v101; // [esp+54h] [ebp-354h]
char v102; // [esp+58h] [ebp-350h] BYREF
char *v103; // [esp+68h] [ebp-340h] BYREF
int v104; // [esp+6Ch] [ebp-33Ch]
char v105; // [esp+70h] [ebp-338h] BYREF
int v106; // [esp+80h] [ebp-328h] BYREF
int v107[5]; // [esp+84h] [ebp-324h] BYREF
int v108[6]; // [esp+98h] [ebp-310h] BYREF
void *v109[6]; // [esp+B0h] [ebp-2F8h] BYREF
int v110; // [esp+C8h] [ebp-2E0h] BYREF
int v111[5]; // [esp+CCh] [ebp-2DCh] BYREF
int v112; // [esp+E0h] [ebp-2C8h] BYREF
int v113[5]; // [esp+E4h] [ebp-2C4h] BYREF
int v114; // [esp+F8h] [ebp-2B0h] BYREF
int v115[5]; // [esp+FCh] [ebp-2ACh] BYREF
int v116[2]; // [esp+110h] [ebp-298h] BYREF
char v117; // [esp+118h] [ebp-290h] BYREF
void *v118[2]; // [esp+128h] [ebp-280h] BYREF
char v119; // [esp+130h] [ebp-278h] BYREF
int v120; // [esp+140h] [ebp-268h] BYREF
int v121[5]; // [esp+144h] [ebp-264h] BYREF
int v122; // [esp+158h] [ebp-250h] BYREF
int v123[5]; // [esp+15Ch] [ebp-24Ch] BYREF
int v124; // [esp+170h] [ebp-238h] BYREF
int v125[5]; // [esp+174h] [ebp-234h] BYREF
int v126; // [esp+188h] [ebp-220h] BYREF
int v127[5]; // [esp+18Ch] [ebp-21Ch] BYREF
int v128[6]; // [esp+1A0h] [ebp-208h] BYREF
int v129[6]; // [esp+1B8h] [ebp-1F0h] BYREF
int v130[6]; // [esp+1D0h] [ebp-1D8h] BYREF
int v131[6]; // [esp+1E8h] [ebp-1C0h] BYREF
int v132[6]; // [esp+200h] [ebp-1A8h] BYREF
int v133; // [esp+218h] [ebp-190h] BYREF
int v134; // [esp+21Ch] [ebp-18Ch]
int v135; // [esp+220h] [ebp-188h]
int v136; // [esp+230h] [ebp-178h] BYREF
int v137; // [esp+234h] [ebp-174h]
int v138; // [esp+238h] [ebp-170h]
char *String; // [esp+248h] [ebp-160h] BYREF
int v140; // [esp+24Ch] [ebp-15Ch]
int v141; // [esp+250h] [ebp-158h] BYREF
int v142; // [esp+260h] [ebp-148h] BYREF
char *v143[5]; // [esp+264h] [ebp-144h] BYREF
char *v144; // [esp+278h] [ebp-130h] BYREF
int v145[5]; // [esp+27Ch] [ebp-12Ch] BYREF
int v146; // [esp+290h] [ebp-118h] BYREF
int v147; // [esp+294h] [ebp-114h]
char v148[16]; // [esp+298h] [ebp-110h] BYREF
char *Format; // [esp+2A8h] [ebp-100h] BYREF
int v150; // [esp+2ACh] [ebp-FCh]
int v151[4]; // [esp+2B0h] [ebp-F8h] BYREF
int v152; // [esp+2C0h] [ebp-E8h] BYREF
int v153; // [esp+2C4h] [ebp-E4h]
char v154[4]; // [esp+2C8h] [ebp-E0h] BYREF
int v155[3]; // [esp+2CCh] [ebp-DCh] BYREF
char v156[192]; // [esp+2D8h] [ebp-D0h] BYREF
int *p_argc; // [esp+398h] [ebp-10h]
p_argc = &argc;
v80 = argc;
v78 = argv;
__main();
FileName = 0;
v100 = &v102;
v91 = 0;
v92 = 0;
v93 = 0;
v101 = 0;
v102 = 0;
v103 = &v105;
v104 = 0;
v105 = 0;
v94 = 0;
v95 = 0;
v96 = 0;
v97 = 0;
v98 = 0;
v99 = 0;
std::_Rb_tree_header::_Rb_tree_header(v107);
std::string::basic_string((void **)v108, "$gwx");
std::string::basic_string(v109, " ");
v3 = 1;
std::_Rb_tree_header::_Rb_tree_header(v111);
while ( v3 < v80 )
{
std::string::basic_string((void **)&v152, "--config-path");
v4 = (char **)&v78[v3];
v5 = std::string::compare((int)&v152, *v4);
v6 = 0;
if ( !v5 )
v6 = v3 + 1 < v80;
excb = v6;
std::string::_M_dispose((void **)&v152);
if ( excb )
{
std::string::operator=((unsigned int *)&v103, (char *)v78[++v3]);
}
else
{
std::string::basic_string((void **)&v152, *v4);
std::vector<std::string>::emplace_back<std::string>(&v94, &v152);
std::string::_M_dispose((void **)&v152);
}
++v3;
}
if ( v104 )
{
v147 = 0;
v146 = (int)v148;
v148[0] = 0;
ReadFile(v103, (unsigned int *)&v146);
while ( v147 )
{
std::string::basic_string((void **)&Format, "\n");
GetNextArg(&v152, &v146, (int)&Format);
std::vector<std::string>::emplace_back<std::string>(&v94, &v152);
std::string::_M_dispose((void **)&v152);
std::string::_M_dispose((void **)&Format);
}
std::string::_M_dispose((void **)&v146);
}
v7 = 0;
exc = 0;
v72 = 0;
v73 = 0;
v74 = 0;
v75 = 0;
v84 = -1431655765 * ((v95 - (int)v94) >> 3);
v76 = 0;
v82 = 0;
v77 = 0;
while ( v7 < v84 )
{
v8 = 6 * v7;
v9 = &v94[6 * v7];
v10 = *v9;
if ( *(_BYTE *)*v9 != 45 )
{
std::vector<std::string>::push_back(&v91, (int)v9);
goto LABEL_90;
}
v11 = v10[1];
switch ( v11 )
{
case 'd':
v12 = v10[2];
if ( !v12 )
{
exc |= 2u;
goto LABEL_90;
}
if ( v12 == 115 )
{
exc |= 4u;
goto LABEL_90;
}
break;
case 's':
if ( v10[2] == 116 )
{
exc |= 8u;
goto LABEL_90;
}
if ( v7 + 1 < v84 )
{
v77 = 1;
std::vector<std::string>::push_back(&v91, (int)&v94[v8 + 6]);
goto LABEL_90;
}
break;
case 'v':
if ( v10[2] == 98 )
exc |= 0x10u;
else
v76 = 1;
goto LABEL_90;
case 'x':
if ( v10[2] == 99 && v7 + 1 < v84 )
{
v13 = &v94[v8 + 6];
v82 = 1;
if ( *(_BYTE *)*v13 != 45 )
{
std::string::_M_assign((int)&v100, (int)v13);
v82 = 1;
++v7;
}
goto LABEL_90;
}
break;
case 'c':
if ( v10[2] == 99 && v7 + 1 < v84 )
{
v14 = &v94[v8 + 6];
v82 = 0;
if ( *(_BYTE *)*v14 != 45 )
{
std::string::_M_assign((int)&v100, (int)v14);
v82 = 0;
++v7;
}
goto LABEL_90;
}
break;
case 'o':
if ( v7 + 1 < v84 )
{
++v7;
FileName = (char *)v94[v8 + 6];
goto LABEL_90;
}
break;
case 'g':
if ( v10[2] == 110 && v7 + 1 < v84 )
{
std::string::_M_assign((int)v108, (int)&v94[v8 + 6]);
++v7;
goto LABEL_90;
}
break;
case 'p':
exc |= 0x20u;
goto LABEL_90;
case 't':
exc |= 1u;
goto LABEL_90;
case 'i':
exc |= 0x40u;
goto LABEL_90;
}
std::string::basic_string((void **)&v152, "--split");
v15 = std::operator==<char>((int)&v94[v8], (int)&v152);
if ( v15 )
v15 = v7 + 1 < v84;
std::string::_M_dispose((void **)&v152);
if ( v15 )
{
++v7;
std::string::_M_assign((int)v109, (int)&v94[v8 + 6]);
}
else
{
v16 = v94[6 * v7];
if ( v16[1] == 99 && v16[2] == 98 )
{
++v7;
LOBYTE(v151[0]) = 0;
Format = (char *)v151;
v17 = (char *)v94[v8 + 6];
exc |= 0x80u;
v150 = 0;
ReadFile(v17, (unsigned int *)&Format);
if ( v150 )
{
std::string::basic_string((void **)&v152, "life_cycle_callback_content");
v18 = std::map<std::string,std::string>::operator[](&v110, &v152);
std::string::_M_assign((int)v18, (int)&Format);
std::string::_M_dispose((void **)&v152);
}
std::string::_M_dispose((void **)&Format);
}
else if ( !std::string::compare((int)&v94[v8], "--pm") && v7 + 1 < v84 )
{
v21 = &v94[v8 + 6];
std::string::basic_string((void **)&v152, "plain_text_marker");
v22 = std::map<std::string,std::string>::operator[](&v110, &v152);
std::string::_M_assign((int)v22, (int)v21);
std::string::_M_dispose((void **)&v152);
++v7;
}
else
{
v19 = (const char **)&v94[v8];
v20 = v94[v8];
if ( v20[1] == 108/*l*/ && v20[2] == 108/*l*/ )
{
v23 = v20[3];
if ( v23 != 119 )
{
if ( v23 != 97 )
{
fprintf(&__iob[2], "Error: expected -llw or -lla, but got %s", *v19);
exca = -1;
goto LABEL_177;
}
v15 = 1;
}
if ( !std::string::compare((int)v109, " ") )
std::string::basic_string((void **)&v152, ",");
else
std::string::basic_string(&v152, (int)v109);
++v7;
Split((int)&v133, (int *)&v94[v8 + 6], (int)&v152);
v24 = (void **)v133;
v25 = (char *)v97;
v133 = 0;
v26 = v98;
v97 = v24;
Format = v25;
v98 = v134;
v151[0] = v99;
v150 = v26;
v99 = v135;
v134 = 0;
v135 = 0;
std::vector<std::string>::~vector((void ***)&Format, v26);
std::vector<std::string>::~vector((void ***)&v133, v27);
std::string::_M_dispose((void **)&v152);
v75 = 1;
v82 = v15;
}
else if ( !std::string::compare((int)v19, "--wxs") )
{
v74 = 1;
}
else if ( !std::string::compare((int)&v94[v8], "--gdc") )
{
v73 = 1;
}
else if ( !std::string::compare((int)&v94[v8], "--wxs-env") )
{
v72 = 1;
}
}
}
LABEL_90:
++v7;
}
// version
if ( v76 )
{
std::string::basic_string((void **)&v152, "global");
WXML::Compiler::GetVersionInfo((int)&Format, &v152);
std::string::_M_dispose((void **)&v152);
if ( FileName && *FileName )
v28 = fopen(FileName, "w");
else
v28 = &__iob[1];
fprintf(v28, "%s\n", Format);
fclose(v28);
std::string::_M_dispose((void **)&Format);
}
// not wxs
if ( !v74 )
{
v34 = (const char **)&WXML::GlassEaselWxs::sGenFuncDeepCopy;
// not gdc
if ( !v73 )
{
// not wxs env
if ( !v72 )
{
// empty
if ( v91 == (const char **)v92 )
{
exca = Usage(v80, v78);
}
else
{
v35 = 0;
std::_Rb_tree_header::_Rb_tree_header(v113);
std::_Rb_tree_header::_Rb_tree_header(v115);
if ( v77 )
{
v152 = (int)v154;
v153 = 0;
v154[0] = 0;
ReadFile(0, (unsigned int *)&v152);
v36 = std::map<std::string,std::string>::operator[](&v112, (int)v91);
std::string::_M_assign((int)v36, (int)&v152);
std::string::_M_dispose((void **)&v152);
}
else
{
while ( v35 < -1431655765 * (((char *)v92 - (char *)v91) >> 3) )
{
v154[0] = 0;
v152 = (int)v154;
v153 = 0;
ReadFile((char *)v91[6 * v35], (unsigned int *)&v152);
v37 = std::map<std::string,std::string>::operator[](&v112, (int)&v91[6 * v35]);
std::string::_M_assign((int)v37, (int)&v152);
++v35;
std::string::_M_dispose((void **)&v152);
}
}
if ( v101 )
{
GetNextArg(&String, (int *)&v100, (int)v109);
v81 = strtoull(String, 0, 10);
std::string::_M_dispose((void **)&String);
v136 = 0;
v137 = 0;
v138 = 0;
for ( i = 0; (int)i < v81; i = (std::ostream::sentry *)((char *)i + 1) )
{
v150 = 0;
Format = (char *)v151;
LOBYTE(v151[0]) = 0;
String = 0;
v140 = 0;
v141 = 0;
GetNextArg(&v142, (int *)&v100, (int)v109);
std::string::operator=(&Format, &v142);
std::string::_M_dispose((void **)&v142);
std::__find_if<__gnu_cxx::__normal_iterator<std::string *,std::vector<std::string>>,__gnu_cxx::__ops::_Iter_equals_val<std::string const>>(
(int)v91,
(int)v92,
(int)&Format);
GetNextArg(&v144, (int *)&v100, (int)v109);
v38 = 0;
v79 = (char **)strtoull(v144, 0, 10);
std::string::_M_dispose((void **)&v144);
while ( v38 < (int)v79 )
{
v153 = 0;
v152 = (int)v154;
v154[0] = 0;
GetNextArg(&v146, (int *)&v100, (int)v109);
std::string::operator=(&v152, &v146);
std::string::_M_dispose((void **)&v146);
std::vector<std::string>::push_back(&String, (int)&v152);
v39 = v137;
if ( v39 == std::__find_if<__gnu_cxx::__normal_iterator<std::string *,std::vector<std::string>>,__gnu_cxx::__ops::_Iter_equals_val<std::string const>>(
v136,
v137,
(int)&v152) )
std::vector<std::string>::push_back(&v136, (int)&v152);
++v38;
std::string::_M_dispose((void **)&v152);
}
v40 = v115[1];
inserted = v115;
while ( v40 )
{
if ( (unsigned __int8)std::operator<<char>(v40 + 16, (int)&Format) )
{
v40 = *(_DWORD *)(v40 + 12);
}
else
{
inserted = (int *)v40;
v40 = *(_DWORD *)(v40 + 8);
}
}
if ( inserted == v115 || (unsigned __int8)std::operator<<char>((int)&Format, (int)(inserted + 4)) )
{
v42 = (char *)operator new((struct type_info *)0x34, v71);
v43 = (void **)(v42 + 16);
v44 = v42;
std::string::basic_string((_DWORD *)v42 + 4, (int)&Format);
*((_DWORD *)v44 + 10) = 0;
*((_DWORD *)v44 + 11) = 0;
*((_DWORD *)v44 + 12) = 0;
insert_hint_unique_pos = std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::_M_get_insert_hint_unique_pos(
&v114,
inserted,
(int)v43);
inserted = (int *)insert_hint_unique_pos;
if ( v46 )
{
inserted = std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::_M_insert_node(
&v114,
insert_hint_unique_pos,
v46,
v44);
}
else
{
std::vector<std::string>::~vector((void ***)v44 + 10, 0);
std::string::_M_dispose(v43);
operator delete(v44);
}
}
std::vector<std::string>::operator=((int)(inserted + 10), (int *)&String);
std::vector<std::string>::~vector((void ***)&String, v47);
std::string::_M_dispose((void **)&Format);
}
std::string::basic_string((void **)&v152, "ALL");
v48 = std::map<std::string,std::vector<std::string>>::operator[](&v114, &v152);
std::vector<std::string>::operator=((int)v48, &v136);
std::string::_M_dispose((void **)&v152);
std::vector<std::string>::~vector((void ***)&v136, v49);
}
v116[1] = 0;
v116[0] = (int)&v117;
v117 = 0;
v118[0] = &v119;
v118[1] = 0;
v119 = 0;
std::_Rb_tree_header::_Rb_tree_header(v121);
if ( v75 )
{
v51 = v98;
for ( j = v97; (void **)v51 != j; j += 6 )
{
if ( *(_BYTE *)*j == 46 && *((_BYTE *)*j + 1) == 47 )
{
std::string::substr((void **)&v152, j, 2u, 0xFFFFFFFF);
std::string::operator=(j, &v152);
std::string::_M_dispose((void **)&v152);
}
}
std::_Rb_tree_header::_Rb_tree_header(v123);
std::_Rb_tree_header::_Rb_tree_header(v125);
std::_Rb_tree_header::_Rb_tree_header(v127);
std::string::basic_string((void **)&v152, "l_");
std::string::basic_string((void **)&Format, "f_");
std::string::basic_string((void **)&v146, "$gdwx");
std::string::basic_string((void **)&v144, "boxofchocolate");
std::string::basic_string((void **)&v142, (char *)&byte_5173B0);
std::string::basic_string((void **)&String, "p_");
std::string::basic_string((void **)&v136, "d_");
std::string::basic_string((void **)&v133, "e_");
std::string::basic_string((void **)v132, "gg");
std::string::basic_string((void **)v131, (char *)&off_5174F9);
std::string::basic_string((void **)v130, (_BYTE *)&off_5174F9 + 2);
std::string::basic_string((void **)v129, (char *)&byte_5173B0);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::_Rb_tree(
v128,
(int)&v114);
exca = WXML::Compiler::CompileLazy(
(std::_Rb_tree_header *)&v112,
(unsigned int *)v116,
&v120,
&v106,
&v122,
(int)&v124,
(int)v128,
(std::_Rb_tree_header *)&v97,
0,
v129,
(int)&v126,
&v110,
v82,
(int)v108,
exc,
10,
v130,
v131,
v132,
&v133,
&v136,
(int *)&String,
(int)&v142,
(int)&v144,
(int)&v146,
(int *)&Format);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::~_Rb_tree((int)v128);
std::string::_M_dispose((void **)v129);
std::string::_M_dispose((void **)v130);
std::string::_M_dispose((void **)v131);
std::string::_M_dispose((void **)v132);
std::string::_M_dispose((void **)&v133);
std::string::_M_dispose((void **)&v136);
std::string::_M_dispose((void **)&String);
std::string::_M_dispose((void **)&v142);
std::string::_M_dispose((void **)&v144);
std::string::_M_dispose((void **)&v146);
std::string::_M_dispose((void **)&Format);
std::string::_M_dispose((void **)&v152);
std::string::basic_string((void **)&Format, "__COMMON__");
v53 = (int *)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>>>::_M_lower_bound(
v121[1],
(int)v121,
(int)&Format);
v54 = v53;
if ( v53 != v121 && (unsigned __int8)std::operator<<char>((int)&Format, (int)(v53 + 4)) )
v54 = v121;
std::string::_M_dispose((void **)&Format);
if ( v54 == v121 )
{
WXML::Compiler::WXMLHelperCode[abi:cxx11]((void **)&Format);
std::string::basic_string(
(void **)&v146,
"var __wxAppData=__wxAppData||{};var __wxAppCode__=__wxAppCode__||{};var global=global||{};var __WXML_GLO"
"BAL__=__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0};var Co"
"mponent=Component||function(){};var definePlugin=definePlugin||function(){};var requirePlugin=requirePlu"
"gin||function(){};var Behavior=Behavior||function(){};var __vd_version_info__=__vd_version_info__||{};va"
"r __GWX_GLOBAL__=__GWX_GLOBAL__||{};var __globalThis=(typeof __vd_version_info__!=='undefined'&&typeof _"
"_vd_version_info__.globalThis!=='undefined')?__vd_version_info__.globalThis:(typeof window!=='undefined'"
"?window:globalThis);");
std::operator+<char>(&v152, &v146, (unsigned int *)&Format);
std::string::basic_string((void **)&v144, "__COMMON__");
v59 = std::map<std::string,std::string>::operator[](&v120, &v144);
std::string::operator=(v59, &v152);
std::string::_M_dispose((void **)&v144);
std::string::_M_dispose((void **)&v152);
v58 = (void **)&v146;
}
else
{
std::string::basic_string((void **)&Format, "__COMMON__");
v55 = std::map<std::string,std::string>::operator[](&v120, &Format);
WXML::Compiler::WXMLHelperCode[abi:cxx11]((void **)&v144);
std::string::basic_string(
(void **)&v142,
"var __wxAppData=__wxAppData||{};var __wxAppCode__=__wxAppCode__||{};var global=global||{};var __WXML_GLO"
"BAL__=__WXML_GLOBAL__||{entrys:{},defines:{},modules:{},ops:[],wxs_nf_init:undefined,total_ops:0};var Co"
"mponent=Component||function(){};var definePlugin=definePlugin||function(){};var requirePlugin=requirePlu"
"gin||function(){};var Behavior=Behavior||function(){};var __vd_version_info__=__vd_version_info__||{};va"
"r __GWX_GLOBAL__=__GWX_GLOBAL__||{};var __globalThis=(typeof __vd_version_info__!=='undefined'&&typeof _"
"_vd_version_info__.globalThis!=='undefined')?__vd_version_info__.globalThis:(typeof window!=='undefined'"
"?window:globalThis);");
std::operator+<char>(&v146, &v142, (unsigned int *)&v144);
v56 = std::string::append(&v146, (int)v55);
std::string::basic_string(&v152, v56);
std::string::basic_string((void **)&String, "__COMMON__");
v57 = std::map<std::string,std::string>::operator[](&v120, &String);
std::string::operator=(v57, &v152);
std::string::_M_dispose((void **)&String);
std::string::_M_dispose((void **)&v152);
std::string::_M_dispose((void **)&v146);
std::string::_M_dispose((void **)&v142);
v58 = (void **)&v144;
}
std::string::_M_dispose(v58);
std::string::_M_dispose((void **)&Format);
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::basic_stringstream((int)&v152);
std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v154, ";var __WXML_DEP__=__WXML_DEP__||{};");
for ( k = (int *)v123[2]; k != v123; k = (int *)std::_Rb_tree_increment((int)k) )
{
if ( k[11] != k[10] )
{
v61 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v154, "__WXML_DEP__[\"");
WXML::Rewrite::ToStringCode((int)&Format, k + 4);
v62 = std::operator<<<char>(v61, (int *)&Format);
std::operator<<<std::char_traits<char>>(v62, "\"]=[");
std::string::_M_dispose((void **)&Format);
v63 = (int *)k[10];
v83 = (int *)k[11];
while ( v83 != v63 )
{
v86 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v154, "\"");
WXML::Rewrite::ToStringCode((int)&Format, v63);
v64 = std::operator<<<char>(v86, (int *)&Format);
std::operator<<<std::char_traits<char>>(v64, "\",");
v63 += 6;
std::string::_M_dispose((void **)&Format);
}
std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v154, "];");
}
}
std::stringbuf::str((int)&Format, v155);
std::string::basic_string((void **)&v146, "__COMMON__");
v65 = std::map<std::string,std::string>::operator[](&v120, &v146);
std::string::operator+=(v65, (int)&Format);
std::string::_M_dispose((void **)&v146);
std::string::_M_dispose((void **)&Format);
if ( exca )
{
fprintf(&__iob[2], "Error %d: %s\n", exca, (const char *)v116[0]);
}
else
{
if ( FileName && *FileName )
v66 = fopen(FileName, "w");
else
v66 = &__iob[1];
DictToJsonString((int)&v144, (int)&v120);
DictToJsonString((int)&v146, (int)&v106);
std::string::basic_string(
(void **)&Format,
" {\"generateFunctionContent\":%s,\"generateFunctionName\":%s} ");
fprintf(v66, Format, v144, v146);
fclose(v66);
std::string::_M_dispose((void **)&Format);
std::string::_M_dispose((void **)&v146);
std::string::_M_dispose((void **)&v144);
}
std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::~basic_stringstream((int)&v152);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::~_Rb_tree((int)&v126);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::~_Rb_tree((int)&v124);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::~_Rb_tree((int)&v122);
}
else
{
std::string::basic_string((void **)&v152, "l_");
std::string::basic_string((void **)&Format, "f_");
std::string::basic_string((void **)&v146, "$gdwx");
std::string::basic_string((void **)&v144, "boxofchocolate");
std::string::basic_string((void **)&v142, (char *)&byte_5173B0);
std::string::basic_string((void **)&String, "p_");
std::string::basic_string((void **)&v136, "d_");
std::string::basic_string((void **)&v133, "e_");
std::string::basic_string((void **)v132, "gg");
std::string::basic_string((void **)v131, (char *)&off_5174F9);
std::string::basic_string((void **)v130, (_BYTE *)&off_5174F9 + 2);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::_Rb_tree(
v129,
(int)&v114);
exca = WXML::Compiler::Compile(
&v112,
(unsigned int *)v116,
v118,
v129,
&v110,
v82,
v108,
exc,
10,
v130,
v131,
v132,
&v133,
&v136,
(int *)&String,
(int)&v142,
(int)&v144,
(int)&v146,
(int *)&Format);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::~_Rb_tree((int)v129);
std::string::_M_dispose((void **)v130);
std::string::_M_dispose((void **)v131);
std::string::_M_dispose((void **)v132);
std::string::_M_dispose((void **)&v133);
std::string::_M_dispose((void **)&v136);
std::string::_M_dispose((void **)&String);
std::string::_M_dispose((void **)&v142);
std::string::_M_dispose((void **)&v144);
std::string::_M_dispose((void **)&v146);
std::string::_M_dispose((void **)&Format);
std::string::_M_dispose((void **)&v152);
if ( exca )
{
fprintf(&__iob[2], "%s\n", (const char *)v116[0]);
}
else
{
if ( FileName && *FileName )
v50 = fopen(FileName, "w");
else
v50 = &__iob[1];
fprintf(v50, "%s\n", (const char *)v118[0]);
fclose(v50);
}
}
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)&v120);
std::string::_M_dispose(v118);
std::string::_M_dispose((void **)v116);
std::_Rb_tree<std::string,std::pair<std::string const,std::vector<std::string>>,std::_Select1st<std::pair<std::string const,std::vector<std::string>>>,std::less<std::string>,std::allocator<std::pair<std::string const,std::vector<std::string>>>>::~_Rb_tree((int)&v114);
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)&v112);
}
goto LABEL_177; // 清理数据
}
v34 = (const char **)&WXML::GlassEaselWxs::sWxsEnvInit;
}
main::{lambda(std::string const&)#1}::operator()((const char **)&FileName, v34);
exca = 0;
goto LABEL_177; // 清理数据
}
v140 = 0;
String = (char *)&v141;
LOBYTE(v141) = 0;
std::_Rb_tree_header::_Rb_tree_header(v143);
std::_Rb_tree_header::_Rb_tree_header(v145);
if ( ReadFile((char *)*v91, (unsigned int *)&String) )
{
fprintf(&__iob[2], "Failed to read input from %s", *v91);
exca = -1;
}
else
{
JsonDict = GetJsonDict((int *)&String, (int)&v142);
exca = JsonDict;
if ( JsonDict )
{
fprintf(&__iob[2], "Failed to read JSON at position %d (%c)", ~JsonDict, String[~JsonDict]);
LABEL_106:
exca = -2;
}
else
{
for ( m = (char **)v143[2]; m != v143; m = (char **)std::_Rb_tree_increment((int)m) )
{
std::string::basic_string(&v152, (int)(m + 4));
std::string::basic_string(v156, (int)(m + 10));
v146 = (int)v148;
v147 = 0;
v148[0] = 0;
if ( night::compile_ns_no_wrapper((int)&v152, (int)v156, 1, (unsigned int *)&v146, 0) )
{
fprintf(&__iob[2], "Error in file %s: %s\n", (const char *)v152, (const char *)v146);
std::string::_M_dispose((void **)&v146);
std::pair<std::string const,std::string>::~pair((void **)&v152);
goto LABEL_106;
}
v31 = snprintf(0, 0, WXML::GlassEaselWxs::sWrapper, v146) + 1;
v32 = (char *)operator new[](v31);
snprintf(v32, v31, WXML::GlassEaselWxs::sWrapper, v146);
std::string::basic_string((void **)&Format, v32);
v33 = std::map<std::string,std::string>::operator[](&v144, (int)&v152);
std::string::operator=(v33, &Format);
std::string::_M_dispose((void **)&Format);
operator delete[](v32);
std::string::_M_dispose((void **)&v146);
std::pair<std::string const,std::string>::~pair((void **)&v152);
}
DictToJsonString((int)&v136, (int)&v144);
main::{lambda(std::string const&)#1}::operator()((const char **)&FileName, (const char **)&v136);
std::string::_M_dispose((void **)&v136);
}
}
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)&v144);
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)&v142);
std::string::_M_dispose((void **)&String);
LABEL_177:
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)&v110);
std::string::_M_dispose(v109);
std::string::_M_dispose((void **)v108);
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)&v106);
std::vector<std::string>::~vector(&v97, v67);
std::vector<std::string>::~vector(&v94, v68);
std::string::_M_dispose((void **)&v103);
std::string::_M_dispose((void **)&v100);
std::vector<std::string>::~vector((void ***)&v91, v69);
return exca;
}

View File

@ -37,7 +37,7 @@ const HTTP = {
// console.log('No more data in response.');
if (ret?.startsWith('server error'))
{
console.log('error:', ret)
console.log('response error:\n', ret)
}
if (compilerOptions.lazyloadConfig || compilerOptions.lazyload)
{

View File

@ -26,7 +26,7 @@ describe("wcc - module", function () {
const w = await windows.wcc(p);
const n = await linux.wcc(p, '');
// console.log('windows:', typeof w)
// console.log('linux:', typeof n)
// console.log('linux:', n)
assert.equal(typeof n, typeof w);
if (typeof w == 'string')

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{"compile_placeholder.wxs":"/* compile_placeholder */"}

View File

@ -0,0 +1,3 @@
{
"pages/comm": "// /pages/comm.wxs\n\nvar foo = \"'hello world' from comm.wxs\";\nvar bar = function(d) {\n return d;\n}\nmodule.exports = {\n foo: foo,\n bar: bar\n};"
}

View File

@ -0,0 +1,93 @@
import assert from 'assert';
import path from 'path';
import linux from '../../../runner/binary-linux'
import windows from '../../../runner/binary-windows'
import * as fs from 'fs'
import { describe } from "mocha";
describe("wcc - wxs", function () {
describe("wxs: node output should equal with wine", function () {
// afterEach(function(){
// if(this.currentTest.state === 'failed'){
// console.error('failed', this.currentTest)
// }
// })
it("sample1", async function () {
const projectPath = path.resolve(
__dirname,
"../../../projects/miniprogram-demo/miniprogram"
);
const p = path.resolve(__dirname, './sample1.json')
const args = [
"--wxs",
p
];
const w = (await windows.wcc(args, projectPath)).replace(/\r\n/g, '\n')
const n = await linux.wcc(args, projectPath);
const storagePath = path.resolve(
__dirname,
`miniprogram-demo/${this.test?.title}`
);
try {
fs.mkdirSync(storagePath, { recursive: true });
} catch (error) {}
assert.equal(typeof w, typeof n);
fs.writeFileSync(`${storagePath}/wine-output.js`, w);
fs.writeFileSync(`${storagePath}/node-output.js`, n);
assert.equal(w, n);
});
it("sample2", async function () {
const projectPath = path.resolve(
__dirname,
"../../../projects/miniprogram-demo/miniprogram"
);
const p = path.resolve(__dirname, './sample2.json')
const args = [
"--wxs",
p
];
const w = (await windows.wcc(args, projectPath)).replace(/\r\n/g, '\n')
const n = await linux.wcc(args, projectPath);
const storagePath = path.resolve(
__dirname,
`miniprogram-demo/${this.test?.title}`
);
try {
fs.mkdirSync(storagePath, { recursive: true });
} catch (error) {}
assert.equal(typeof w, typeof n);
fs.writeFileSync(`${storagePath}/wine-output.js`, w);
fs.writeFileSync(`${storagePath}/node-output.js`, n);
assert.equal(w, n);
});
it("sample3", async function () {
const projectPath = path.resolve(
__dirname,
"../../../projects/miniprogram-demo/miniprogram"
);
const p = path.resolve(__dirname, './sample3.json')
const args = [
"--wxs",
p
];
const w = (await windows.wcc(args, projectPath)).replace(/\r\n/g, '\n')
const n = await linux.wcc(args, projectPath);
const storagePath = path.resolve(
__dirname,
`miniprogram-demo/${this.test?.title}`
);
try {
fs.mkdirSync(storagePath, { recursive: true });
} catch (error) {}
assert.equal(typeof w, typeof n);
fs.writeFileSync(`${storagePath}/wine-output.js`, w);
fs.writeFileSync(`${storagePath}/node-output.js`, n);
assert.equal(w, n);
});
});
});

File diff suppressed because it is too large Load Diff