diff --git a/src/MapleFE/shared/src/ast_builder.cpp b/src/MapleFE/shared/src/ast_builder.cpp index 7cb6decc43606a03aee8fe5b64b8f1b523d8786a..016d6a9ae7466c363596d053f3a6e289141f05e6 100644 --- a/src/MapleFE/shared/src/ast_builder.cpp +++ b/src/MapleFE/shared/src/ast_builder.cpp @@ -1040,6 +1040,8 @@ TreeNode* ASTBuilder::SetIsConst() { } treenode->SetIsConst(); + + mLastTreeNode = treenode; return mLastTreeNode; } @@ -1672,9 +1674,9 @@ TreeNode* ASTBuilder::AddAsType() { if (tree_type) { node->AddAsTypes(tree_type); - mLastTreeNode = node; } + mLastTreeNode = node; return mLastTreeNode; } diff --git a/src/MapleFE/tools/obfuscate/src/main.cpp b/src/MapleFE/tools/obfuscate/src/main.cpp index 7eb882bd046729711e2f879c894b76980a81b954..0865f8545ed5116743448c3bb710b7e33cb9289a 100644 --- a/src/MapleFE/tools/obfuscate/src/main.cpp +++ b/src/MapleFE/tools/obfuscate/src/main.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) [2022] Futurewei Technologies, Inc. All rights reverved. +* Copyright (C) [2022] Tencent. All rights reverved. * * OpenArkFE is licensed under the Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. @@ -21,8 +22,8 @@ #include "obfuscate.h" static void help() { - std::cout << "ast2cpp a.ast[,b.ast] [options]:" << std::endl; - std::cout << " --out=x.cpp : cpp output file" << std::endl; + std::cout << "obfuscate a.ast[,b.ast] [options]:" << std::endl; + std::cout << " --out=x.ts : ts output file" << std::endl; std::cout << " --help : print this help" << std::endl; std::cout << " --trace=n : Emit trace with 4-bit combo levels 1...15" << std::endl; std::cout << " 1 : Emit ast tree visits" << std::endl; @@ -43,7 +44,7 @@ int main (int argc, char *argv[]) { unsigned flags; // one or more input .ast files separated by ',' const char *inputname = argv[1]; - // output .cpp file + // output .ast file const char *outputname = nullptr; // Parse the argument diff --git a/src/MapleFE/tools/obfuscate/src/obfuscate.cpp b/src/MapleFE/tools/obfuscate/src/obfuscate.cpp index 17c750339a9e4969da356b7984cb935e0bb3b559..cec38cbc9cd61b600310f72967651b849431cc77 100644 --- a/src/MapleFE/tools/obfuscate/src/obfuscate.cpp +++ b/src/MapleFE/tools/obfuscate/src/obfuscate.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) [2022] Futurewei Technologies, Inc. All rights reverved. +* Copyright (C) [2022] Tencent. All rights reverved. * * OpenArkFE is licensed under the Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. @@ -151,7 +152,14 @@ int Obfuscate::ProcessAST() { std::cout << "============= Emitter ===========" << std::endl; maplefe::Emitter emitter(handler); std::string code = emitter.Emit("Convert AST to TypeScript code"); - std::cout << code; + + // Emit to file + std::string of_name(module->GetFilename()); + of_name += ".obf"; + std::ofstream ofs; + ofs.open(of_name.c_str(), std::ofstream::out); + ofs << code; + ofs.close(); } return 0; diff --git a/src/MapleFE/typescript/stmt.spec b/src/MapleFE/typescript/stmt.spec index 973ef07d7e202c5799a03a5f62d251d6bcf07ca3..4bce8140eb6f1eb77e346f706f1f7210234aba67 100644 --- a/src/MapleFE/typescript/stmt.spec +++ b/src/MapleFE/typescript/stmt.spec @@ -173,12 +173,7 @@ rule PrimaryExpression : ONEOF("this", # GeneratorExpression RegularExpression, TemplateLiteral, - ParenthesizedExpression, - Literal + "as" + "const", - ArrayLiteral + "as" + "const", - ObjectLiteral + "as" + "const") - attr.action.%11,%12,%13 : SetIsConst(%1) - attr.action.%11,%12,%13 : PassChild(%1) + ParenthesizedExpression) ##----------------------------------- ##rule CoverParenthesizedExpressionAndArrowParameterList[Yield] : @@ -391,9 +386,8 @@ rule MemberExpression : ONEOF( IsExpression, MemberExpression + '[' + KeyOf + ']', MemberExpression + '!', - MemberExpression + '.' + JSIdentifier + "as" + "const", + MemberExpression + "as" + "const", '<' + Type + '>' + MemberExpression, - PrimaryExpression + "as" + "const", MemberExpression + '.' + KeywordPropName) attr.action.%1 : AddAsType(%1, %2) attr.action.%2 : BuildArrayElement(%1, %3) @@ -409,12 +403,9 @@ rule MemberExpression : ONEOF( attr.action.%8 : AddAsType(%6) attr.action.%10: BuildArrayElement(%1, %3) attr.action.%11: SetIsNonNull(%1) - attr.action.%12: BuildField(%1, %3) - attr.action.%12: SetIsConst() + attr.action.%12: SetIsConst(%1) attr.action.%13: BuildCast(%2, %4) - attr.action.%14: PassChild(%1) - attr.action.%14: SetIsConst() - attr.action.%15 : BuildField(%1, %3) + attr.action.%14 : BuildField(%1, %3) rule IsExpression: ONEOF(PrimaryExpression + "is" + Type, ArrowFunction + "is" + Type) @@ -1744,11 +1735,8 @@ rule Type : ONEOF(UnionOrIntersectionOrPrimaryType, InferType, IsExpression, PrimaryType + '[' + TypeQuery + ']', - TemplateLiteral, - ImportFunction, - ImportFunction + '.' + TypeReference) + TemplateLiteral) attr.action.%7,%11 : BuildArrayElement(%1, %3) - attr.action.%14 : BuildField(%1, %3) #rule UnionOrIntersectionOrPrimaryType: ONEOF(UnionType, # IntersectionOrPrimaryType)