UNPKG

17.9 kBSource Map (JSON)View Raw
1{"version":3,"sources":["Factory.ion"],"names":["ion","Literal","Expression","Factory","properties","runtime","createRuntime","writable","value",{"type":"Identifier","name":"value","loc":{"start":{"line":12,"column":12,"fixed":true,"source":"ion/runtime/Factory.ion"},"end":{"line":12,"column":17,"fixed":true,"source":"ion/runtime/Factory.ion"}}},"context","ast","clone","factory","type","canCache","toCode","left","operator","right","JSON","stringify","lookup","VariableDeclaration","ThisExpression","getVariable","Identifier","name","Function","Template","Property","IfStatement","BlockStatement","ReturnStatement","ObjectExpression","ArrayExpression","ExpressionStatement","ForOfStatement","ForInStatement","MemberExpression","object","property","computed","CallExpression","NewExpression","UnaryExpression","evaluate","a","ConditionalExpression","BinaryExpression","getFactory","step","key","values","nodeValue","next","constructor","code","_toCode","Object","defineProperty","Error","test"],"mappings":"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","sourcesContent":["const ion = import '../'\nconst Literal = import './Literal'\nconst Expression = import './Expression'\n\nclass Factory\n properties:\n runtime: './OperationExpression'\n # creates a runtime construct from this operation\n # with the specified context and AST node\n createRuntime:\n writable: true\n value: (context, ast) ->\n let properties = ion.clone(ast)\n properties.context = context\n properties.factory = @\n let type = import @runtime\n return new type(properties)\n canCache:\n writable: true\n value: (ast) -> false\n toCode:\n writable: true\n value: (ast) ->\n if ast.type is 'BinaryExpression'\n return toCode(ast.left) + ast.operator + toCode(ast.right)\n return \"({{JSON.stringify(ast)}})\"\n\nconst lookup =\n type:\n VariableDeclaration: new Factory\n runtime: './VariableDeclaration'\n ThisExpression: new Factory\n createRuntime: (context, ast) -> context.getVariable('this')\n toCode: (ast) -> 'this'\n Identifier: new Factory\n createRuntime: (context, ast) -> context.getVariable(ast.name)\n canCache: (ast) -> true\n toCode: (ast) -> ast.name\n Function: new Factory\n createRuntime: (context, ast) ->\n let value = ast.value\n if ast.context\n value = value(context)\n return new Literal({value:value})\n Template: new Factory\n runtime: './Template'\n Literal: new Factory\n runtime: './Literal'\n canCache: (ast) -> true\n toCode: (ast) -> JSON.stringify(ast.value)\n Property: new Factory\n runtime: './Property'\n IfStatement: new Factory\n runtime: './IfStatement'\n BlockStatement: new Factory\n runtime: './BlockStatement'\n ReturnStatement: new Factory\n runtime: './ReturnStatement'\n ObjectExpression: new Factory\n runtime: './ObjectExpression'\n ArrayExpression: new Factory\n runtime: './ArrayExpression'\n ExpressionStatement: new Factory\n runtime: './ExpressionStatement'\n ForOfStatement: new Factory\n runtime: './ForInOfStatement'\n ForInStatement: new Factory\n runtime: './ForInOfStatement'\n MemberExpression: new Factory\n runtime: './MemberExpression'\n canCache: (ast) -> canCache(ast.object) and canCache(ast.property)\n toCode: (ast) ->\n if ast.computed\n return \"{{toCode(ast.object)}}[{{toCode(ast.property)}}]\"\n else\n return \"{{toCode(ast.object)}}.{{toCode(ast.property)}}\"\n CallExpression: new Factory\n runtime: './CallExpression'\n NewExpression: new Factory\n runtime: './CallExpression'\n UnaryExpression:\n operator:\n \"!\": new Factory\n evaluate: (a) -> not a\n \"typeof\": new Factory\n evaluate: (a) -> typeof a\n \"void\": new Factory\n evaluate: (a) -> void a\n \"-\": new Factory\n evaluate: (a) -> - a\n \"+\": new Factory\n evaluate: (a) -> + a\n \"~\": new Factory\n evaluate: (a) -> ~ a\n \"?\": new Factory\n evaluate: (a) -> a?\n ConditionalExpression: new Factory\n runtime: './ConditionalExpression'\n # unlike in imperative code, both consequent and alternate are always evaluated\n # evaluate: (test, consequent, alternate) -> test ? consequent : alternate\n BinaryExpression:\n operator:\n \"*\": new Factory\n evaluate: (left, right) -> left * right\n \"/\": new Factory\n evaluate: (left, right) -> left / right\n \"%\": new Factory\n evaluate: (left, right) -> left % right\n \"+\": new Factory\n evaluate: (left, right) -> left + right\n \"-\": new Factory\n evaluate: (left, right) -> left - right\n \"&&\": new Factory\n evaluate: (left, right) -> left and right\n \"||\": new Factory\n evaluate: (left, right) -> left or right\n \"&\": new Factory\n evaluate: (left, right) -> left & right\n \"|\": new Factory\n evaluate: (left, right) -> left | right\n \"==\": new Factory\n evaluate: (left, right) -> `left == right`\n \"!=\": new Factory\n evaluate: (left, right) -> `left != right`\n \"===\": new Factory\n evaluate: (left, right) -> left is right\n \"!==\": new Factory\n evaluate: (left, right) -> left isnt right\n \"<\": new Factory\n evaluate: (left, right) -> left < right\n \">\": new Factory\n evaluate: (left, right) -> left > right\n \"<=\": new Factory\n evaluate: (left, right) -> left <= right\n \">=\": new Factory\n evaluate: (left, right) -> left >= right\n\nconst getFactory(ast, step = lookup) ->\n for key, values of step\n let nodeValue = ast[key]\n let next = values[nodeValue]\n if next?\n if next.constructor is Factory\n return next\n return getFactory(ast, next)\n return null\n\nexport const\n canCache = (ast) ->\n if ast?\n let factory = getFactory(ast)\n if factory?\n return factory.canCache(ast)\n return false\n toCode = (ast) ->\n if ast?\n let code = ast._toCode\n if not code?\n let factory = getFactory(ast)\n if factory?\n code = factory.toCode(ast)\n if code? and typeof ast is 'object'\n Object.defineProperty(ast, '_toCode', {value:code})\n return code\n return JSON.stringify(ast)\n createRuntime = (context, ast) ->\n if typeof ast?.type isnt 'string'\n ast =\n type: 'Literal'\n value: ast\n let factory = getFactory(ast)\n if not factory?\n throw new Error(\"Factory not found for ast:\\n{{JSON.stringify(ast, null, ' ')}}\")\n return factory.createRuntime(context, ast)\n test = ->\n # try to get a factory for < operation\n let factory = getFactory(\n {}\n type: 'BinaryExpression'\n operator: '>'\n left:\n type: 'Literal'\n value: 1\n right:\n type: 'Literal'\n value: 2\n )\n assert factory is lookup.type.BinaryExpression.operator[\">\"]\n assert lookup.type.BinaryExpression.operator[\">\"]?\n"]}
\No newline at end of file