wisp
Version:
Homoiconic JS with clojure syntax, s-expressions & macros
668 lines • 104 kB
JavaScript
{
var _ns_ = {
id: 'wisp.analyzer',
doc: void 0
};
var wisp_ast = require('./ast');
var meta = wisp_ast.meta;
var withMeta = wisp_ast.withMeta;
var isSymbol = wisp_ast.isSymbol;
var isKeyword = wisp_ast.isKeyword;
var isQuote = wisp_ast.isQuote;
var symbol = wisp_ast.symbol;
var namespace = wisp_ast.namespace;
var name = wisp_ast.name;
var prStr = wisp_ast.prStr;
var isUnquote = wisp_ast.isUnquote;
var isUnquoteSplicing = wisp_ast.isUnquoteSplicing;
var wisp_sequence = require('./sequence');
var isList = wisp_sequence.isList;
var list = wisp_sequence.list;
var conj = wisp_sequence.conj;
var partition = wisp_sequence.partition;
var seq = wisp_sequence.seq;
var isEmpty = wisp_sequence.isEmpty;
var map = wisp_sequence.map;
var vec = wisp_sequence.vec;
var isEvery = wisp_sequence.isEvery;
var concat = wisp_sequence.concat;
var first = wisp_sequence.first;
var second = wisp_sequence.second;
var third = wisp_sequence.third;
var rest = wisp_sequence.rest;
var last = wisp_sequence.last;
var butlast = wisp_sequence.butlast;
var interleave = wisp_sequence.interleave;
var cons = wisp_sequence.cons;
var count = wisp_sequence.count;
var some = wisp_sequence.some;
var assoc = wisp_sequence.assoc;
var reduce = wisp_sequence.reduce;
var filter = wisp_sequence.filter;
var isSeq = wisp_sequence.isSeq;
var wisp_runtime = require('./runtime');
var isNil = wisp_runtime.isNil;
var isDictionary = wisp_runtime.isDictionary;
var isVector = wisp_runtime.isVector;
var keys = wisp_runtime.keys;
var vals = wisp_runtime.vals;
var isString = wisp_runtime.isString;
var isNumber = wisp_runtime.isNumber;
var isBoolean = wisp_runtime.isBoolean;
var isDate = wisp_runtime.isDate;
var isRePattern = wisp_runtime.isRePattern;
var isEven = wisp_runtime.isEven;
var isEqual = wisp_runtime.isEqual;
var max = wisp_runtime.max;
var dec = wisp_runtime.dec;
var dictionary = wisp_runtime.dictionary;
var subs = wisp_runtime.subs;
var inc = wisp_runtime.inc;
var dec = wisp_runtime.dec;
var wisp_expander = require('./expander');
var macroexpand = wisp_expander.macroexpand;
var wisp_string = require('./string');
var split = wisp_string.split;
var join = wisp_string.join;
}
var syntaxError = exports.syntaxError = function syntaxError(message, form) {
return function () {
var metadataø1 = meta(form);
var lineø1 = ((metadataø1 || 0)['start'] || 0)['line'];
var uriø1 = (metadataø1 || 0)['uri'];
var columnø1 = ((metadataø1 || 0)['start'] || 0)['column'];
var errorø1 = SyntaxError('' + message + '\n' + 'Form: ' + prStr(form) + '\n' + 'URI: ' + uriø1 + '\n' + 'Line: ' + lineø1 + '\n' + 'Column: ' + columnø1);
errorø1.lineNumber = lineø1;
errorø1.line = lineø1;
errorø1.columnNumber = columnø1;
errorø1.column = columnø1;
errorø1.fileName = uriø1;
errorø1.uri = uriø1;
return (function () {
throw errorø1;
})();
}.call(this);
};
var analyzeKeyword = exports.analyzeKeyword = function analyzeKeyword(env, form) {
return {
'op': 'constant',
'form': form
};
};
var __specials__ = exports.__specials__ = {};
var installSpecial = exports.installSpecial = function installSpecial(op, analyzer) {
return (__specials__ || 0)[name(op)] = analyzer;
};
var analyzeSpecial = exports.analyzeSpecial = function analyzeSpecial(analyzer, env, form) {
return function () {
var metadataø1 = meta(form);
var astø1 = analyzer(env, form);
return conj({
'start': (metadataø1 || 0)['start'],
'end': (metadataø1 || 0)['end']
}, astø1);
}.call(this);
};
var analyzeIf = exports.analyzeIf = function analyzeIf(env, form) {
return function () {
var formsø1 = rest(form);
var testø1 = analyze(env, first(formsø1));
var consequentø1 = analyze(env, second(formsø1));
var alternateø1 = analyze(env, third(formsø1));
count(formsø1) < 2 ? syntaxError('Malformed if expression, too few operands', form) : void 0;
return {
'op': 'if',
'form': form,
'test': testø1,
'consequent': consequentø1,
'alternate': alternateø1
};
}.call(this);
};
installSpecial('if', analyzeIf);
var analyzeThrow = exports.analyzeThrow = function analyzeThrow(env, form) {
return function () {
var expressionø1 = analyze(env, second(form));
return {
'op': 'throw',
'form': form,
'throw': expressionø1
};
}.call(this);
};
installSpecial('throw', analyzeThrow);
var analyzeTry = exports.analyzeTry = function analyzeTry(env, form) {
return function () {
var formsø1 = vec(rest(form));
var tailø1 = last(formsø1);
var finalizerFormø1 = isList(tailø1) && isEqual(symbol(void 0, 'finally'), first(tailø1)) ? rest(tailø1) : void 0;
var finalizerø1 = finalizerFormø1 ? analyzeBlock(env, finalizerFormø1) : void 0;
var bodyFormø1 = finalizerø1 ? butlast(formsø1) : formsø1;
var tailø2 = last(bodyFormø1);
var handlerFormø1 = isList(tailø2) && isEqual(symbol(void 0, 'catch'), first(tailø2)) ? rest(tailø2) : void 0;
var handlerø1 = handlerFormø1 ? conj({ 'name': analyze(env, first(handlerFormø1)) }, analyzeBlock(env, rest(handlerFormø1))) : void 0;
var bodyø1 = handlerFormø1 ? analyzeBlock(subEnv(env), butlast(bodyFormø1)) : analyzeBlock(subEnv(env), bodyFormø1);
return {
'op': 'try',
'form': form,
'body': bodyø1,
'handler': handlerø1,
'finalizer': finalizerø1
};
}.call(this);
};
installSpecial('try', analyzeTry);
var analyzeSet = exports.analyzeSet = function analyzeSet(env, form) {
return function () {
var bodyø1 = rest(form);
var leftø1 = first(bodyø1);
var rightø1 = second(bodyø1);
var targetø1 = isSymbol(leftø1) ? analyzeSymbol(env, leftø1) : isList(leftø1) ? analyzeList(env, leftø1) : 'else' ? leftø1 : void 0;
var valueø1 = analyze(env, rightø1);
return {
'op': 'set!',
'target': targetø1,
'value': valueø1,
'form': form
};
}.call(this);
};
installSpecial('set!', analyzeSet);
var analyzeNew = exports.analyzeNew = function analyzeNew(env, form) {
return function () {
var bodyø1 = rest(form);
var constructorø1 = analyze(env, first(bodyø1));
var paramsø1 = vec(map(function ($1) {
return analyze(env, $1);
}, rest(bodyø1)));
return {
'op': 'new',
'constructor': constructorø1,
'form': form,
'params': paramsø1
};
}.call(this);
};
installSpecial('new', analyzeNew);
var analyzeAget = exports.analyzeAget = function analyzeAget(env, form) {
return function () {
var bodyø1 = rest(form);
var targetø1 = analyze(env, first(bodyø1));
var attributeø1 = second(bodyø1);
var fieldø1 = isQuote(attributeø1) && isSymbol(second(attributeø1)) && second(attributeø1);
return isNil(attributeø1) ? syntaxError('Malformed aget expression expected (aget object member)', form) : {
'op': 'member-expression',
'computed': !fieldø1,
'form': form,
'target': targetø1,
'property': fieldø1 ? conj(analyzeSpecial(analyzeIdentifier, env, fieldø1), { 'binding': void 0 }) : analyze(env, attributeø1)
};
}.call(this);
};
installSpecial('aget', analyzeAget);
var parseDef = exports.parseDef = function parseDef() {
switch (arguments.length) {
case 1:
var id = arguments[0];
return { 'id': id };
case 2:
var id = arguments[0];
var init = arguments[1];
return {
'id': id,
'init': init
};
case 3:
var id = arguments[0];
var doc = arguments[1];
var init = arguments[2];
return {
'id': id,
'doc': doc,
'init': init
};
default:
throw RangeError('Wrong number of arguments passed');
}
};
var analyzeDef = exports.analyzeDef = function analyzeDef(env, form) {
return function () {
var paramsø1 = parseDef.apply(void 0, vec(rest(form)));
var idø1 = (paramsø1 || 0)['id'];
var metadataø1 = meta(idø1);
var bindingø1 = analyzeSpecial(analyzeDeclaration, env, idø1);
var initø1 = analyze(env, (paramsø1 || 0)['init']);
var docø1 = (paramsø1 || 0)['doc'] || (metadataø1 || 0)['doc'];
return {
'op': 'def',
'doc': docø1,
'id': bindingø1,
'init': initø1,
'export': (env || 0)['top'] && !(metadataø1 || 0)['private'],
'form': form
};
}.call(this);
};
installSpecial('def', analyzeDef);
var analyzeDo = exports.analyzeDo = function analyzeDo(env, form) {
return function () {
var expressionsø1 = rest(form);
var bodyø1 = analyzeBlock(env, expressionsø1);
return conj(bodyø1, {
'op': 'do',
'form': form
});
}.call(this);
};
installSpecial('do', analyzeDo);
var analyzeSymbol = exports.analyzeSymbol = function analyzeSymbol(env, form) {
return function () {
var formsø1 = split(name(form), '.');
var metadataø1 = meta(form);
var startø1 = (metadataø1 || 0)['start'];
var endø1 = (metadataø1 || 0)['end'];
var expansionø1 = count(formsø1) > 1 ? list(symbol(void 0, 'aget'), withMeta(symbol(first(formsø1)), conj(metadataø1, {
'start': startø1,
'end': {
'line': (endø1 || 0)['line'],
'column': 1 + (startø1 || 0)['column'] + count(first(formsø1))
}
})), list(symbol(void 0, 'quote'), withMeta(symbol(join('.', rest(formsø1))), conj(metadataø1, {
'end': endø1,
'start': {
'line': (startø1 || 0)['line'],
'column': 1 + (startø1 || 0)['column'] + count(first(formsø1))
}
})))) : void 0;
return expansionø1 ? analyze(env, withMeta(expansionø1, meta(form))) : analyzeSpecial(analyzeIdentifier, env, form);
}.call(this);
};
var analyzeIdentifier = exports.analyzeIdentifier = function analyzeIdentifier(env, form) {
return {
'op': 'var',
'type': 'identifier',
'form': form,
'start': (meta(form) || 0)['start'],
'end': (meta(form) || 0)['end'],
'binding': resolveBinding(env, form)
};
};
var unresolvedBinding = exports.unresolvedBinding = function unresolvedBinding(env, form) {
return {
'op': 'unresolved-binding',
'type': 'unresolved-binding',
'identifier': {
'type': 'identifier',
'form': symbol(namespace(form), name(form))
},
'start': (meta(form) || 0)['start'],
'end': (meta(form) || 0)['end']
};
};
var resolveBinding = exports.resolveBinding = function resolveBinding(env, form) {
return ((env || 0)['locals'] || 0)[name(form)] || ((env || 0)['enclosed'] || 0)[name(form)] || unresolvedBinding(env, form);
};
var analyzeShadow = exports.analyzeShadow = function analyzeShadow(env, id) {
return function () {
var bindingø1 = resolveBinding(env, id);
return {
'depth': inc((bindingø1 || 0)['depth'] || 0),
'shadow': bindingø1
};
}.call(this);
};
var analyzeBinding = exports.analyzeBinding = function analyzeBinding(env, form) {
return function () {
var idø1 = first(form);
var bodyø1 = second(form);
return conj(analyzeShadow(env, idø1), {
'op': 'binding',
'type': 'binding',
'id': idø1,
'init': analyze(env, bodyø1),
'form': form
});
}.call(this);
};
var analyzeDeclaration = exports.analyzeDeclaration = function analyzeDeclaration(env, form) {
!!(namespace(form) || 1 < count(split('.', '' + form))) ? (function () {
throw Error('' + 'Assert failed: ' + '' + '(not (or (namespace form) (< 1 (count (split "." (str form))))))');
})() : void 0;
return conj(analyzeShadow(env, form), {
'op': 'var',
'type': 'identifier',
'depth': 0,
'id': form,
'form': form
});
};
var analyzeParam = exports.analyzeParam = function analyzeParam(env, form) {
return conj(analyzeShadow(env, form), {
'op': 'param',
'type': 'parameter',
'id': form,
'form': form,
'start': (meta(form) || 0)['start'],
'end': (meta(form) || 0)['end']
});
};
var withBinding = exports.withBinding = function withBinding(env, form) {
return conj(env, {
'locals': assoc((env || 0)['locals'], name((form || 0)['id']), form),
'bindings': conj((env || 0)['bindings'], form)
});
};
var withParam = exports.withParam = function withParam(env, form) {
return conj(withBinding(env, form), { 'params': conj((env || 0)['params'], form) });
};
var subEnv = exports.subEnv = function subEnv(env) {
return {
'enclosed': conj({}, (env || 0)['enclosed'], (env || 0)['locals']),
'locals': {},
'bindings': [],
'params': (env || 0)['params'] || []
};
};
var analyzeLet_ = exports.analyzeLet_ = function analyzeLet_(env, form, isLoop) {
return function () {
var expressionsø1 = rest(form);
var bindingsø1 = first(expressionsø1);
var bodyø1 = rest(expressionsø1);
var isValidBindingsø1 = isVector(bindingsø1) && isEven(count(bindingsø1));
var _ø1 = !isValidBindingsø1 ? (function () {
throw Error('' + 'Assert failed: ' + 'bindings must be vector of even number of elements' + 'valid-bindings?');
})() : void 0;
var scopeø1 = reduce(function ($1, $2) {
return withBinding($1, analyzeBinding($1, $2));
}, subEnv(env), partition(2, bindingsø1));
var bindingsø2 = (scopeø1 || 0)['bindings'];
var expressionsø2 = analyzeBlock(isLoop ? conj(scopeø1, { 'params': bindingsø2 }) : scopeø1, bodyø1);
return {
'op': 'let',
'form': form,
'start': (meta(form) || 0)['start'],
'end': (meta(form) || 0)['end'],
'bindings': bindingsø2,
'statements': (expressionsø2 || 0)['statements'],
'result': (expressionsø2 || 0)['result']
};
}.call(this);
};
var analyzeLet = exports.analyzeLet = function analyzeLet(env, form) {
return analyzeLet_(env, form, false);
};
installSpecial('let*', analyzeLet);
var analyzeLoop = exports.analyzeLoop = function analyzeLoop(env, form) {
return conj(analyzeLet_(env, form, true), { 'op': 'loop' });
};
installSpecial('loop*', analyzeLoop);
var analyzeRecur = exports.analyzeRecur = function analyzeRecur(env, form) {
return function () {
var paramsø1 = (env || 0)['params'];
var formsø1 = vec(map(function ($1) {
return analyze(env, $1);
}, rest(form)));
return isEqual(count(paramsø1), count(formsø1)) ? {
'op': 'recur',
'form': form,
'params': formsø1
} : syntaxError('Recurs with wrong number of arguments', form);
}.call(this);
};
installSpecial('recur', analyzeRecur);
var analyzeQuotedList = exports.analyzeQuotedList = function analyzeQuotedList(form) {
return {
'op': 'list',
'items': map(analyzeQuoted, vec(form)),
'form': form,
'start': (meta(form) || 0)['start'],
'end': (meta(form) || 0)['end']
};
};
var analyzeQuotedVector = exports.analyzeQuotedVector = function analyzeQuotedVector(form) {
return {
'op': 'vector',
'items': map(analyzeQuoted, form),
'form': form,
'start': (meta(form) || 0)['start'],
'end': (meta(form) || 0)['end']
};
};
var analyzeQuotedDictionary = exports.analyzeQuotedDictionary = function analyzeQuotedDictionary(form) {
return function () {
var namesø1 = vec(map(analyzeQuoted, keys(form)));
var valuesø1 = vec(map(analyzeQuoted, vals(form)));
return {
'op': 'dictionary',
'form': form,
'keys': namesø1,
'values': valuesø1,
'start': (meta(form) || 0)['start'],
'end': (meta(form) || 0)['end']
};
}.call(this);
};
var analyzeQuotedSymbol = exports.analyzeQuotedSymbol = function analyzeQuotedSymbol(form) {
return {
'op': 'symbol',
'name': name(form),
'namespace': namespace(form),
'form': form
};
};
var analyzeQuotedKeyword = exports.analyzeQuotedKeyword = function analyzeQuotedKeyword(form) {
return {
'op': 'keyword',
'name': name(form),
'namespace': namespace(form),
'form': form
};
};
var analyzeQuoted = exports.analyzeQuoted = function analyzeQuoted(form) {
return isSymbol(form) ? analyzeQuotedSymbol(form) : isKeyword(form) ? analyzeQuotedKeyword(form) : isList(form) ? analyzeQuotedList(form) : isVector(form) ? analyzeQuotedVector(form) : isDictionary(form) ? analyzeQuotedDictionary(form) : 'else' ? {
'op': 'constant',
'form': form
} : void 0;
};
var analyzeQuote = exports.analyzeQuote = function analyzeQuote(env, form) {
return analyzeQuoted(second(form));
};
installSpecial('quote', analyzeQuote);
var analyzeStatement = exports.analyzeStatement = function analyzeStatement(env, form) {
return function () {
var statementsø1 = (env || 0)['statements'] || [];
var bindingsø1 = (env || 0)['bindings'] || [];
var statementø1 = analyze(conj(env, { 'statements': void 0 }), form);
var opø1 = (statementø1 || 0)['op'];
var defsø1 = isEqual(opø1, 'def') ? [(statementø1 || 0)['var']] : 'else' ? void 0 : void 0;
return conj(env, {
'statements': conj(statementsø1, statementø1),
'bindings': concat(bindingsø1, defsø1)
});
}.call(this);
};
var analyzeBlock = exports.analyzeBlock = function analyzeBlock(env, form) {
return function () {
var bodyø1 = count(form) > 1 ? reduce(analyzeStatement, env, butlast(form)) : void 0;
var resultø1 = analyze(bodyø1 || env, last(form));
return {
'statements': (bodyø1 || 0)['statements'],
'result': resultø1
};
}.call(this);
};
var analyzeFnMethod = exports.analyzeFnMethod = function analyzeFnMethod(env, form) {
return function () {
var signatureø1 = isList(form) && isVector(first(form)) ? first(form) : syntaxError('Malformed fn overload form', form);
var bodyø1 = rest(form);
var variadicø1 = some(function ($1) {
return isEqual(symbol(void 0, '&'), $1);
}, signatureø1);
var paramsø1 = variadicø1 ? filter(function ($1) {
return !isEqual(symbol(void 0, '&'), $1);
}, signatureø1) : signatureø1;
var arityø1 = variadicø1 ? dec(count(paramsø1)) : count(paramsø1);
var scopeø1 = reduce(function ($1, $2) {
return withParam($1, analyzeParam($1, $2));
}, conj(env, { 'params': [] }), paramsø1);
return conj(analyzeBlock(scopeø1, bodyø1), {
'op': 'overload',
'variadic': variadicø1,
'arity': arityø1,
'params': (scopeø1 || 0)['params'],
'form': form
});
}.call(this);
};
var analyzeFn = exports.analyzeFn = function analyzeFn(env, form) {
return function () {
var formsø1 = rest(form);
var formsø2 = isSymbol(first(formsø1)) ? formsø1 : cons(void 0, formsø1);
var idø1 = first(formsø2);
var bindingø1 = idø1 ? analyzeSpecial(analyzeDeclaration, env, idø1) : void 0;
var bodyø1 = rest(formsø2);
var overloadsø1 = isVector(first(bodyø1)) ? list(bodyø1) : isList(first(bodyø1)) && isVector(first(first(bodyø1))) ? bodyø1 : 'else' ? syntaxError('' + 'Malformed fn expression, ' + 'parameter declaration (' + prStr(first(bodyø1)) + ') must be a vector', form) : void 0;
var scopeø1 = bindingø1 ? withBinding(subEnv(env), bindingø1) : subEnv(env);
var methodsø1 = map(function ($1) {
return analyzeFnMethod(scopeø1, $1);
}, vec(overloadsø1));
var arityø1 = max.apply(void 0, map(function ($1) {
return ($1 || 0)['arity'];
}, methodsø1));
var variadicø1 = some(function ($1) {
return ($1 || 0)['variadic'];
}, methodsø1);
return {
'op': 'fn',
'type': 'function',
'id': bindingø1,
'variadic': variadicø1,
'methods': methodsø1,
'form': form
};
}.call(this);
};
installSpecial('fn*', analyzeFn);
var parseReferences = exports.parseReferences = function parseReferences(forms) {
return reduce(function (references, form) {
return isSeq(form) ? assoc(references, name(first(form)), vec(rest(form))) : references;
}, {}, forms);
};
var parseRequire = exports.parseRequire = function parseRequire(form) {
return function () {
var requirementø1 = isSymbol(form) ? [form] : vec(form);
var idø1 = first(requirementø1);
var paramsø1 = dictionary.apply(void 0, rest(requirementø1));
var renamesø1 = (paramsø1 || 0)['\uA789rename'];
var namesø1 = (paramsø1 || 0)['\uA789refer'];
var aliasø1 = (paramsø1 || 0)['\uA789as'];
var referencesø1 = !isEmpty(namesø1) ? reduce(function (refers, reference) {
return conj(refers, {
'op': 'refer',
'form': reference,
'name': reference,
'rename': (renamesø1 || 0)[reference] || (renamesø1 || 0)[name(reference)],
'ns': idø1
});
}, [], namesø1) : void 0;
return {
'op': 'require',
'alias': aliasø1,
'ns': idø1,
'refer': referencesø1,
'form': form
};
}.call(this);
};
var analyzeNs = exports.analyzeNs = function analyzeNs(env, form) {
return function () {
var formsø1 = rest(form);
var nameø1 = first(formsø1);
var bodyø1 = rest(formsø1);
var docø1 = isString(first(bodyø1)) ? first(bodyø1) : void 0;
var referencesø1 = parseReferences(docø1 ? rest(bodyø1) : bodyø1);
var requirementsø1 = (referencesø1 || 0)['require'] ? map(parseRequire, (referencesø1 || 0)['require']) : void 0;
return {
'op': 'ns',
'name': nameø1,
'doc': docø1,
'require': requirementsø1 ? vec(requirementsø1) : void 0,
'form': form
};
}.call(this);
};
installSpecial('ns', analyzeNs);
var analyzeList = exports.analyzeList = function analyzeList(env, form) {
return function () {
var expansionø1 = macroexpand(form, env);
var operatorø1 = first(form);
var analyzerø1 = isSymbol(operatorø1) && (__specials__ || 0)[name(operatorø1)];
return !(expansionø1 === form) ? analyze(env, expansionø1) : analyzerø1 ? analyzeSpecial(analyzerø1, env, expansionø1) : 'else' ? analyzeInvoke(env, expansionø1) : void 0;
}.call(this);
};
var analyzeVector = exports.analyzeVector = function analyzeVector(env, form) {
return function () {
var itemsø1 = vec(map(function ($1) {
return analyze(env, $1);
}, form));
return {
'op': 'vector',
'form': form,
'items': itemsø1
};
}.call(this);
};
var analyzeDictionary = exports.analyzeDictionary = function analyzeDictionary(env, form) {
return function () {
var namesø1 = vec(map(function ($1) {
return analyze(env, $1);
}, keys(form)));
var valuesø1 = vec(map(function ($1) {
return analyze(env, $1);
}, vals(form)));
return {
'op': 'dictionary',
'keys': namesø1,
'values': valuesø1,
'form': form
};
}.call(this);
};
var analyzeInvoke = exports.analyzeInvoke = function analyzeInvoke(env, form) {
return function () {
var calleeø1 = analyze(env, first(form));
var paramsø1 = vec(map(function ($1) {
return analyze(env, $1);
}, rest(form)));
return {
'op': 'invoke',
'callee': calleeø1,
'params': paramsø1,
'form': form
};
}.call(this);
};
var analyzeConstant = exports.analyzeConstant = function analyzeConstant(env, form) {
return {
'op': 'constant',
'form': form
};
};
var analyze = exports.analyze = function analyze() {
switch (arguments.length) {
case 1:
var form = arguments[0];
return analyze({
'locals': {},
'bindings': [],
'top': true
}, form);
case 2:
var env = arguments[0];
var form = arguments[1];
return isNil(form) ? analyzeConstant(env, form) : isSymbol(form) ? analyzeSymbol(env, form) : isList(form) ? isEmpty(form) ? analyzeQuoted(form) : analyzeList(env, form) : isDictionary(form) ? analyzeDictionary(env, form) : isVector(form) ? analyzeVector(env, form) : isKeyword(form) ? analyzeKeyword(env, form) : 'else' ? analyzeConstant(env, form) : void 0;
default:
throw RangeError('Wrong number of arguments passed');
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFub255bW91cy53aXNwIl0sIm5hbWVzIjpbIl9uc18iLCJpZCIsImRvYyIsIm1ldGEiLCJ3aXRoTWV0YSIsImlzU3ltYm9sIiwiaXNLZXl3b3JkIiwiaXNRdW90ZSIsInN5bWJvbCIsIm5hbWVzcGFjZSIsIm5hbWUiLCJwclN0ciIsImlzVW5xdW90ZSIsImlzVW5xdW90ZVNwbGljaW5nIiwiaXNMaXN0IiwibGlzdCIsImNvbmoiLCJwYXJ0aXRpb24iLCJzZXEiLCJpc0VtcHR5IiwibWFwIiwidmVjIiwiaXNFdmVyeSIsImNvbmNhdCIsImZpcnN0Iiwic2Vjb25kIiwidGhpcmQiLCJyZXN0IiwibGFzdCIsImJ1dGxhc3QiLCJpbnRlcmxlYXZlIiwiY29ucyIsImNvdW50Iiwic29tZSIsImFzc29jIiwicmVkdWNlIiwiZmlsdGVyIiwiaXNTZXEiLCJpc05pbCIsImlzRGljdGlvbmFyeSIsImlzVmVjdG9yIiwia2V5cyIsInZhbHMiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiaXNEYXRlIiwiaXNSZVBhdHRlcm4iLCJpc0V2ZW4iLCJpc0VxdWFsIiwibWF4IiwiZGVjIiwiZGljdGlvbmFyeSIsInN1YnMiLCJpbmMiLCJtYWNyb2V4cGFuZCIsInNwbGl0Iiwiam9pbiIsInN5bnRheEVycm9yIiwiZXhwb3J0cyIsIm1lc3NhZ2UiLCJmb3JtIiwibWV0YWRhdGHDuDEiLCJsaW5lw7gxIiwidXJpw7gxIiwiY29sdW1uw7gxIiwiZXJyb3LDuDEiLCJTeW50YXhFcnJvciIsImxpbmVOdW1iZXIiLCJsaW5lIiwiY29sdW1uTnVtYmVyIiwiY29sdW1uIiwiZmlsZU5hbWUiLCJ1cmkiLCJhbmFseXplS2V5d29yZCIsImVudiIsIl9fc3BlY2lhbHNfXyIsImluc3RhbGxTcGVjaWFsIiwib3AiLCJhbmFseXplciIsImFuYWx5emVTcGVjaWFsIiwiYXN0w7gxIiwiYW5hbHl6ZUlmIiwiZm9ybXPDuDEiLCJ0ZXN0w7gxIiwiYW5hbHl6ZSIsImNvbnNlcXVlbnTDuDEiLCJhbHRlcm5hdGXDuDEiLCJhbmFseXplVGhyb3ciLCJleHByZXNzaW9uw7gxIiwiYW5hbHl6ZVRyeSIsInRhaWzDuDEiLCJmaW5hbGl6ZXJGb3Jtw7gxIiwiZmluYWxpemVyw7gxIiwiYW5hbHl6ZUJsb2NrIiwiYm9keUZvcm3DuDEiLCJ0YWlsw7gyIiwiaGFuZGxlckZvcm3DuDEiLCJoYW5kbGVyw7gxIiwiYm9kecO4MSIsInN1YkVudiIsImFuYWx5emVTZXQiLCJsZWZ0w7gxIiwicmlnaHTDuDEiLCJ0YXJnZXTDuDEiLCJhbmFseXplU3ltYm9sIiwiYW5hbHl6ZUxpc3QiLCJ2YWx1ZcO4MSIsImFuYWx5emVOZXciLCJjb25zdHJ1Y3RvcsO4MSIsInBhcmFtc8O4MSIsIiQxIiwiYW5hbHl6ZUFnZXQiLCJhdHRyaWJ1dGXDuDEiLCJmaWVsZMO4MSIsImFuYWx5emVJZGVudGlmaWVyIiwicGFyc2VEZWYiLCJpbml0IiwiYW5hbHl6ZURlZiIsImlkw7gxIiwiYmluZGluZ8O4MSIsImFuYWx5emVEZWNsYXJhdGlvbiIsImluaXTDuDEiLCJkb2PDuDEiLCJhbmFseXplRG8iLCJleHByZXNzaW9uc8O4MSIsInN0YXJ0w7gxIiwiZW5kw7gxIiwiZXhwYW5zaW9uw7gxIiwicmVzb2x2ZUJpbmRpbmciLCJ1bnJlc29sdmVkQmluZGluZyIsImFuYWx5emVTaGFkb3ciLCJhbmFseXplQmluZGluZyIsImFuYWx5emVQYXJhbSIsIndpdGhCaW5kaW5nIiwid2l0aFBhcmFtIiwiYW5hbHl6ZUxldF8iLCJpc0xvb3AiLCJiaW5kaW5nc8O4MSIsImlzVmFsaWRCaW5kaW5nc8O4MSIsIl/DuDEiLCJzY29wZcO4MSIsIiQyIiwiYmluZGluZ3PDuDIiLCJleHByZXNzaW9uc8O4MiIsImFuYWx5emVMZXQiLCJhbmFseXplTG9vcCIsImFuYWx5emVSZWN1ciIsImFuYWx5emVRdW90ZWRMaXN0IiwiYW5hbHl6ZVF1b3RlZCIsImFuYWx5emVRdW90ZWRWZWN0b3IiLCJhbmFseXplUXVvdGVkRGljdGlvbmFyeSIsIm5hbWVzw7gxIiwidmFsdWVzw7gxIiwiYW5hbHl6ZVF1b3RlZFN5bWJvbCIsImFuYWx5emVRdW90ZWRLZXl3b3JkIiwiYW5hbHl6ZVF1b3RlIiwiYW5hbHl6ZVN0YXRlbWVudCIsInN0YXRlbWVudHPDuDEiLCJzdGF0ZW1lbnTDuDEiLCJvcMO4MSIsImRlZnPDuDEiLCJyZXN1bHTDuDEiLCJhbmFseXplRm5NZXRob2QiLCJzaWduYXR1cmXDuDEiLCJ2YXJpYWRpY8O4MSIsImFyaXR5w7gxIiwiYW5hbHl6ZUZuIiwiZm9ybXPDuDIiLCJvdmVybG9hZHPDuDEiLCJtZXRob2Rzw7gxIiwicGFyc2VSZWZlcmVuY2VzIiwiZm9ybXMiLCJyZWZlcmVuY2VzIiwicGFyc2VSZXF1aXJlIiwicmVxdWlyZW1lbnTDuDEiLCJyZW5hbWVzw7gxIiwiYWxpYXPDuDEiLCJyZWZlcmVuY2Vzw7gxIiwicmVmZXJzIiwicmVmZXJlbmNlIiwiYW5hbHl6ZU5zIiwibmFtZcO4MSIsInJlcXVpcmVtZW50c8O4MSIsIm9wZXJhdG9yw7gxIiwiYW5hbHl6ZXLDuDEiLCJhbmFseXplSW52b2tlIiwiYW5hbHl6ZVZlY3RvciIsIml0ZW1zw7gxIiwiYW5hbHl6ZURpY3Rpb25hcnkiLCJjYWxsZWXDuDEiLCJhbmFseXplQ29uc3RhbnQiXSwibWFwcGluZ3MiOiI7SUFBQSxJQUFDQSxJLEdBQUQ7QUFBQSxZQUFBQyxFLEVBQUksZUFBSjtBQUFBLFlBQUFDLEcsRUFBQSxLLENBQUE7QUFBQSxVOztRQUM4QkMsSUFBQSxHLFNBQUFBLEk7UUFBS0MsUUFBQSxHLFNBQUFBLFE7UUFBVUMsUUFBQSxHLFNBQUFBLFE7UUFBUUMsU0FBQSxHLFNBQUFBLFM7UUFDdkJDLE9BQUEsRyxTQUFBQSxPO1FBQU9DLE1BQUEsRyxTQUFBQSxNO1FBQU9DLFNBQUEsRyxTQUFBQSxTO1FBQVVDLElBQUEsRyxTQUFBQSxJO1FBQUtDLEtBQUEsRyxTQUFBQSxLO1FBQzdCQyxTQUFBLEcsU0FBQUEsUztRQUFTQyxpQkFBQSxHLFNBQUFBLGlCOztRQUNKQyxNQUFBLEcs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