fez-lisp
Version:
Lisp interpreted & compiled to JavaScript
133 lines (128 loc) • 2.71 kB
JavaScript
export const TYPE = 0
export const VALUE = 1
export const APPLY = 0
export const WORD = 1
export const ATOM = 2
export const TRUE = 1
export const FALSE = 0
export const PLACEHOLDER = '.'
export const MUTATION_SUFFIX = '!'
export const PREDICATE_SUFFIX = '?'
export const STATIC_TYPES = {
NUMBER: 'Number',
ABSTRACTION: 'Abstraction',
UNKNOWN: 'Unknown',
ATOM: 'Atom',
COLLECTION: 'Collection',
BOOLEAN: 'Boolean',
NUMBERS: 'Numbers',
BOOLEANS: 'Booleans',
ABSTRACTIONS: 'Abstractions',
COLLECTIONS: 'Collections',
AS_NUMBER: 'numberp',
ANY: 'Any'
}
export const KEYWORDS = {
LOOP: 'loop',
CREATE_ARRAY: 'array',
ARRAY_LENGTH: 'length',
IS_ATOM: 'atom?',
IS_LAMBDA: 'lambda?',
ADDITION: '+',
SUBTRACTION: '-',
MULTIPLICATION: '*',
DIVISION: '/',
REMAINDER_OF_DIVISION: 'mod',
BITWISE_AND: '&',
BITWISE_OR: '|',
BITWISE_NOT: '~',
BITWISE_XOR: '^',
BITWISE_LEFT_SHIFT: '<<',
BITWISE_RIGHT_SHIFT: '>>',
GET_ARRAY: 'get',
BLOCK: 'do',
ANONYMOUS_FUNCTION: 'lambda',
IF: 'if',
NOT: 'not',
EQUAL: '=',
LESS_THAN: '<',
GREATHER_THAN: '>',
GREATHER_THAN_OR_EQUAL: '>=',
LESS_THAN_OR_EQUAL: '<=',
AND: 'and',
OR: 'or',
CALL_FUNCTION: 'apply',
DEFINE_VARIABLE: 'let',
SET_ARRAY: 'set!',
POP_ARRAY: 'pop!'
}
export const TYPES = {
[APPLY]: 'APPLY',
[WORD]: 'WORD',
[ATOM]: 'ATOM'
}
export const RUNTIME_TYPES = {
NUMBER: 'number',
ARRAY: 'array',
LAMBDA: 'lambda'
}
export const DEBUG = {
STRING: 'string',
LOG: 'log',
ASSERT: 'assert',
SIGNATURE: 'Info',
LIST_THEMES: 'theme?',
SET_THEME: 'theme!',
TYPE_SIGNATURE: 'T'
}
export const SPECIAL_FORMS_SET = new Set(
Object.values(KEYWORDS).concat(Object.values(STATIC_TYPES))
)
export const STATIC_TYPES_SET = new Set(Object.values(STATIC_TYPES))
export const PREDICATES_INPUT_SET = new Set([
KEYWORDS.IF,
KEYWORDS.AND,
KEYWORDS.OR,
KEYWORDS.NOT,
KEYWORDS.LOOP
])
export const PREDICATES_OUTPUT_SET = new Set([
KEYWORDS.AND,
KEYWORDS.OR,
KEYWORDS.NOT,
KEYWORDS.EQUAL,
KEYWORDS.GREATHER_THAN,
KEYWORDS.LESS_THAN,
KEYWORDS.GREATHER_THAN_OR_EQUAL,
KEYWORDS.LESS_THAN_OR_EQUAL,
KEYWORDS.IS_ATOM,
KEYWORDS.IS_LAMBDA
])
export const MUTATORS_SET = new Set([
KEYWORDS.SET_ARRAY,
'array:set-and-get!',
'var:set-and-get!',
'array:set!',
'push!',
'array:append!',
'array:push!',
'var:set!'
])
export const GETTERS_SET = new Set([
KEYWORDS.GET_ARRAY,
'array:first',
'array:second',
'array:third',
'array:last',
'matrix:get',
'matrix:set-and-get!',
'array:set-and-get!',
'var:set-and-get!',
'map:set-and-get!',
'set:add-and-get!',
'set:get',
'map:get',
'array:get',
'array:pop!',
'var:get'
])