{"ScriptPreparationCode":null,"TestCases":[{"Name":"generators","Code":"var GAS = 0;\r\nfunction run(init, makeGen) {\r\n GAS = init;\r\n var gen = makeGen();\r\n while(true) {\r\n var res = gen.next();\r\n if(res.done) {\r\n return res.value;\r\n }\r\n else {\r\n GAS = init;\r\n continue;\r\n }\r\n }\r\n}\r\n\r\n\r\nvar linkNames = [\u0022first\u0022, \u0022rest\u0022];\r\nfunction link(f, r) {\r\n return {\r\n $name: \u0022link\u0022,\r\n $fields: linkNames,\r\n first: f,\r\n rest: r\r\n }\r\n}\r\nvar empty = { $name: \u0022empty\u0022 };\r\n\r\nfunction* map(f, l) {\r\n if(GAS-- \u003C= 0) { yield null; }\r\n var ans;\r\n var dispatch = {\r\n empty: 0,\r\n link: 1\r\n };\r\n var case_step = dispatch[l.$name];\r\n switch(case_step) {\r\n case 0:\r\n ans = empty\r\n break;\r\n case 1:\r\n fst = l[l.$fields[0]];\r\n rst = l[l.$fields[1]];\r\n var t1 = yield* f(fst);\r\n var t2 = yield* map(f, rst);\r\n var t3 = link(t1, t2);\r\n ans = t3;\r\n }\r\n return ans;\r\n}\r\n\r\nvar buildList = function(n) {\r\n var l = empty;\r\n for(var i = 0; i \u003C n; i\u002B\u002B) {\r\n l = link(i, l).next().value;\r\n }\r\n return l;\r\n}\r\nrun(100, function*() {\r\n return yield* map(function*(l) { return l \u002B 1; }, buildList(4000));\r\n });\r\n\r\n","IsDeferred":false},{"Name":"Manual","Code":"var GAS = 0;\r\nfunction run(init, runner) {\r\n GAS = init;\r\n var frames = [{\r\n run: runner \r\n }];\r\n var thisFrame = frames.pop();\r\n while(true) {\r\n var res = thisFrame.run(thisFrame);\r\n if(res.isCont) {\r\n var len = res.frames.length;\r\n for(var i = 0; i \u003C len; i\u002B\u002B) {\r\n frames.push(res.frames.pop());\r\n }\r\n GAS = init;\r\n thisFrame = frames.pop();\r\n }\r\n else {\r\n if(frames.length \u003C= 0) {\r\n break;\r\n }\r\n thisFrame = frames.pop();\r\n thisFrame.ans = res;\r\n }\r\n }\r\n return res;\r\n}\r\n\r\nvar linkNames = [\u0022first\u0022, \u0022rest\u0022];\r\nfunction link(f, r) {\r\n return {\r\n $name: \u0022link\u0022,\r\n $fields: linkNames,\r\n first: f,\r\n rest: r\r\n }\r\n}\r\nvar empty = { $name: \u0022empty\u0022 };\r\n\r\nfunction map(f, l) {\r\n var step = 0;\r\n if(f.isFrame) {\r\n var ans = f.ans;\r\n step = f.step;\r\n var t1 = f.vars[0];\r\n var fst = f.vars[1];\r\n var rst = f.vars[2];\r\n var t2 = f.vars[3];\r\n l = f.args[1];\r\n f = f.args[0];\r\n }\r\n if(GAS-- \u003C= 0) {\r\n return {\r\n isCont: true,\r\n frames: [{\r\n run: map,\r\n isFrame: true,\r\n vars: [t1, fst, rst, t2],\r\n args: [f, l],\r\n step: step\r\n }]\r\n };\r\n }\r\n while(true) {\r\n switch(step) {\r\n case 0:\r\n var dispatch = {\r\n empty: 1,\r\n link: 2\r\n };\r\n step = dispatch[l.$name];\r\n break;\r\n case 1:\r\n ans = empty\r\n step = 5\r\n break;\r\n case 2:\r\n fst = l[l.$fields[0]];\r\n rst = l[l.$fields[1]];\r\n step = 3;\r\n ans = f(fst);\r\n break;\r\n case 3:\r\n t1 = ans;\r\n step = 4\r\n ans = map(f, rst);\r\n break;\r\n case 4:\r\n t2 = ans;\r\n step = 5\r\n ans = link(t1, t2);\r\n break;\r\n case 5:\r\n GAS\u002B\u002B;\r\n return ans;\r\n }\r\n if(ans \u0026\u0026 ans.isCont) {\r\n ans.frames.push({\r\n run: map,\r\n isFrame: true,\r\n vars: [t1, fst, rst, t2],\r\n args: [f, l],\r\n step: step\r\n });\r\n return ans;\r\n }\r\n }\r\n}\r\n\r\nvar buildList = function(n) {\r\n var l = empty;\r\n for(var i = 0; i \u003C n; i\u002B\u002B) {\r\n l = link(i, l);\r\n }\r\n return l;\r\n}\r\nrun(100, function() {\r\n return map(function(l) { return l \u002B 1; }, buildList(4000));\r\n });\r\n\r\n\r\n","IsDeferred":false}]}