From f5ee3b35ce5b6d9a764e77aa80919b69da0d2966 Mon Sep 17 00:00:00 2001 From: NateN1222 Date: Thu, 19 Oct 2017 14:14:53 -0500 Subject: Better JSON generation page --- test_bundle.js | 1055 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 988 insertions(+), 67 deletions(-) (limited to 'test_bundle.js') diff --git a/test_bundle.js b/test_bundle.js index cac1d81..f0a3d6f 100644 --- a/test_bundle.js +++ b/test_bundle.js @@ -1,101 +1,1022 @@ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 50){ - console.log("%c NONTRIVIAL: Array longer than 50 elements. ("+len+")","color:red"); - flag = false; - } - - }, - ForInStatement(node, state, c){ - console.log("ForInStatement"); + // COUNTS LOOPS AND CONDITIONALS + walk.simple(ast, { + ForInStatement(node){ + if(amtloops > 3){return;} amtloops++; }, - ForStatement(node, state, c){ - console.log("ForStatement"); + ForStatement(node){ + if(amtloops > 3){return;} amtloops++; }, - DoWhileStatement(node, state, c){ - console.log("DoWhileStatement"); + DoWhileStatement(node){ + if(amtloops > 3){return;} amtloops++; }, - WhileStatement(node, state, c){ - console.log("WhileStatement"); + WhileStatement(node){ + if(amtloops > 3){return;} amtloops++; }, - IfStatement(node, state, c){ - console.log("IfStatement"); - c(node.test,{}); - c(node.consequent,{}); + IfStatement(node){ + if(amtloops > 3){return;} amtloops++; }, - SwitchStatement(node, state, c){ - console.log("SwitchStatement"); + SwitchStatement(node){ + if(amtloops > 3){return;} amtloops++; } - }); - if(flag == false){ - return false; - } + if(amtloops > 3){ console.log("%c NONTRIVIAL: Too many loops/conditionals.","color:red"); + if(DEBUG == false){ + return false; + } + } + // Detect which objects are referenced and which functions are called + // Only cares about top level objects. Window is special because we will test its methods. + var nontrivial = false; + + // Has a while loop to cut down on recursion when not needed + function read(lnode){ + while(true){ + // window.test() + if(lnode.type == "CallExpression"){ + if(lnode.property !== undefined){ + last_name = lnode.property.name; + } + lnode = lnode.callee; + // window.test + }else if(lnode.type == "MemberExpression"){ + last_name = lnode.property.name; + // This may be bracket suffix notation + lnode = lnode.object; + // We should be at the first in the chain. + }else if(lnode.type == "Identifier"){ + // Since window is the global object, it is special + if(lnode.name == "window"){ + return test_function_name(last_name); + } else{ + return test_function_name(lnode.name); + } + }else if(lnode.type == "BinaryExpression"){ + // recurse on left side + if(read(lnode.left) == true){ + return true; + } + // continue on right side + last_name = lnode.operator; + // This may be bracket suffix notation + lnode = lnode.right; + }else if(lnode.type == "AssignmentExpression"){ + // recurse on left side + if(read(lnode.left) == true){ + return true; + } + // continue on right side + last_name = lnode.operator; + // This may be bracket suffix notation + lnode = lnode.right; + }else if(lnode.type == "FunctionExpression"){ + console.log("%cDefines a function.","color:red"); + return true; + }else{ + console.log("Unrecognized:"); + console.log(lnode); + return; + } + //console.log(last_name+":"+lnode.name); + } + + } + + walk.simple(ast, { + ExpressionStatement(node){ + if(nontrivial == true && DEBUG == false){ + return; + } + // Get the first thing in the expression + if(node === undefined){ + return; + } + var lnode = node.expression; + var last_name = ""; + console.log("%cReading ExpressionStatement","color:green"); + read(lnode,last_name); + }, FunctionExpression(node){ + // + } + }); + + if(nontrivial == true){ return false; } + + return true; +} +window.onload = function () { + document.getElementById("parse").addEventListener("click",function(){ + var script = document.getElementById("input").value; + var ast = acorn.parse_dammit(script).body[0]; + document.getElementById("output").innerHTML = JSON.stringify(ast, null, '\t'); // Indented with tab + document.getElementById("output").innerHTML = full_evaluate(script) + "\n\n" + document.getElementById("output").innerHTML; }); } -},{"acorn/dist/acorn_loose":3,"acorn/dist/walk":4}],2:[function(require,module,exports){ +},{"acorn":2,"acorn/dist/acorn_loose":3,"acorn/dist/walk":4}],2:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : -- cgit v1.2.3