diff --git a/src/prelude/index.ts b/src/prelude/index.ts index 488414b..5c00166 100644 --- a/src/prelude/index.ts +++ b/src/prelude/index.ts @@ -40,6 +40,7 @@ export const globals = { 'var?': function (this: VM, v: string) { return typeof v !== 'string' || this.scope.has(v) }, + ref: (fn: Function) => fn, // type predicates 'string?': (v: any) => toValue(v).type === 'string', diff --git a/src/prelude/tests/info.test.ts b/src/prelude/tests/info.test.ts index 9c24a8a..5534452 100644 --- a/src/prelude/tests/info.test.ts +++ b/src/prelude/tests/info.test.ts @@ -77,3 +77,15 @@ describe('introspection', () => { await expect(`describe 'hello'`).toEvaluateTo("#", globals) }) }) + +describe('ref', () => { + expect(`rnd = do x: true end; rnd | type`).toEvaluateTo('boolean') + expect(`rnd = do x: true end; ref rnd | type`).toEvaluateTo('function') + + expect(`math.random | type`).toEvaluateTo('number') + expect(`ref math.random | type`).toEvaluateTo('native') + + expect(`rnd = math.random; rnd | type`).toEvaluateTo('number') + expect(`rnd = ref math.random; rnd | type`).toEvaluateTo('number') + expect(`rnd = ref math.random; ref rnd | type`).toEvaluateTo('native') +}) \ No newline at end of file