Comparing version 0.0.14 to 0.0.15
@@ -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; |
{ | ||
"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
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
1343797
256
25520
2