New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

liyad

Package Overview
Dependencies
Maintainers
1
Versions
71
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

liyad - npm Package Compare versions

Comparing version 0.0.14 to 0.0.15

bin/s-exp/compile.d.ts

2

bin/s-exp/operators/core/core.fn.d.ts

@@ -42,3 +42,5 @@ import { SxParserState, SxToken, CapturedScopes } from '../../types';

export declare const $__lambda: (state: SxParserState, name: string) => (...args: any[]) => (...actualArgs: any[]) => SxToken;
export declare const $comp$__lambda: (state: SxParserState, name: string) => (...args: any[]) => any;
export declare const $__defun: (state: SxParserState, name: string) => (...args: any[]) => (...actualArgs: any[]) => SxToken;
export declare const $comp$__defun: (state: SxParserState, name: string) => (...args: any[]) => any;
export declare const $__refun: (state: SxParserState, name: string) => (...args: any[]) => (...args: any[]) => any;

@@ -45,0 +47,0 @@ export declare const $apply: (state: SxParserState, name: string) => (...args: any[]) => (...p: any[]) => any;

@@ -8,2 +8,3 @@ "use strict";

const evaluate_1 = require("../../evaluate");
const compile_1 = require("../../compile");
const errors_1 = require("../../errors");

@@ -306,2 +307,29 @@ exports.$car = (state, name) => (...args) => {

// tslint:disable-next-line:variable-name
exports.$comp$__lambda = (state, name) => (...args) => {
// S expression: ($__lambda '(sym1 ... symN) 'expr1 ... 'exprN)
// -> S expr : fn
errors_1.checkParamsLength('$$__lambda', args, 2);
const formalArgs = args[0];
if (!Array.isArray(formalArgs)) {
throw new Error(`[SX] $$__lambda: Invalid argument(s): args[0] is not array.`);
}
let lastIsSpread = false;
for (let i = 0; i < formalArgs.length; i++) {
const fa = formalArgs[i];
if (i === formalArgs.length - 1 && state.config.enableSpread &&
Array.isArray(fa) && types_1.isSymbol(fa[0], state.config.reservedNames.spread)) {
if (!types_1.isSymbol(fa[1])) {
throw new Error(`[SX] $$__lambda: Invalid formal argument(s): item(s) of args[${i}] is not symbol.`);
}
formalArgs[i] = fa[1];
lastIsSpread = true;
}
else if (!types_1.isSymbol(fa)) {
throw new Error(`[SX] $$__lambda: Invalid formal argument(s): item(s) of args[${i}] is not symbol.`);
}
}
const fnBody = args.slice(1);
return compile_1.compileLambda(state, formalArgs, lastIsSpread, fnBody);
};
// tslint:disable-next-line:variable-name
exports.$__defun = (state, name) => (...args) => {

@@ -320,2 +348,15 @@ // S expression: ($__defun 'name '(sym1 ... symN) 'expr ... 'expr)

// tslint:disable-next-line:variable-name
exports.$comp$__defun = (state, name) => (...args) => {
// S expression: ($__defun 'name '(sym1 ... symN) 'expr ... 'expr)
// -> S expr : fn
errors_1.checkParamsLength('$$__defun', args, 3);
const car = exports.$$first(...args);
const fn = exports.$comp$__lambda(state, name)(...args.slice(1));
state.funcMap.set(car.symbol, {
name: car.symbol,
fn: (st, nm) => fn
});
return fn;
};
// tslint:disable-next-line:variable-name
exports.$__refun = (state, name) => (...args) => {

@@ -322,0 +363,0 @@ // S expression: ($refun 'name)

@@ -84,2 +84,25 @@ "use strict";

}, {
name: '$$closure',
fn: (state, name) => (list) => {
// S expression: ($$closure (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
// -> S expr : ($__capture '(u-sym1 ... u-symM) ($$__lambda '(sym1 ... symN) 'expr ... 'expr) )
const symUse = types_1.isSymbol(list[2], 'use');
if (!symUse) {
throw new Error(`[SX] $closure: Invalid syntax: missing 'use' keyword.`);
}
return [{ symbol: '$__capture' }, types_1.quote(state, list[3]), types_1.quote(state, [{ symbol: '$$__lambda' },
types_1.quote(state, list[1]),
...(list.slice(4).map(x => types_1.quote(state, x))),
])];
},
}, {
name: '|=>',
fn: (state, name) => (list) => {
// S expression: (|-> (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
// -> S expr : ($closure (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
return [{ symbol: '$$closure' },
...list.slice(1),
];
},
}, {
name: '$lambda',

@@ -103,2 +126,20 @@ fn: (state, name) => (list) => {

}, {
name: '$$lambda',
fn: (state, name) => (list) => {
// S expression: ($$lambda (sym1 ... symN) expr ... expr)
// -> S expr : ($$__lambda '(sym1 ... symN) 'expr ... 'expr)
return [{ symbol: '$$__lambda' },
...(list.slice(1).map(x => types_1.quote(state, x))),
];
},
}, {
name: '=>',
fn: (state, name) => (list) => {
// S expression: ($$lambda (sym1 ... symN) expr ... expr)
// -> S expr : ($$__lambda '(sym1 ... symN) 'expr ... 'expr)
return [{ symbol: '$$__lambda' },
...(list.slice(1).map(x => types_1.quote(state, x))),
];
},
}, {
name: '$defun',

@@ -113,2 +154,11 @@ fn: (state, name) => (list) => {

}, {
name: '$$defun',
fn: (state, name) => (list) => {
// S expression: ($$defun name (sym1 ... symN) expr ... expr)
// -> S expr : ($$__defun 'name '(sym1 ... symN) 'expr ... 'expr)
return [{ symbol: '$$__defun' },
...(list.slice(1).map(x => types_1.quote(state, x))),
];
},
}, {
name: '$refun',

@@ -115,0 +165,0 @@ fn: (state, name) => (list) => {

@@ -65,5 +65,11 @@ "use strict";

}, {
name: '$$__lambda',
fn: ops.$comp$__lambda,
}, {
name: '$__defun',
fn: ops.$__defun,
}, {
name: '$$__defun',
fn: ops.$comp$__defun,
}, {
name: '$__refun',

@@ -70,0 +76,0 @@ fn: ops.$__refun,

@@ -112,2 +112,13 @@ export declare type SxMacro = (state: SxParserState, name: string) => (list: SxToken[]) => SxToken;

export declare type SxList = SxDottedPair | SxAtom[];
export declare type CompilerOperator = (r: SxToken[], args: SxToken[]) => string;
export interface CompilerContext {
_$_vars: any[];
varsCount: number;
varNames: Map<string, string>;
varNamesCount: number;
varDefs: string;
ops: Map<string, CompilerOperator>;
makeScope: (scoped: () => void) => void;
compileToken: (body: any[], i: number) => string;
}
export interface LsxConfig {

@@ -114,0 +125,0 @@ jsx: (comp: any, props: any, ...children: any[]) => any;

@@ -42,3 +42,5 @@ import { SxParserState, SxToken, CapturedScopes } from '../../types';

export declare const $__lambda: (state: SxParserState, name: string) => (...args: any[]) => (...actualArgs: any[]) => SxToken;
export declare const $comp$__lambda: (state: SxParserState, name: string) => (...args: any[]) => any;
export declare const $__defun: (state: SxParserState, name: string) => (...args: any[]) => (...actualArgs: any[]) => SxToken;
export declare const $comp$__defun: (state: SxParserState, name: string) => (...args: any[]) => any;
export declare const $__refun: (state: SxParserState, name: string) => (...args: any[]) => (...args: any[]) => any;

@@ -45,0 +47,0 @@ export declare const $apply: (state: SxParserState, name: string) => (...args: any[]) => (...p: any[]) => any;

@@ -6,2 +6,3 @@ // Copyright (c) 2018, Shellyl_N and Authors

import { evaluate, resolveValueSymbolScope, collectCapturedVariables, getCapturedScopes, getScope, getGlobalScope, installScope, uninstallScope, optimizeTailCall, toNumber } from '../../evaluate';
import { compileLambda } from '../../compile';
import { checkParamsLength } from '../../errors';

@@ -304,2 +305,29 @@ export const $car = (state, name) => (...args) => {

// tslint:disable-next-line:variable-name
export const $comp$__lambda = (state, name) => (...args) => {
// S expression: ($__lambda '(sym1 ... symN) 'expr1 ... 'exprN)
// -> S expr : fn
checkParamsLength('$$__lambda', args, 2);
const formalArgs = args[0];
if (!Array.isArray(formalArgs)) {
throw new Error(`[SX] $$__lambda: Invalid argument(s): args[0] is not array.`);
}
let lastIsSpread = false;
for (let i = 0; i < formalArgs.length; i++) {
const fa = formalArgs[i];
if (i === formalArgs.length - 1 && state.config.enableSpread &&
Array.isArray(fa) && isSymbol(fa[0], state.config.reservedNames.spread)) {
if (!isSymbol(fa[1])) {
throw new Error(`[SX] $$__lambda: Invalid formal argument(s): item(s) of args[${i}] is not symbol.`);
}
formalArgs[i] = fa[1];
lastIsSpread = true;
}
else if (!isSymbol(fa)) {
throw new Error(`[SX] $$__lambda: Invalid formal argument(s): item(s) of args[${i}] is not symbol.`);
}
}
const fnBody = args.slice(1);
return compileLambda(state, formalArgs, lastIsSpread, fnBody);
};
// tslint:disable-next-line:variable-name
export const $__defun = (state, name) => (...args) => {

@@ -318,2 +346,15 @@ // S expression: ($__defun 'name '(sym1 ... symN) 'expr ... 'expr)

// tslint:disable-next-line:variable-name
export const $comp$__defun = (state, name) => (...args) => {
// S expression: ($__defun 'name '(sym1 ... symN) 'expr ... 'expr)
// -> S expr : fn
checkParamsLength('$$__defun', args, 3);
const car = $$first(...args);
const fn = $comp$__lambda(state, name)(...args.slice(1));
state.funcMap.set(car.symbol, {
name: car.symbol,
fn: (st, nm) => fn
});
return fn;
};
// tslint:disable-next-line:variable-name
export const $__refun = (state, name) => (...args) => {

@@ -320,0 +361,0 @@ // S expression: ($refun 'name)

@@ -82,2 +82,25 @@ // Copyright (c) 2018, Shellyl_N and Authors

}, {
name: '$$closure',
fn: (state, name) => (list) => {
// S expression: ($$closure (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
// -> S expr : ($__capture '(u-sym1 ... u-symM) ($$__lambda '(sym1 ... symN) 'expr ... 'expr) )
const symUse = isSymbol(list[2], 'use');
if (!symUse) {
throw new Error(`[SX] $closure: Invalid syntax: missing 'use' keyword.`);
}
return [{ symbol: '$__capture' }, quote(state, list[3]), quote(state, [{ symbol: '$$__lambda' },
quote(state, list[1]),
...(list.slice(4).map(x => quote(state, x))),
])];
},
}, {
name: '|=>',
fn: (state, name) => (list) => {
// S expression: (|-> (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
// -> S expr : ($closure (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
return [{ symbol: '$$closure' },
...list.slice(1),
];
},
}, {
name: '$lambda',

@@ -101,2 +124,20 @@ fn: (state, name) => (list) => {

}, {
name: '$$lambda',
fn: (state, name) => (list) => {
// S expression: ($$lambda (sym1 ... symN) expr ... expr)
// -> S expr : ($$__lambda '(sym1 ... symN) 'expr ... 'expr)
return [{ symbol: '$$__lambda' },
...(list.slice(1).map(x => quote(state, x))),
];
},
}, {
name: '=>',
fn: (state, name) => (list) => {
// S expression: ($$lambda (sym1 ... symN) expr ... expr)
// -> S expr : ($$__lambda '(sym1 ... symN) 'expr ... 'expr)
return [{ symbol: '$$__lambda' },
...(list.slice(1).map(x => quote(state, x))),
];
},
}, {
name: '$defun',

@@ -111,2 +152,11 @@ fn: (state, name) => (list) => {

}, {
name: '$$defun',
fn: (state, name) => (list) => {
// S expression: ($$defun name (sym1 ... symN) expr ... expr)
// -> S expr : ($$__defun 'name '(sym1 ... symN) 'expr ... 'expr)
return [{ symbol: '$$__defun' },
...(list.slice(1).map(x => quote(state, x))),
];
},
}, {
name: '$refun',

@@ -113,0 +163,0 @@ fn: (state, name) => (list) => {

@@ -63,5 +63,11 @@ // Copyright (c) 2018, Shellyl_N and Authors

}, {
name: '$$__lambda',
fn: ops.$comp$__lambda,
}, {
name: '$__defun',
fn: ops.$__defun,
}, {
name: '$$__defun',
fn: ops.$comp$__defun,
}, {
name: '$__refun',

@@ -68,0 +74,0 @@ fn: ops.$__refun,

@@ -112,2 +112,13 @@ export declare type SxMacro = (state: SxParserState, name: string) => (list: SxToken[]) => SxToken;

export declare type SxList = SxDottedPair | SxAtom[];
export declare type CompilerOperator = (r: SxToken[], args: SxToken[]) => string;
export interface CompilerContext {
_$_vars: any[];
varsCount: number;
varNames: Map<string, string>;
varNamesCount: number;
varDefs: string;
ops: Map<string, CompilerOperator>;
makeScope: (scoped: () => void) => void;
compileToken: (body: any[], i: number) => string;
}
export interface LsxConfig {

@@ -114,0 +125,0 @@ jsx: (comp: any, props: any, ...children: any[]) => any;

20

package.json
{
"name": "liyad",
"private": false,
"version": "0.0.14",
"version": "0.0.15",
"description": "Liyad (Lisp yet another DSL interpreter) is very small Lisp interpreter written in JavaScript.",

@@ -30,4 +30,4 @@ "keywords": [

"@types/jasmine": "^2.8.9",
"@types/node": "^10.11.7",
"@types/react": "^16.4.16",
"@types/node": "^10.12.2",
"@types/react": "^16.4.18",
"@types/react-dom": "^16.0.9",

@@ -37,9 +37,9 @@ "babel-loader": "^8.0.4",

"cross-env": "^5.2.0",
"jasmine": "^3.2.0",
"jasmine": "^3.3.0",
"jasmine-spec-reporter": "^4.2.1",
"mkdirp": "^0.5.1",
"npm-run-all": "^4.1.3",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"red-agate": "^0.2.12",
"react": "^16.6.0",
"react-dom": "^16.6.0",
"red-agate": "^0.2.14",
"reflect-metadata": "^0.1.12",

@@ -49,6 +49,6 @@ "rimraf": "^2.6.2",

"source-map-loader": "^0.2.4",
"ts-loader": "^5.2.1",
"ts-loader": "^5.3.0",
"tslint": "^5.11.0",
"typescript": "^3.1.2",
"webpack": "^4.20.2",
"typescript": "^3.1.6",
"webpack": "^4.23.1",
"webpack-cli": "^3.1.2"

@@ -55,0 +55,0 @@ },

@@ -345,1 +345,32 @@

});
describe("compiler", function() {
it("compiler 1", function() {
expect(lisp`
($$defun tarai(x y z)
($if (<= x y)
y
($self ($self (- x 1) y z)
($self (- y 1) z x)
($self (- z 1) x y) )))
(tarai 9 6 0)
`).toEqual(9);
});
it("compiler 2", function() {
expect(lisp`
($local (fib-sub)
($set fib-sub ($$closure (n a b) use (fib-sub)
($set a (+ a 1))
($set b (+ b 1))
($if (< n 3)
($cond (=== n 2) (+ a b)
(=== n 1) a
true 0)
($self (- n 1) (+ a b) a) ) ))
($capture (fib-sub)
($$defun fib (n) (fib-sub n 1 0)) ) )
($map ($range 0 20) (<- fib))
`).toEqual([0, 2, 3, 7, 13, 23, 39, 65, 107, 175, 285, 463, 751, 1217, 1971, 3191, 5165, 8359, 13527, 21889, 35419]);
});
});

@@ -23,2 +23,3 @@ // Copyright (c) 2018, Shellyl_N and Authors

toNumber } from '../../evaluate';
import { compileLambda } from '../../compile';
import { checkParamsLength } from '../../errors';

@@ -371,2 +372,33 @@

// tslint:disable-next-line:variable-name
export const $comp$__lambda = (state: SxParserState, name: string) => (...args: any[]) => {
// S expression: ($__lambda '(sym1 ... symN) 'expr1 ... 'exprN)
// -> S expr : fn
checkParamsLength('$$__lambda', args, 2);
const formalArgs: SxSymbol[] = args[0];
if (! Array.isArray(formalArgs)) {
throw new Error(`[SX] $$__lambda: Invalid argument(s): args[0] is not array.`);
}
let lastIsSpread = false;
for (let i = 0; i < formalArgs.length; i++) {
const fa = formalArgs[i];
if (i === formalArgs.length - 1 && state.config.enableSpread &&
Array.isArray(fa) && isSymbol(fa[0], state.config.reservedNames.spread)) {
if (! isSymbol(fa[1])) {
throw new Error(`[SX] $$__lambda: Invalid formal argument(s): item(s) of args[${i}] is not symbol.`);
}
formalArgs[i] = fa[1];
lastIsSpread = true;
} else if (! isSymbol(fa)) {
throw new Error(`[SX] $$__lambda: Invalid formal argument(s): item(s) of args[${i}] is not symbol.`);
}
}
const fnBody = args.slice(1);
return compileLambda(state, formalArgs, lastIsSpread, fnBody);
};
// tslint:disable-next-line:variable-name
export const $__defun = (state: SxParserState, name: string) => (...args: any[]) => {

@@ -388,2 +420,18 @@ // S expression: ($__defun 'name '(sym1 ... symN) 'expr ... 'expr)

// tslint:disable-next-line:variable-name
export const $comp$__defun = (state: SxParserState, name: string) => (...args: any[]) => {
// S expression: ($__defun 'name '(sym1 ... symN) 'expr ... 'expr)
// -> S expr : fn
checkParamsLength('$$__defun', args, 3);
const car: SxSymbol = $$first(...args);
const fn = $comp$__lambda(state, name)(...args.slice(1));
state.funcMap.set(car.symbol, {
name: car.symbol,
fn: (st, nm) => fn
});
return fn;
};
// tslint:disable-next-line:variable-name
export const $__refun = (state: SxParserState, name: string) => (...args: any[]) => {

@@ -390,0 +438,0 @@ // S expression: ($refun 'name)

@@ -90,2 +90,25 @@ // Copyright (c) 2018, Shellyl_N and Authors

}, {
name: '$$closure',
fn: (state: SxParserState, name: string) => (list) => {
// S expression: ($$closure (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
// -> S expr : ($__capture '(u-sym1 ... u-symM) ($$__lambda '(sym1 ... symN) 'expr ... 'expr) )
const symUse = isSymbol(list[2], 'use');
if (! symUse) {
throw new Error(`[SX] $closure: Invalid syntax: missing 'use' keyword.`);
}
return [{symbol: '$__capture'}, quote(state, list[3]), quote(state, [{symbol: '$$__lambda'},
quote(state, list[1]),
...(list.slice(4).map(x => quote(state, x))),
])];
},
}, {
name: '|=>',
fn: (state: SxParserState, name: string) => (list) => {
// S expression: (|-> (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
// -> S expr : ($closure (sym1 ... symN) use (u-sym1 ... u-symM) expr ... expr)
return [{symbol: '$$closure'},
...list.slice(1),
];
},
}, {
name: '$lambda',

@@ -109,2 +132,20 @@ fn: (state: SxParserState, name: string) => (list) => {

}, {
name: '$$lambda',
fn: (state: SxParserState, name: string) => (list) => {
// S expression: ($$lambda (sym1 ... symN) expr ... expr)
// -> S expr : ($$__lambda '(sym1 ... symN) 'expr ... 'expr)
return [{symbol: '$$__lambda'},
...(list.slice(1).map(x => quote(state, x))),
];
},
}, {
name: '=>',
fn: (state: SxParserState, name: string) => (list) => {
// S expression: ($$lambda (sym1 ... symN) expr ... expr)
// -> S expr : ($$__lambda '(sym1 ... symN) 'expr ... 'expr)
return [{symbol: '$$__lambda'},
...(list.slice(1).map(x => quote(state, x))),
];
},
}, {
name: '$defun',

@@ -119,2 +160,11 @@ fn: (state: SxParserState, name: string) => (list) => {

}, {
name: '$$defun',
fn: (state: SxParserState, name: string) => (list) => {
// S expression: ($$defun name (sym1 ... symN) expr ... expr)
// -> S expr : ($$__defun 'name '(sym1 ... symN) 'expr ... 'expr)
return [{symbol: '$$__defun'},
...(list.slice(1).map(x => quote(state, x))),
];
},
}, {
name: '$refun',

@@ -121,0 +171,0 @@ fn: (state: SxParserState, name: string) => (list) => {

@@ -69,5 +69,11 @@ // Copyright (c) 2018, Shellyl_N and Authors

}, {
name: '$$__lambda',
fn: ops.$comp$__lambda,
}, {
name: '$__defun',
fn: ops.$__defun,
}, {
name: '$$__defun',
fn: ops.$comp$__defun,
}, {
name: '$__refun',

@@ -74,0 +80,0 @@ fn: ops.$__refun,

@@ -150,2 +150,19 @@

export type CompilerOperator = (r: SxToken[], args: SxToken[]) => string;
export interface CompilerContext {
_$_vars: any[];
varsCount: number;
varNames: Map<string, string>;
varNamesCount: number;
varDefs: string;
ops: Map<string, CompilerOperator>;
makeScope: (scoped: () => void) => void;
compileToken: (body: any[], i: number) => string;
}
export interface LsxConfig {

@@ -152,0 +169,0 @@ jsx: (comp: any, props: any, ...children: any[]) => any;

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc