"use strict" var compile = require("cwise-compiler") var EmptyProc = { body: "", args: [], thisVars: [], localVars: [] } function fixup(x) { if(!x) { return EmptyProc } for(var i=0; i>", rrshift: ">>>" } ;(function(){ for(var id in assign_ops) { var op = assign_ops[id] exports[id] = makeOp({ args: ["array","array","array"], body: {args:["a","b","c"], body: "a=b"+op+"c"}, funcName: id }) exports[id+"eq"] = makeOp({ args: ["array","array"], body: {args:["a","b"], body:"a"+op+"=b"}, rvalue: true, funcName: id+"eq" }) exports[id+"s"] = makeOp({ args: ["array", "array", "scalar"], body: {args:["a","b","s"], body:"a=b"+op+"s"}, funcName: id+"s" }) exports[id+"seq"] = makeOp({ args: ["array","scalar"], body: {args:["a","s"], body:"a"+op+"=s"}, rvalue: true, funcName: id+"seq" }) } })(); var unary_ops = { not: "!", bnot: "~", neg: "-", recip: "1.0/" } ;(function(){ for(var id in unary_ops) { var op = unary_ops[id] exports[id] = makeOp({ args: ["array", "array"], body: {args:["a","b"], body:"a="+op+"b"}, funcName: id }) exports[id+"eq"] = makeOp({ args: ["array"], body: {args:["a"], body:"a="+op+"a"}, rvalue: true, count: 2, funcName: id+"eq" }) } })(); var binary_ops = { and: "&&", or: "||", eq: "===", neq: "!==", lt: "<", gt: ">", leq: "<=", geq: ">=" } ;(function() { for(var id in binary_ops) { var op = binary_ops[id] exports[id] = makeOp({ args: ["array","array","array"], body: {args:["a", "b", "c"], body:"a=b"+op+"c"}, funcName: id }) exports[id+"s"] = makeOp({ args: ["array","array","scalar"], body: {args:["a", "b", "s"], body:"a=b"+op+"s"}, funcName: id+"s" }) exports[id+"eq"] = makeOp({ args: ["array", "array"], body: {args:["a", "b"], body:"a=a"+op+"b"}, rvalue:true, count:2, funcName: id+"eq" }) exports[id+"seq"] = makeOp({ args: ["array", "scalar"], body: {args:["a","s"], body:"a=a"+op+"s"}, rvalue:true, count:2, funcName: id+"seq" }) } })(); var math_unary = [ "abs", "acos", "asin", "atan", "ceil", "cos", "exp", "floor", "log", "round", "sin", "sqrt", "tan" ] ;(function() { for(var i=0; ithis_s){this_s=-a}else if(a>this_s){this_s=a}", localVars: [], thisVars: ["this_s"]}, post: {args:[], localVars:[], thisVars:["this_s"], body:"return this_s"}, funcName: "norminf" }) exports.norm1 = compile({ args:["array"], pre: {args:[], localVars:[], thisVars:["this_s"], body:"this_s=0"}, body: {args:[{name:"a", lvalue:false, rvalue:true, count:3}], body: "this_s+=a<0?-a:a", localVars: [], thisVars: ["this_s"]}, post: {args:[], localVars:[], thisVars:["this_s"], body:"return this_s"}, funcName: "norm1" }) exports.sup = compile({ args: [ "array" ], pre: { body: "this_h=-Infinity", args: [], thisVars: [ "this_h" ], localVars: [] }, body: { body: "if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_", args: [{"name":"_inline_1_arg0_","lvalue":false,"rvalue":true,"count":2} ], thisVars: [ "this_h" ], localVars: [] }, post: { body: "return this_h", args: [], thisVars: [ "this_h" ], localVars: [] } }) exports.inf = compile({ args: [ "array" ], pre: { body: "this_h=Infinity", args: [], thisVars: [ "this_h" ], localVars: [] }, body: { body: "if(_inline_1_arg0_this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}", args:[ {name:"_inline_1_arg0_",lvalue:false,rvalue:true,count:2}, {name:"_inline_1_arg1_",lvalue:false,rvalue:true,count:2}], thisVars:["this_i","this_v"], localVars:["_inline_1_k"]}, post:{ body:"{return this_i}", args:[], thisVars:["this_i"], localVars:[]} }) exports.random = makeOp({ args: ["array"], pre: {args:[], body:"this_f=Math.random", thisVars:["this_f"]}, body: {args: ["a"], body:"a=this_f()", thisVars:["this_f"]}, funcName: "random" }) exports.assign = makeOp({ args:["array", "array"], body: {args:["a", "b"], body:"a=b"}, funcName: "assign" }) exports.assigns = makeOp({ args:["array", "scalar"], body: {args:["a", "b"], body:"a=b"}, funcName: "assigns" }) exports.equals = compile({ args:["array", "array"], pre: EmptyProc, body: {args:[{name:"x", lvalue:false, rvalue:true, count:1}, {name:"y", lvalue:false, rvalue:true, count:1}], body: "if(x!==y){return false}", localVars: [], thisVars: []}, post: {args:[], localVars:[], thisVars:[], body:"return true"}, funcName: "equals" })