From 356bf24c5a046b4396303db4fdd513edb12599b5 Mon Sep 17 00:00:00 2001 From: OJ Kwon Date: Fri, 20 Jul 2018 14:54:03 -0700 Subject: [PATCH] feat(getfnptrhandler): wrapper to add, removefunction --- src/SassAsmModule.ts | 2 ++ src/interop/fnPtrHandler.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/interop/fnPtrHandler.ts diff --git a/src/SassAsmModule.ts b/src/SassAsmModule.ts index dd3f73f..538c000 100644 --- a/src/SassAsmModule.ts +++ b/src/SassAsmModule.ts @@ -10,6 +10,8 @@ interface SassAsmModule extends Required { _libsass_version: () => number; _libsass_language_version: () => number; _sass2scss_version: () => number; + addFunction: (fn: Function) => number; + removeFunction: (fnPtr: number) => void; } export { SassAsmModule }; diff --git a/src/interop/fnPtrHandler.ts b/src/interop/fnPtrHandler.ts new file mode 100644 index 0000000..7509c26 --- /dev/null +++ b/src/interop/fnPtrHandler.ts @@ -0,0 +1,26 @@ +import { SassAsmModule } from '../SassAsmModule'; + +/** + * Returns handler object to wrap `addFunction` and `removeFunction` + */ +const getFnPtrHandler = ({ addFunction, removeFunction }: SassAsmModule) => { + let count = 0; + + return { + add: (fn: Function) => { + if (count === 20) { + throw new Error('Maximum number of function pointer added'); + } + count++; + return addFunction(fn); + }, + remove: (fnPtr: number) => { + if (count > 0) { + count--; + removeFunction(fnPtr); + } + } + }; +}; + +export { getFnPtrHandler };