From 1fa14c3c7fb5887e6c61bcfd6d57b40279230da1 Mon Sep 17 00:00:00 2001 From: shijian <2954700422@qq.com> Date: Mon, 16 Oct 2023 08:58:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3event.debugger()=E7=9A=84?= =?UTF-8?q?=E5=88=A4=E6=96=AD=EF=BC=8Clib.init.parsex=E5=8E=BB=E9=99=A499?= =?UTF-8?q?=E4=B8=AAstep=E7=9A=84=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/game.js | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/game/game.js b/game/game.js index 53e0319d5..74dadb300 100644 --- a/game/game.js +++ b/game/game.js @@ -11233,32 +11233,44 @@ function Legacy(func){ //Remove all comments //移除所有注释 - var str=func.toString().replace(/((?:(?:^[ \t]*)?(?:\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\/(?:[ \t]*\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/)))?|\/\/(?:[^\\]|\\(?:\r?\n)?)*?(?:\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/))|(?=\r?\n))))+)|("(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|(?:\r?\n|[\s\S])[^\/"'\\\s]*)/mg,'$2').trim(); - //判断代码中是否有debugger - var regex=/event\.debugger\(\)/g; - var hasDebugger=regex.test(str); - var insertDebugger=`yield code=>eval(code);`; - str=str.replaceAll(regex,insertDebugger); + let str=func.toString().replace(/((?:(?:^[ \t]*)?(?:\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\/(?:[ \t]*\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/)))?|\/\/(?:[^\\]|\\(?:\r?\n)?)*?(?:\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/))|(?=\r?\n))))+)|("(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|(?:\r?\n|[\s\S])[^\/"'\\\s]*)/mg,'$2').trim(); //获取第一个 { 后的所有字符 str=str.slice(str.indexOf('{')+1); + //判断代码中是否有debugger + let regex=/event\.debugger\(\)/; + let hasDebugger=false; + let insertDebugger=`yield code=>eval(code);`; + let debuggerSkip=0; + let debuggerResult; + while((debuggerResult=str.slice(debuggerSkip).match(regex))!=null){ + let debuggerCopy=str; + debuggerCopy=debuggerCopy.slice(0,debuggerSkip+debuggerResult.index)+insertDebugger+debuggerCopy.slice(debuggerSkip+debuggerResult.index+debuggerResult[0].length,-1); + //测试是否有错误 + try { + new GeneratorFunction(debuggerCopy); + str=debuggerCopy+'}'; + debuggerSkip+=debuggerResult.index+insertDebugger.length; + hasDebugger=true; + }catch(error){ + debuggerSkip+=debuggerResult.index+debuggerResult[0].length; + } + } //func中要写步骤的话,必须要写step 0 if(str.indexOf('step 0')==-1){ str='{if(event.step==1) {event.finish();return;}\n'+str; }else{ - var skip=0; - //每层最多找99个step - for (var k=0;k<99;k++) { - //正则表达式 - var reg=new RegExp(`['"]step ${k}['"]`); - var result=str.slice(skip).match(reg); - if(result==null) break; - var insertStr; + let skip=0; + let k=0; + let result; + //去除99个step的限制 + while((result=str.slice(skip).match(new RegExp(`['"]step ${k}['"]`)))!=null){ + let insertStr; if(k==0){ insertStr=`switch(step){case 0:`; }else{ insertStr=`break;case ${k}:`; } - var copy=str; + let copy=str; copy=copy.slice(0,skip+result.index)+insertStr+copy.slice(skip+result.index+result[0].length); //测试是否有错误 try{ @@ -11269,6 +11281,7 @@ k--; skip+=result.index+result[0].length; } + k++; } str=`if(event.step==${k}){event.finish();return;}`+str; }