UNPKG

@mojir/lits

Version:

Lits is a pure functional programming language implemented in TypeScript

3 lines (2 loc) 5.98 kB
"use strict";function t(t){if(!t.position||!t.code)return"";const e=t.position.column-1,i=t.code.length-e-1;return`${" ".repeat(Math.max(e,0))}^${" ".repeat(Math.max(i,0))}`}class e extends Error{sourceCodeInfo;shortMessage;constructor(i,n){const r=i instanceof Error?i.message:`${i}`;super(function(e,i){if(!i)return e;const n=`${i.position.line}:${i.position.column}`;return`${e}${i.filePath?`\n${i.filePath}:${n}`:`\nLocation ${n}`}\n${i.code}\n${t(i)}`}(r,n)),this.shortMessage=r,this.sourceCodeInfo=n,Object.setPrototypeOf(this,e.prototype),this.name="LitsError"}getCodeMarker(){return this.sourceCodeInfo&&t(this.sourceCodeInfo)}}const i={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},n=new Set(Object.values(i));const r=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","Builtin","SpecialBuiltin","NativeJsFunction","Module"]);function o(t){return null!==t&&"object"==typeof t&&("^^fn^^"in t&&"functionType"in t&&("string"==typeof(e=t.functionType)&&r.has(e)));var e}function s(t){return!(!Array.isArray(t)||t.length<2)&&("number"==typeof(e=t[0])&&n.has(e));var e}function b(t){return o(t)?`<function ${t.name||"λ"}>`:s(t)?`${e=t[0],Object.keys(i).find(t=>i[t]===e)}-node`:null===t?"null":"object"==typeof t&&t instanceof RegExp?`${t}`:"object"==typeof t&&t instanceof Error?t.toString():JSON.stringify(t);var e}function a(t,i,n={}){if(!function(t,e={}){return!("number"!=typeof t||Number.isNaN(t)||e.integer&&!Number.isInteger(t)||e.finite&&!Number.isFinite(t)||e.zero&&0!==t||e.nonZero&&0===t||e.positive&&t<=0||e.negative&&t>=0||e.nonPositive&&t>0||e.nonNegative&&t<0||"number"==typeof e.gt&&t<=e.gt||"number"==typeof e.gte&&t<e.gte||"number"==typeof e.lt&&t>=e.lt||"number"==typeof e.lte&&t>e.lte)}(t,n))throw new e(`Expected ${function(t){if(t.zero)return"zero";const e=function(t){return t.positive?"positive":t.negative?"negative":t.nonNegative?"non negative":t.nonPositive?"non positive":t.nonZero?"non zero":""}(t),i=t.integer?"integer":"number",n=t.finite?"finite":"",r=function(t){return"number"!=typeof t.gt&&"number"!=typeof t.gte||"number"!=typeof t.lt&&"number"!=typeof t.lte?"number"==typeof t.gt||"number"==typeof t.gte?"number"==typeof t.gt?`n > ${t.gt}`:`n >= ${t.gte}`:"number"==typeof t.lt||"number"==typeof t.lte?"number"==typeof t.lt?`n < ${t.lt}`:`n <= ${t.lte}`:"":`${"number"==typeof t.gt?`${t.gt} < n `:`${t.gte} <= n `}${"number"==typeof t.lt?`< ${t.lt}`:`<= ${t.lte}`}`}(t);return[e,n,i,r].filter(t=>!!t).join(" ")}(n)}, got ${b(t)}.`,function(t,e){return t?.sourceCodeInfo??e}(t,i))}function l(t){return{min:t,max:t}}function u(t,e){return{a:{type:t},b:{type:e}}}const p={name:"bitwise",functions:{"bit-not":{evaluate:([t],e)=>(a(t,e,{integer:!0}),~t),arity:l(1),docs:{category:"bitwise",returns:{type:"integer"},args:{a:{type:"integer"}},variants:[{argumentNames:["a"]}],description:"Returns bitwise `not` of $a.",seeAlso:["&","|","xor","bitwise.bit-and-not"],examples:["let { bit-not } = import(bitwise);\nbit-not(0)","let { bit-not } = import(bitwise);\nbit-not(255)"]}},"bit-and-not":{evaluate:([t,...e],i)=>(a(t,i,{integer:!0}),e.reduce((t,e)=>(a(e,i,{integer:!0}),t&~e),t)),arity:{min:2},docs:{category:"bitwise",returns:{type:"integer"},args:{...u("integer","integer"),c:{type:"integer",rest:!0}},variants:[{argumentNames:["a","b"]},{argumentNames:["a","b","c"]}],description:"Returns bitwise `and` with complement.",seeAlso:["&","|","xor","bitwise.bit-not"],examples:["let { bit-and-not } = import(bitwise);\n0b0011 bit-and-not 0b0110","let { bit-and-not } = import(bitwise);\nbit-and-not(0b0011, 0b0110)","let { bit-and-not } = import(bitwise);\nbit-and-not(0b0011, 0b0110, 0b1001)"]}},"bit-flip":{evaluate:([t,e],i)=>{a(t,i,{integer:!0}),a(e,i,{integer:!0,nonNegative:!0});return t^1<<e},arity:l(2),docs:{category:"bitwise",returns:{type:"integer"},args:{...u("integer","integer")},variants:[{argumentNames:["a","b"]}],description:"Flips bit number $b.",seeAlso:["bitwise.bit-set","bitwise.bit-clear","bitwise.bit-test"],examples:["let { bit-flip } = import(bitwise);\n0b0011 bit-flip 1","let { bit-flip } = import(bitwise);\nbit-flip(0b0011, 1)","let { bit-flip } = import(bitwise);\nbit-flip(0b1100, 1)"]}},"bit-set":{evaluate:([t,e],i)=>{a(t,i,{integer:!0}),a(e,i,{integer:!0,nonNegative:!0});return t|1<<e},arity:l(2),docs:{category:"bitwise",returns:{type:"integer"},args:{...u("integer","integer")},variants:[{argumentNames:["a","b"]}],description:"Sets bit number $b.",seeAlso:["bitwise.bit-flip","bitwise.bit-clear","bitwise.bit-test"],examples:["let { bit-set } = import(bitwise);\n0b0010 bit-set 1","let { bit-set } = import(bitwise);\nbit-set(0b0011, 1)","let { bit-set } = import(bitwise);\nbit-set(0b1100, 1)"]}},"bit-clear":{evaluate:([t,e],i)=>{a(t,i,{integer:!0}),a(e,i,{integer:!0,nonNegative:!0});return t&~(1<<e)},arity:l(2),docs:{category:"bitwise",returns:{type:"integer"},args:{...u("integer","integer")},variants:[{argumentNames:["a","b"]}],description:"Clears bit number $b.",seeAlso:["bitwise.bit-flip","bitwise.bit-set","bitwise.bit-test"],examples:["let { bit-clear } = import(bitwise);\n0b0011 bit-clear 1","let { bit-clear } = import(bitwise);\nbit-clear(0b0011, 1)","let { bit-clear } = import(bitwise);\nbit-clear(0b1100, 1)"]}},"bit-test":{evaluate:([t,e],i)=>{a(t,i,{integer:!0}),a(e,i,{integer:!0,nonNegative:!0});return!!(t&1<<e)},arity:l(2),docs:{category:"bitwise",returns:{type:"boolean"},args:{...u("integer","integer")},variants:[{argumentNames:["a","b"]}],description:"Checks if bit number $b is set.",seeAlso:["bitwise.bit-flip","bitwise.bit-set","bitwise.bit-clear"],examples:["let { bit-test } = import(bitwise);\n0b0011 bit-test 1","let { bit-test } = import(bitwise);\nbit-test(0b0011, 1)","let { bit-test } = import(bitwise);\nbit-test(0b1100, 1)"]}}}};exports.bitwiseUtilsModule=p; //# sourceMappingURL=bitwise.js.map