UNPKG

struct-compile

Version:

Create a JavaScript class from a C structure

87 lines (81 loc) 2.84 kB
import { Trie } from './trie.js'; export const cDataTypes = { 'char': { signed: true, length: 8 }, 'signed char': { signed: true, length: 8 }, 'unsigned char': { signed: false, length: 8 }, 'short': { signed: true, length: 16 }, 'unsigned short': { signed: false, length: 16 }, 'int': { signed: true, length: (arch) => arch.bits == 64 ? 32 : 16, }, 'unsigned int': { signed: false, length: (arch) => arch.bits == 64 ? 32 : 16, }, 'long': { signed: true, length: (arch) => arch.bits == 64 ? 64 : 32, }, 'unsigned long': { signed: false, length: (arch) => arch.bits == 64 ? 64 : 32, }, 'long long': { signed: true, length: 64 }, 'unsigned long long': { signed: false, length: 64 }, 'bool': { signed: false, length: 1 }, 'float': { signed: true, length: 32, floating: true, customKey: 'Float' }, 'double': { signed: true, length: 64, floating: true, customKey: 'Double' }, 'long double': { floating: true, signed: true, //length: (arch) => arch.bits == 64 ? 128 : 96, length: (arch) => { throw new Error('long double not supported'); }, }, //stdint.h 'int8_t': { signed: true, length: 8 }, 'uint8_t': { signed: false, length: 8 }, 'int16_t': { signed: true, length: 16 }, 'uint16_t': { signed: false, length: 16 }, 'int32_t': { signed: true, length: 32 }, 'uint32_t': { signed: false, length: 32 }, 'int64_t': { signed: true, length: 64 }, 'uint64_t': { signed: false, length: 64 }, 'int_least8_t': { signed: true, length: 8 }, 'uint_least8_t': { signed: false, length: 8 }, 'int_least16_t': { signed: true, length: 16 }, 'uint_least16_t': { signed: false, length: 16 }, 'int_least32_t': { signed: true, length: 32 }, 'uint_least32_t': { signed: false, length: 32 }, 'int_least64_t': { signed: true, length: 64 }, 'uint_least64_t': { signed: false, length: 64 }, 'int_fast8_t': { signed: true, length: 8 }, 'uint_fast8_t': { signed: false, length: 8 }, 'int_fast16_t': { signed: true, length: 16 }, 'uint_fast16_t': { signed: false, length: 16 }, 'int_fast32_t': { signed: true, length: 32 }, 'uint_fast32_t': { signed: false, length: 32 }, 'int_fast64_t': { signed: true, length: 64 }, 'uint_fast64_t': { signed: false, length: 64 }, 'intptr_t': { signed: true, length: (arch) => arch.bits == 64 ? 64 : 32, }, 'uintptr_t': { signed: false, length: (arch) => arch.bits == 64 ? 64 : 32, }, 'intmax_t': { signed: true, length: 64 }, 'uintmax_t': { signed: false, length: 64 }, 'void': { signed: false, length: 0 }, }; export const typeKeywords = Object.keys(cDataTypes); export const trie = new Trie(); for (const key of typeKeywords) { trie.add(key); } export function matchType(str, startOffset) { return trie.search(str, startOffset); }