Last active
June 1, 2021 10:12
-
-
Save kakkun61/40b0717689fa3f1d49e5593c3e6af48f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifdef __AVR_ARCH__ | |
#define __stdcall | |
#endif | |
#ifndef V_COMMIT_HASH | |
#define V_COMMIT_HASH "90292ce" | |
#endif | |
#ifndef V_CURRENT_COMMIT_HASH | |
#define V_CURRENT_COMMIT_HASH "90292ce" | |
#endif | |
// V comptime_defines: | |
#define _VPROD (1) | |
// V typedefs: | |
// BEGIN_multi_return_typedefs | |
typedef struct multi_return_u32_u32 multi_return_u32_u32; | |
typedef struct multi_return_u32_u32_u32 multi_return_u32_u32_u32; | |
typedef struct multi_return_int_strconv__PrepNumber multi_return_int_strconv__PrepNumber; | |
typedef struct multi_return_u64_int multi_return_u64_int; | |
typedef struct multi_return_strconv__Dec32_bool multi_return_strconv__Dec32_bool; | |
typedef struct multi_return_strconv__Dec64_bool multi_return_strconv__Dec64_bool; | |
typedef struct multi_return_u64_u64 multi_return_u64_u64; | |
// END_multi_return_typedefs | |
typedef struct strconv__BF_param strconv__BF_param; | |
typedef struct strconv__PrepNumber strconv__PrepNumber; | |
typedef struct strconv__Dec32 strconv__Dec32; | |
typedef struct strconv__Dec64 strconv__Dec64; | |
typedef struct strconv__Uint128 strconv__Uint128; | |
typedef union strconv__Uf32 strconv__Uf32; | |
typedef union strconv__Uf64 strconv__Uf64; | |
typedef union strconv__Float64u strconv__Float64u; | |
typedef union strconv__Float32u strconv__Float32u; | |
typedef struct array array; | |
typedef struct VCastTypeIndexName VCastTypeIndexName; | |
typedef struct VAssertMetaInfo VAssertMetaInfo; | |
typedef struct MethodArgs MethodArgs; | |
typedef struct FunctionData FunctionData; | |
typedef struct FieldData FieldData; | |
typedef struct StructAttribute StructAttribute; | |
typedef struct SymbolInfo SymbolInfo; | |
typedef struct SymbolInfoContainer SymbolInfoContainer; | |
typedef struct Line64 Line64; | |
typedef struct ExceptionRecord ExceptionRecord; | |
typedef struct ContextRecord ContextRecord; | |
typedef struct ExceptionPointers ExceptionPointers; | |
typedef struct DenseArray DenseArray; | |
typedef struct map map; | |
typedef struct Error Error; | |
typedef struct None__ None__; | |
typedef struct Option Option; | |
typedef struct VMemoryBlock VMemoryBlock; | |
typedef struct SortedMap SortedMap; | |
typedef struct mapnode mapnode; | |
typedef struct string string; | |
typedef struct ustring ustring; | |
typedef struct RepIndex RepIndex; | |
typedef union StrIntpMem StrIntpMem; | |
typedef struct StrIntpCgenData StrIntpCgenData; | |
typedef struct StrIntpData StrIntpData; | |
// V typedefs2: | |
typedef struct Option_int Option_int; | |
// V cheaders: | |
// Generated by the V compiler | |
#if defined(__TINYC__) && defined(__has_include) | |
// tcc does not support has_include properly yet, turn it off completely | |
#undef __has_include | |
#endif | |
#if defined(__has_include) | |
#if __has_include(<inttypes.h>) | |
#include <inttypes.h> | |
#else | |
#error VERROR_MESSAGE The C compiler can not find <inttypes.h> . Please install build-essentials | |
#endif | |
#else | |
#include <inttypes.h> | |
#endif | |
//================================== builtin types ================================*/ | |
typedef int64_t i64; | |
typedef int16_t i16; | |
typedef int8_t i8; | |
typedef uint64_t u64; | |
typedef uint32_t u32; | |
typedef uint16_t u16; | |
typedef uint8_t byte; | |
typedef uint32_t rune; | |
typedef float f32; | |
typedef double f64; | |
typedef int64_t int_literal; | |
typedef double float_literal; | |
typedef unsigned char* byteptr; | |
typedef void* voidptr; | |
typedef char* charptr; | |
typedef byte array_fixed_byte_300 [300]; | |
typedef struct sync__Channel* chan; | |
#ifndef __cplusplus | |
#ifndef bool | |
typedef byte bool; | |
#define true 1 | |
#define false 0 | |
#endif | |
#endif | |
typedef u64 (*MapHashFn)(voidptr); | |
typedef bool (*MapEqFn)(voidptr, voidptr); | |
typedef void (*MapCloneFn)(voidptr, voidptr); | |
typedef void (*MapFreeFn)(voidptr); | |
//============================== HELPER C MACROS =============================*/ | |
//#define tos4(s, slen) ((string){.str=(s), .len=(slen)}) | |
// _SLIT0 is used as NULL string for literal arguments | |
// `"" s` is used to enforce a string literal argument | |
#define _SLIT0 (string){.len=0} | |
#define _SLIT(s) ((string){.str=(byteptr)("" s), .len=(sizeof(s)-1), .is_lit=1}) | |
//#define _SLIT(s) ((string){.str=(byteptr)("" s), .len=(sizeof(s)-1), .is_lit=1}) | |
// take the address of an rvalue | |
#define ADDR(type, expr) (&((type[]){expr}[0])) | |
// copy something to the heap | |
#define HEAP(type, expr) ((type*)memdup((void*)&((type[]){expr}[0]), sizeof(type))) | |
#define _PUSH_MANY(arr, val, tmp, tmp_typ) {tmp_typ tmp = (val); array_push_many(arr, tmp.data, tmp.len);} | |
#define _IN_MAP(val, m) map_exists(m, val) | |
// unsigned/signed comparisons | |
static inline bool _us32_gt(uint32_t a, int32_t b) { return a > INT32_MAX || (int32_t)a > b; } | |
static inline bool _us32_ge(uint32_t a, int32_t b) { return a >= INT32_MAX || (int32_t)a >= b; } | |
static inline bool _us32_eq(uint32_t a, int32_t b) { return a <= INT32_MAX && (int32_t)a == b; } | |
static inline bool _us32_ne(uint32_t a, int32_t b) { return a > INT32_MAX || (int32_t)a != b; } | |
static inline bool _us32_le(uint32_t a, int32_t b) { return a <= INT32_MAX && (int32_t)a <= b; } | |
static inline bool _us32_lt(uint32_t a, int32_t b) { return a < INT32_MAX && (int32_t)a < b; } | |
static inline bool _us64_gt(uint64_t a, int64_t b) { return a > INT64_MAX || (int64_t)a > b; } | |
static inline bool _us64_ge(uint64_t a, int64_t b) { return a >= INT64_MAX || (int64_t)a >= b; } | |
static inline bool _us64_eq(uint64_t a, int64_t b) { return a <= INT64_MAX && (int64_t)a == b; } | |
static inline bool _us64_ne(uint64_t a, int64_t b) { return a > INT64_MAX || (int64_t)a != b; } | |
static inline bool _us64_le(uint64_t a, int64_t b) { return a <= INT64_MAX && (int64_t)a <= b; } | |
static inline bool _us64_lt(uint64_t a, int64_t b) { return a < INT64_MAX && (int64_t)a < b; } | |
#define EMPTY_VARG_INITIALIZATION 0 | |
#define EMPTY_STRUCT_DECLARATION | |
#define EMPTY_STRUCT_INITIALIZATION | |
// Due to a tcc bug, the length of an array needs to be specified, but GCC crashes if it is... | |
#define EMPTY_ARRAY_OF_ELEMS(x,n) (x[]) | |
#define TCCSKIP(x) x | |
#define __NOINLINE __attribute__((noinline)) | |
#define __IRQHANDLER __attribute__((interrupt)) | |
#if defined(__x86_64__) | |
#define __V_amd64 1 | |
#endif | |
#if defined(__aarch64__) || defined(__arm64__) | |
#define __V_arm64 1 | |
#endif | |
// Using just __GNUC__ for detecting gcc, is not reliable because other compilers define it too: | |
#ifdef __GNUC__ | |
#define __V_GCC__ | |
#endif | |
#ifdef __TINYC__ | |
#undef __V_GCC__ | |
#endif | |
#ifdef __cplusplus | |
#undef __V_GCC__ | |
#endif | |
#ifdef __clang__ | |
#undef __V_GCC__ | |
#endif | |
#ifdef _MSC_VER | |
#undef __V_GCC__ | |
#undef EMPTY_STRUCT_INITIALIZATION | |
#define EMPTY_STRUCT_INITIALIZATION 0 | |
#endif | |
#ifdef __TINYC__ | |
#undef EMPTY_STRUCT_DECLARATION | |
#define EMPTY_STRUCT_DECLARATION char _dummy | |
#undef EMPTY_ARRAY_OF_ELEMS | |
#define EMPTY_ARRAY_OF_ELEMS(x,n) (x[n]) | |
#undef __NOINLINE | |
#undef __IRQHANDLER | |
// tcc does not support inlining at all | |
#define __NOINLINE | |
#define __IRQHANDLER | |
#undef TCCSKIP | |
#define TCCSKIP(x) | |
// #include <byteswap.h> | |
#ifndef _WIN32 | |
#include <execinfo.h> | |
int tcc_backtrace(const char *fmt, ...); | |
#endif | |
#endif | |
// Use __offsetof_ptr instead of __offset_of, when you *do* have a valid pointer, to avoid UB: | |
#ifndef __offsetof_ptr | |
#define __offsetof_ptr(ptr,PTYPE,FIELDNAME) ((size_t)((byte *)&((PTYPE *)ptr)->FIELDNAME - (byte *)ptr)) | |
#endif | |
// for __offset_of | |
#ifndef __offsetof | |
#define __offsetof(PTYPE,FIELDNAME) ((size_t)((char *)&((PTYPE *)0)->FIELDNAME - (char *)0)) | |
#endif | |
#define OPTION_CAST(x) (x) | |
#ifndef V64_PRINTFORMAT | |
#ifdef PRIx64 | |
#define V64_PRINTFORMAT "0x%"PRIx64 | |
#elif defined(__WIN32__) | |
#define V64_PRINTFORMAT "0x%I64x" | |
#elif defined(__linux__) && defined(__LP64__) | |
#define V64_PRINTFORMAT "0x%lx" | |
#else | |
#define V64_PRINTFORMAT "0x%llx" | |
#endif | |
#endif | |
#if defined(_WIN32) || defined(__CYGWIN__) | |
#define VV_EXPORTED_SYMBOL extern __declspec(dllexport) | |
#define VV_LOCAL_SYMBOL static | |
#else | |
// 4 < gcc < 5 is used by some older Ubuntu LTS and Centos versions, | |
// and does not support __has_attribute(visibility) ... | |
#ifndef __has_attribute | |
#define __has_attribute(x) 0 // Compatibility with non-clang compilers. | |
#endif | |
#if (defined(__GNUC__) && (__GNUC__ >= 4)) || (defined(__clang__) && __has_attribute(visibility)) | |
#ifdef ARM | |
#define VV_EXPORTED_SYMBOL extern __attribute__((externally_visible,visibility("default"))) | |
#else | |
#define VV_EXPORTED_SYMBOL extern __attribute__((visibility("default"))) | |
#endif | |
#define VV_LOCAL_SYMBOL __attribute__ ((visibility ("hidden"))) | |
#else | |
#define VV_EXPORTED_SYMBOL extern | |
#define VV_LOCAL_SYMBOL static | |
#endif | |
#endif | |
#ifdef __cplusplus | |
#include <utility> | |
#define _MOV std::move | |
#else | |
#define _MOV | |
#endif | |
#if defined(__TINYC__) && defined(__has_include) | |
// tcc does not support has_include properly yet, turn it off completely | |
#undef __has_include | |
#endif | |
// c_headers | |
typedef int (*qsort_callback_func)(const void*, const void*); | |
#include <stdio.h> // TODO remove all these includes, define all function signatures and types manually | |
#include <stdlib.h> | |
#include <string.h> | |
#if defined(_WIN32) || defined(__CYGWIN__) | |
#define VV_EXPORTED_SYMBOL extern __declspec(dllexport) | |
#define VV_LOCAL_SYMBOL static | |
#else | |
// 4 < gcc < 5 is used by some older Ubuntu LTS and Centos versions, | |
// and does not support __has_attribute(visibility) ... | |
#ifndef __has_attribute | |
#define __has_attribute(x) 0 // Compatibility with non-clang compilers. | |
#endif | |
#if (defined(__GNUC__) && (__GNUC__ >= 4)) || (defined(__clang__) && __has_attribute(visibility)) | |
#ifdef ARM | |
#define VV_EXPORTED_SYMBOL extern __attribute__((externally_visible,visibility("default"))) | |
#else | |
#define VV_EXPORTED_SYMBOL extern __attribute__((visibility("default"))) | |
#endif | |
#define VV_LOCAL_SYMBOL __attribute__ ((visibility ("hidden"))) | |
#else | |
#define VV_EXPORTED_SYMBOL extern | |
#define VV_LOCAL_SYMBOL static | |
#endif | |
#endif | |
#if defined(__TINYC__) && defined(__has_include) | |
// tcc does not support has_include properly yet, turn it off completely | |
#undef __has_include | |
#endif | |
#ifndef _WIN32 | |
#if defined __has_include | |
#if __has_include (<execinfo.h>) | |
#include <execinfo.h> | |
#else | |
// Most probably musl OR __ANDROID__ ... | |
int backtrace (void **__array, int __size) { return 0; } | |
char **backtrace_symbols (void *const *__array, int __size){ return 0; } | |
void backtrace_symbols_fd (void *const *__array, int __size, int __fd){} | |
#endif | |
#endif | |
#endif | |
#include <stdarg.h> // for va_list | |
//================================== GLOBALS =================================*/ | |
//byte g_str_buf[1024]; | |
byte* g_str_buf; | |
int load_so(byteptr); | |
void reload_so(); | |
void _vinit(int ___argc, voidptr ___argv); | |
void _vcleanup(); | |
#define sigaction_size sizeof(sigaction); | |
#define _ARR_LEN(a) ( (sizeof(a)) / (sizeof(a[0])) ) | |
void v_free(voidptr ptr); | |
voidptr memdup(voidptr src, int sz); | |
static voidptr memfreedup(voidptr ptr, voidptr src, int sz) { | |
v_free(ptr); // heloe | |
return memdup(src, sz); | |
} | |
#if INTPTR_MAX == INT32_MAX | |
#define TARGET_IS_32BIT 1 | |
#elif INTPTR_MAX == INT64_MAX | |
#define TARGET_IS_64BIT 1 | |
#elif INTPTR_MAX == INT16_MAX | |
#define TARGET_IS_8BIT 1 | |
#else | |
#error "The environment is not 32 or 64-bit." | |
#endif | |
#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ || defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || defined(__BIG_ENDIAN__) || defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || defined(_MIBSEB) || defined(__MIBSEB) || defined(__MIBSEB__) | |
#define TARGET_ORDER_IS_BIG 1 | |
#elif defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__) || defined(_M_AMD64) || defined(_M_X64) || defined(_M_IX86) | |
#define TARGET_ORDER_IS_LITTLE 1 | |
#else | |
#error "Unknown architecture endianness" | |
#endif | |
#ifndef _WIN32 | |
#include <ctype.h> | |
#include <locale.h> // tolower | |
#ifndef __AVR_ARCH__ | |
#include <sys/time.h> | |
#endif | |
#include <unistd.h> // sleep | |
extern char **environ; | |
#endif | |
#if defined(__CYGWIN__) && !defined(_WIN32) | |
#error Cygwin is not supported, please use MinGW or Visual Studio. | |
#endif | |
#ifdef __linux__ | |
#include <sys/types.h> | |
#include <sys/wait.h> // os__wait uses wait on nix | |
#endif | |
#ifdef __FreeBSD__ | |
#include <sys/types.h> | |
#include <sys/wait.h> // os__wait uses wait on nix | |
#endif | |
#ifdef __DragonFly__ | |
#include <sys/types.h> | |
#include <sys/wait.h> // os__wait uses wait on nix | |
#endif | |
#ifdef __OpenBSD__ | |
#include <sys/types.h> | |
#include <sys/resource.h> | |
#include <sys/wait.h> // os__wait uses wait on nix | |
#endif | |
#ifdef __NetBSD__ | |
#include <sys/wait.h> // os__wait uses wait on nix | |
#endif | |
#ifdef __sun | |
#include <sys/types.h> | |
#include <sys/wait.h> // os__wait uses wait on nix | |
#endif | |
#ifdef _WIN32 | |
#define WINVER 0x0600 | |
#ifdef _WIN32_WINNT | |
#undef _WIN32_WINNT | |
#endif | |
#define _WIN32_WINNT 0x0600 | |
#ifndef WIN32_FULL | |
#define WIN32_LEAN_AND_MEAN | |
#endif | |
#ifndef _UNICODE | |
#define _UNICODE | |
#endif | |
#ifndef UNICODE | |
#define UNICODE | |
#endif | |
#include <windows.h> | |
#include <io.h> // _waccess | |
#include <direct.h> // _wgetcwd | |
#ifdef _MSC_VER | |
// On MSVC these are the same (as long as /volatile:ms is passed) | |
#define _Atomic volatile | |
// MSVC cannot parse some things properly | |
#undef EMPTY_STRUCT_DECLARATION | |
#undef OPTION_CAST | |
#define EMPTY_STRUCT_DECLARATION char __pad | |
#define OPTION_CAST(x) | |
#undef __NOINLINE | |
#undef __IRQHANDLER | |
#define __NOINLINE __declspec(noinline) | |
#define __IRQHANDLER __declspec(naked) | |
#include <dbghelp.h> | |
#pragma comment(lib, "Dbghelp") | |
#endif | |
#elif defined __AVR_ARCH__ | |
#else | |
#include <pthread.h> | |
#ifndef PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP | |
// musl does not have that | |
#define pthread_rwlockattr_setkind_np(a, b) | |
#endif | |
#endif | |
// g_live_info is used by live.info() | |
static void* g_live_info = NULL; | |
#if defined(__MINGW32__) || defined(__MINGW64__) || (defined(_WIN32) && defined(__TINYC__)) | |
#undef PRId64 | |
#undef PRIi64 | |
#undef PRIo64 | |
#undef PRIu64 | |
#undef PRIx64 | |
#undef PRIX64 | |
#define PRId64 "lld" | |
#define PRIi64 "lli" | |
#define PRIo64 "llo" | |
#define PRIu64 "llu" | |
#define PRIx64 "llx" | |
#define PRIX64 "llX" | |
#endif | |
#ifdef _VFREESTANDING | |
#undef _VFREESTANDING | |
#endif | |
// ============== wyhash ============== | |
#ifndef wyhash_final_version_3 | |
#define wyhash_final_version_3 | |
#ifndef WYHASH_CONDOM | |
//protections that produce different results: | |
//1: normal valid behavior | |
//2: extra protection against entropy loss (probability=2^-63), aka. "blind multiplication" | |
#define WYHASH_CONDOM 1 | |
#endif | |
#ifndef WYHASH_32BIT_MUM | |
//0: normal version, slow on 32 bit systems | |
//1: faster on 32 bit systems but produces different results, incompatible with wy2u0k function | |
#define WYHASH_32BIT_MUM 0 | |
#endif | |
//includes | |
#include <stdint.h> | |
#if defined(_MSC_VER) && defined(_M_X64) | |
#include <intrin.h> | |
#pragma intrinsic(_umul128) | |
#endif | |
//likely and unlikely macros | |
#if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__) | |
#define _likely_(x) __builtin_expect(x,1) | |
#define _unlikely_(x) __builtin_expect(x,0) | |
#else | |
#define _likely_(x) (x) | |
#define _unlikely_(x) (x) | |
#endif | |
//128bit multiply function | |
static inline uint64_t _wyrot(uint64_t x) { return (x>>32)|(x<<32); } | |
static inline void _wymum(uint64_t *A, uint64_t *B){ | |
#if(WYHASH_32BIT_MUM) | |
uint64_t hh=(*A>>32)*(*B>>32), hl=(*A>>32)*(uint32_t)*B, lh=(uint32_t)*A*(*B>>32), ll=(uint64_t)(uint32_t)*A*(uint32_t)*B; | |
#if(WYHASH_CONDOM>1) | |
*A^=_wyrot(hl)^hh; *B^=_wyrot(lh)^ll; | |
#else | |
*A=_wyrot(hl)^hh; *B=_wyrot(lh)^ll; | |
#endif | |
#elif defined(__SIZEOF_INT128__) | |
__uint128_t r=*A; r*=*B; | |
#if(WYHASH_CONDOM>1) | |
*A^=(uint64_t)r; *B^=(uint64_t)(r>>64); | |
#else | |
*A=(uint64_t)r; *B=(uint64_t)(r>>64); | |
#endif | |
#elif defined(_MSC_VER) && defined(_M_X64) | |
#if(WYHASH_CONDOM>1) | |
uint64_t a, b; | |
a=_umul128(*A,*B,&b); | |
*A^=a; *B^=b; | |
#else | |
*A=_umul128(*A,*B,B); | |
#endif | |
#else | |
uint64_t ha=*A>>32, hb=*B>>32, la=(uint32_t)*A, lb=(uint32_t)*B, hi, lo; | |
uint64_t rh=ha*hb, rm0=ha*lb, rm1=hb*la, rl=la*lb, t=rl+(rm0<<32), c=t<rl; | |
lo=t+(rm1<<32); c+=lo<t; hi=rh+(rm0>>32)+(rm1>>32)+c; | |
#if(WYHASH_CONDOM>1) | |
*A^=lo; *B^=hi; | |
#else | |
*A=lo; *B=hi; | |
#endif | |
#endif | |
} | |
//multiply and xor mix function, aka MUM | |
static inline uint64_t _wymix(uint64_t A, uint64_t B){ _wymum(&A,&B); return A^B; } | |
//endian macros | |
#ifndef WYHASH_LITTLE_ENDIAN | |
#ifdef TARGET_ORDER_IS_LITTLE | |
#define WYHASH_LITTLE_ENDIAN 1 | |
#else | |
#define WYHASH_LITTLE_ENDIAN 0 | |
#endif | |
#endif | |
//read functions | |
#if (WYHASH_LITTLE_ENDIAN) | |
static inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return v;} | |
static inline uint64_t _wyr4(const uint8_t *p) { uint32_t v; memcpy(&v, p, 4); return v;} | |
#elif defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__) | |
static inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return __builtin_bswap64(v);} | |
static inline uint64_t _wyr4(const uint8_t *p) { uint32_t v; memcpy(&v, p, 4); return __builtin_bswap32(v);} | |
#elif defined(_MSC_VER) | |
static inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return _byteswap_uint64(v);} | |
static inline uint64_t _wyr4(const uint8_t *p) { uint32_t v; memcpy(&v, p, 4); return _byteswap_ulong(v);} | |
#else | |
static inline uint64_t _wyr8(const uint8_t *p) { | |
uint64_t v; memcpy(&v, p, 8); | |
return (((v >> 56) & 0xff)| ((v >> 40) & 0xff00)| ((v >> 24) & 0xff0000)| ((v >> 8) & 0xff000000)| ((v << 8) & 0xff00000000)| ((v << 24) & 0xff0000000000)| ((v << 40) & 0xff000000000000)| ((v << 56) & 0xff00000000000000)); | |
} | |
static inline uint64_t _wyr4(const uint8_t *p) { | |
uint32_t v; memcpy(&v, p, 4); | |
return (((v >> 24) & 0xff)| ((v >> 8) & 0xff00)| ((v << 8) & 0xff0000)| ((v << 24) & 0xff000000)); | |
} | |
#endif | |
static inline uint64_t _wyr3(const uint8_t *p, size_t k) { return (((uint64_t)p[0])<<16)|(((uint64_t)p[k>>1])<<8)|p[k-1];} | |
//wyhash main function | |
static inline uint64_t wyhash(const void *key, size_t len, uint64_t seed, const uint64_t *secret){ | |
const uint8_t *p=(const uint8_t *)key; seed^=*secret; uint64_t a, b; | |
if(_likely_(len<=16)){ | |
if(_likely_(len>=4)){ a=(_wyr4(p)<<32)|_wyr4(p+((len>>3)<<2)); b=(_wyr4(p+len-4)<<32)|_wyr4(p+len-4-((len>>3)<<2)); } | |
else if(_likely_(len>0)){ a=_wyr3(p,len); b=0;} | |
else a=b=0; | |
} | |
else{ | |
size_t i=len; | |
if(_unlikely_(i>48)){ | |
uint64_t see1=seed, see2=seed; | |
do{ | |
seed=_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed); | |
see1=_wymix(_wyr8(p+16)^secret[2],_wyr8(p+24)^see1); | |
see2=_wymix(_wyr8(p+32)^secret[3],_wyr8(p+40)^see2); | |
p+=48; i-=48; | |
}while(_likely_(i>48)); | |
seed^=see1^see2; | |
} | |
while(_unlikely_(i>16)){ seed=_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed); i-=16; p+=16; } | |
a=_wyr8(p+i-16); b=_wyr8(p+i-8); | |
} | |
return _wymix(secret[1]^len,_wymix(a^secret[1],b^seed)); | |
} | |
//the default secret parameters | |
static const uint64_t _wyp[4] = {0xa0761d6478bd642full, 0xe7037ed1a0b428dbull, 0x8ebc6af09c88c6e3ull, 0x589965cc75374cc3ull}; | |
//a useful 64bit-64bit mix function to produce deterministic pseudo random numbers that can pass BigCrush and PractRand | |
static inline uint64_t wyhash64(uint64_t A, uint64_t B){ A^=0xa0761d6478bd642full; B^=0xe7037ed1a0b428dbull; _wymum(&A,&B); return _wymix(A^0xa0761d6478bd642full,B^0xe7037ed1a0b428dbull);} | |
//The wyrand PRNG that pass BigCrush and PractRand | |
static inline uint64_t wyrand(uint64_t *seed){ *seed+=0xa0761d6478bd642full; return _wymix(*seed,*seed^0xe7037ed1a0b428dbull);} | |
//convert any 64 bit pseudo random numbers to uniform distribution [0,1). It can be combined with wyrand, wyhash64 or wyhash. | |
static inline double wy2u01(uint64_t r){ const double _wynorm=1.0/(1ull<<52); return (r>>12)*_wynorm;} | |
//convert any 64 bit pseudo random numbers to APPROXIMATE Gaussian distribution. It can be combined with wyrand, wyhash64 or wyhash. | |
static inline double wy2gau(uint64_t r){ const double _wynorm=1.0/(1ull<<20); return ((r&0x1fffff)+((r>>21)&0x1fffff)+((r>>42)&0x1fffff))*_wynorm-3.0;} | |
#if(!WYHASH_32BIT_MUM) | |
//fast range integer random number generation on [0,k) credit to Daniel Lemire. May not work when WYHASH_32BIT_MUM=1. It can be combined with wyrand, wyhash64 or wyhash. | |
static inline uint64_t wy2u0k(uint64_t r, uint64_t k){ _wymum(&r,&k); return k; } | |
#endif | |
#endif | |
// V includes: | |
#if defined(__TINYC__) && defined(__has_include) | |
// tcc does not support has_include properly yet, turn it off completely | |
#undef __has_include | |
#endif | |
// added by module `builtin`: | |
#if defined(__has_include) | |
#if __has_include(<float.h>) | |
#include <float.h> | |
#else | |
#error VERROR_MESSAGE Header file <float.h>, needed for module `builtin` was not found. Please install the corresponding development headers. | |
#endif | |
#else | |
#include <float.h> | |
#endif | |
// Enum definitions: | |
typedef enum { | |
strconv__Align_text_right = 0, // 0 | |
strconv__Align_text_left, // 0+1 | |
strconv__Align_text_center, // 0+2 | |
} strconv__Align_text; | |
typedef enum { | |
strconv__Char_parse_state_start, // | |
strconv__Char_parse_state_norm_char, // +1 | |
strconv__Char_parse_state_field_char, // +2 | |
strconv__Char_parse_state_pad_ch, // +3 | |
strconv__Char_parse_state_len_set_start, // +4 | |
strconv__Char_parse_state_len_set_in, // +5 | |
strconv__Char_parse_state_check_type, // +6 | |
strconv__Char_parse_state_check_float, // +7 | |
strconv__Char_parse_state_check_float_in, // +8 | |
strconv__Char_parse_state_reset_params, // +9 | |
} strconv__Char_parse_state; | |
typedef enum { | |
AttributeKind_plain, // | |
AttributeKind_string, // +1 | |
AttributeKind_number, // +2 | |
AttributeKind_comptime_define, // +3 | |
} AttributeKind; | |
typedef enum { | |
ChanState_success, // | |
ChanState_not_ready, // +1 | |
ChanState_closed, // +2 | |
} ChanState; | |
typedef enum { | |
StrIntpType_si_no_str = 0, // 0 | |
StrIntpType_si_c, // 0+1 | |
StrIntpType_si_u8, // 0+2 | |
StrIntpType_si_i8, // 0+3 | |
StrIntpType_si_u16, // 0+4 | |
StrIntpType_si_i16, // 0+5 | |
StrIntpType_si_u32, // 0+6 | |
StrIntpType_si_i32, // 0+7 | |
StrIntpType_si_u64, // 0+8 | |
StrIntpType_si_i64, // 0+9 | |
StrIntpType_si_e32, // 0+10 | |
StrIntpType_si_e64, // 0+11 | |
StrIntpType_si_f32, // 0+12 | |
StrIntpType_si_f64, // 0+13 | |
StrIntpType_si_g32, // 0+14 | |
StrIntpType_si_g64, // 0+15 | |
StrIntpType_si_s, // 0+16 | |
StrIntpType_si_p, // 0+17 | |
StrIntpType_si_vp, // 0+18 | |
} StrIntpType; | |
// V type definitions: | |
typedef struct { | |
union { | |
void* _object; | |
None__* _None__; | |
Error* _Error; | |
}; | |
int _typ; | |
string* msg; | |
int* code; | |
} IError; | |
struct string { | |
byte* str; | |
int len; | |
int is_lit; | |
}; | |
struct array { | |
int element_size; | |
voidptr data; | |
int offset; | |
int len; | |
int cap; | |
}; | |
struct DenseArray { | |
int key_bytes; | |
int value_bytes; | |
int cap; | |
int len; | |
u32 deletes; | |
byte* all_deleted; | |
byte* values; | |
byte* keys; | |
}; | |
struct map { | |
int key_bytes; | |
int value_bytes; | |
u32 even_index; | |
byte cached_hashbits; | |
byte shift; | |
DenseArray key_values; | |
u32* metas; | |
u32 extra_metas; | |
bool has_string_keys; | |
MapHashFn hash_fn; | |
MapEqFn key_eq_fn; | |
MapCloneFn clone_fn; | |
MapFreeFn free_fn; | |
int len; | |
}; | |
struct Error { | |
string msg; | |
int code; | |
}; | |
struct Option { | |
byte state; | |
IError err; | |
}; | |
typedef array Array_string; | |
typedef array Array_byte; | |
typedef array Array_int; | |
typedef int (*anon_fn_int_int__int)(int,int); | |
typedef array Array_voidptr; | |
typedef void (*FnExitCb)(); | |
typedef array Array_VCastTypeIndexName; | |
typedef array Array_MethodArgs; | |
typedef u64 Array_fixed_u64_2 [2]; | |
typedef char Array_fixed_char_254 [254]; | |
typedef int (*VectoredExceptionHandler)(ExceptionPointers*); | |
typedef array Array_byte_ptr; | |
typedef string Array_fixed_string_11 [11]; | |
typedef voidptr Array_fixed_voidptr_11 [11]; | |
typedef array Array_RepIndex; | |
typedef map Map_string_int; | |
typedef array Array_u64; | |
typedef array Array_u32; | |
typedef array Array_strconv__Uint128; | |
typedef array Array_f64; | |
typedef byte Array_fixed_byte_32 [32]; | |
typedef byte Array_fixed_byte_26 [26]; | |
typedef array Array_rune; | |
typedef byte Array_fixed_byte_256 [256]; | |
typedef array Array_StrIntpType; | |
typedef byte u8; | |
typedef Array_byte strings__Builder; | |
// builtin types: | |
//------------------ #endbuiltin | |
#ifdef __AVR_ARCH__ | |
typedef void __vthread; | |
#else | |
typedef HANDLE __v_thread; | |
#endif | |
struct ContextRecord { | |
EMPTY_STRUCT_DECLARATION; | |
}; | |
struct ExceptionPointers { | |
ExceptionRecord* exception_record; | |
ContextRecord* context_record; | |
}; | |
struct StrIntpCgenData { | |
string str; | |
string fmt; | |
string d; | |
}; | |
struct ustring { | |
string s; | |
Array_int runes; | |
int len; | |
}; | |
struct VCastTypeIndexName { | |
int tindex; | |
string tname; | |
}; | |
struct VAssertMetaInfo { | |
string fpath; | |
int line_nr; | |
string fn_name; | |
string src; | |
string op; | |
string llabel; | |
string rlabel; | |
string lvalue; | |
string rvalue; | |
}; | |
struct MethodArgs { | |
int typ; | |
string name; | |
}; | |
struct FunctionData { | |
string name; | |
Array_string attrs; | |
Array_MethodArgs args; | |
int return_type; | |
int typ; | |
}; | |
struct FieldData { | |
string name; | |
Array_string attrs; | |
bool is_pub; | |
bool is_mut; | |
int typ; | |
}; | |
struct StructAttribute { | |
string name; | |
bool has_arg; | |
string arg; | |
AttributeKind kind; | |
}; | |
struct Line64 { | |
u32 f_size_of_struct; | |
voidptr f_key; | |
u32 f_line_number; | |
byte* f_file_name; | |
u64 f_address; | |
}; | |
struct ExceptionRecord { | |
u32 code; | |
u32 flags; | |
ExceptionRecord* record; | |
voidptr address; | |
u32 param_count; | |
}; | |
union strconv__Float64u { | |
f64 f; | |
u64 u; | |
}; | |
union strconv__Float32u { | |
f32 f; | |
u32 u; | |
}; | |
struct None__ { | |
string msg; | |
int code; | |
}; | |
struct VMemoryBlock { | |
int id; | |
int cap; | |
byte* start; | |
VMemoryBlock* previous; | |
int remaining; | |
byte* current; | |
int mallocs; | |
}; | |
struct SortedMap { | |
int value_bytes; | |
mapnode* root; | |
int len; | |
}; | |
struct RepIndex { | |
int idx; | |
int val_idx; | |
}; | |
union StrIntpMem { | |
u32 d_c; | |
byte d_u8; | |
i8 d_i8; | |
u16 d_u16; | |
i16 d_i16; | |
u32 d_u32; | |
int d_i32; | |
u64 d_u64; | |
i64 d_i64; | |
f32 d_f32; | |
f64 d_f64; | |
string d_s; | |
voidptr d_p; | |
voidptr d_vp; | |
}; | |
struct strconv__BF_param { | |
byte pad_ch; | |
int len0; | |
int len1; | |
bool positive; | |
bool sign_flag; | |
strconv__Align_text allign; | |
bool rm_tail_zero; | |
}; | |
struct strconv__PrepNumber { | |
bool negative; | |
int exponent; | |
u64 mantissa; | |
}; | |
struct strconv__Dec32 { | |
u32 m; | |
int e; | |
}; | |
union strconv__Uf32 { | |
f32 f; | |
u32 u; | |
}; | |
struct strconv__Dec64 { | |
u64 m; | |
int e; | |
}; | |
union strconv__Uf64 { | |
f64 f; | |
u64 u; | |
}; | |
struct strconv__Uint128 { | |
u64 lo; | |
u64 hi; | |
}; | |
struct SymbolInfo { | |
u32 f_size_of_struct; | |
u32 f_type_index; | |
Array_fixed_u64_2 f_reserved; | |
u32 f_index; | |
u32 f_size; | |
u64 f_mod_base; | |
u32 f_flags; | |
u64 f_value; | |
u64 f_address; | |
u32 f_register; | |
u32 f_scope; | |
u32 f_tag; | |
u32 f_name_len; | |
u32 f_max_name_len; | |
byte f_name; | |
}; | |
struct mapnode { | |
voidptr* children; | |
int len; | |
Array_fixed_string_11 keys; | |
Array_fixed_voidptr_11 values; | |
}; | |
struct StrIntpData { | |
string str; | |
u32 fmt; | |
StrIntpMem d; | |
}; | |
struct SymbolInfoContainer { | |
SymbolInfo syminfo; | |
Array_fixed_char_254 f_name_rest; | |
}; | |
// BEGIN_multi_return_structs | |
struct multi_return_u32_u32 { | |
u32 arg0; | |
u32 arg1; | |
}; | |
struct multi_return_u32_u32_u32 { | |
u32 arg0; | |
u32 arg1; | |
u32 arg2; | |
}; | |
struct multi_return_int_strconv__PrepNumber { | |
int arg0; | |
strconv__PrepNumber arg1; | |
}; | |
struct multi_return_u64_int { | |
u64 arg0; | |
int arg1; | |
}; | |
struct multi_return_strconv__Dec32_bool { | |
strconv__Dec32 arg0; | |
bool arg1; | |
}; | |
struct multi_return_strconv__Dec64_bool { | |
strconv__Dec64 arg0; | |
bool arg1; | |
}; | |
struct multi_return_u64_u64 { | |
u64 arg0; | |
u64 arg1; | |
}; | |
// END_multi_return_structs | |
// V shared types: | |
// V Option_xxx definitions: | |
struct Option_int { | |
byte state; | |
IError err; | |
byte data[sizeof(int)]; | |
}; | |
// V json forward decls: | |
// V definitions: | |
// end of definitions #endif | |
strings__Builder strings__new_builder(int initial_size); | |
void strings__Builder_write_ptr(strings__Builder* b, byte* ptr, int len); | |
void strings__Builder_write_b(strings__Builder* b, byte data); | |
Option_int strings__Builder_write(strings__Builder* b, Array_byte data); | |
byte strings__Builder_byte_at(strings__Builder* b, int n); | |
void strings__Builder_write_string(strings__Builder* b, string s); | |
void strings__Builder_go_back(strings__Builder* b, int n); | |
string strings__Builder_cut_last(strings__Builder* b, int n); | |
string strings__Builder_cut_to(strings__Builder* b, int pos); | |
void strings__Builder_go_back_to(strings__Builder* b, int pos); | |
void strings__Builder_writeln(strings__Builder* b, string s); | |
string strings__Builder_last_n(strings__Builder* b, int n); | |
string strings__Builder_after(strings__Builder* b, int n); | |
string strings__Builder_str(strings__Builder* b); | |
void strings__Builder_free(strings__Builder* b); | |
u32 _const_math__bits__de_bruijn32; // inited later | |
Array_byte _const_math__bits__de_bruijn32tab; // inited later | |
u64 _const_math__bits__de_bruijn64; // inited later | |
Array_byte _const_math__bits__de_bruijn64tab; // inited later | |
int math__bits__trailing_zeros_32(u32 x); | |
int math__bits__trailing_zeros_64(u64 x); | |
u64 _const_math__bits__two32; // inited later | |
u64 _const_math__bits__mask32; // inited later | |
multi_return_u64_u64 math__bits__mul_64(u64 x, u64 y); | |
u32 _const_strconv__single_plus_zero; // inited later | |
u32 _const_strconv__single_minus_zero; // inited later | |
u32 _const_strconv__single_plus_infinity; // inited later | |
u32 _const_strconv__single_minus_infinity; // inited later | |
u64 _const_strconv__double_plus_zero; // inited later | |
u64 _const_strconv__double_minus_zero; // inited later | |
u64 _const_strconv__double_plus_infinity; // inited later | |
u64 _const_strconv__double_minus_infinity; // inited later | |
Array_u32 _const_strconv__ten_pow_table_32; // inited later | |
u32 _const_strconv__mantbits32; // inited later | |
u32 _const_strconv__expbits32; // inited later | |
#define _const_strconv__bias32 127 | |
#define _const_strconv__maxexp32 255 | |
string strconv__Dec32_get_string_32(strconv__Dec32 d, bool neg, int i_n_digit, int i_pad_digit); | |
VV_LOCAL_SYMBOL multi_return_strconv__Dec32_bool strconv__f32_to_decimal_exact_int(u32 i_mant, u32 exp); | |
VV_LOCAL_SYMBOL strconv__Dec32 strconv__f32_to_decimal(u32 mant, u32 exp); | |
string strconv__f32_to_str(f32 f, int n_digit); | |
Array_u64 _const_strconv__ten_pow_table_64; // inited later | |
u32 _const_strconv__mantbits64; // inited later | |
u32 _const_strconv__expbits64; // inited later | |
#define _const_strconv__bias64 1023 | |
#define _const_strconv__maxexp64 2047 | |
VV_LOCAL_SYMBOL string strconv__Dec64_get_string_64(strconv__Dec64 d, bool neg, int i_n_digit, int i_pad_digit); | |
VV_LOCAL_SYMBOL multi_return_strconv__Dec64_bool strconv__f64_to_decimal_exact_int(u64 i_mant, u64 exp); | |
VV_LOCAL_SYMBOL strconv__Dec64 strconv__f64_to_decimal(u64 mant, u64 exp); | |
string strconv__f64_to_str(f64 f, int n_digit); | |
string strconv__f64_to_str_pad(f64 f, int n_digit); | |
Array_f64 _const_strconv__dec_round; // inited later | |
void strconv__format_str_sb(string s, strconv__BF_param p, strings__Builder* sb); | |
string _const_strconv__digit_pairs; // a string literal, inited later | |
void strconv__format_dec_sb(u64 d, strconv__BF_param p, strings__Builder* res); | |
string strconv__f64_to_str_lnd1(f64 f, int dec_digit); | |
string strconv__format_fl(f64 f, strconv__BF_param p); | |
string strconv__format_es(f64 f, strconv__BF_param p); | |
string strconv__remove_tail_zeros(string s); | |
string strconv__ftoa_64(f64 f); | |
string strconv__ftoa_32(f32 f); | |
string _const_strconv__base_digits; // a string literal, inited later | |
string strconv__format_int(i64 n, int radix); | |
string strconv__format_uint(u64 n, int radix); | |
#define _const_strconv__pow5_num_bits_32 61 | |
#define _const_strconv__pow5_inv_num_bits_32 59 | |
#define _const_strconv__pow5_num_bits_64 121 | |
#define _const_strconv__pow5_inv_num_bits_64 122 | |
Array_u64 _const_strconv__pow5_split_32; // inited later | |
Array_u64 _const_strconv__pow5_inv_split_32; // inited later | |
Array_strconv__Uint128 _const_strconv__pow5_split_64; // inited later | |
Array_strconv__Uint128 _const_strconv__pow5_inv_split_64; // inited later | |
VV_LOCAL_SYMBOL void strconv__assert1(bool t, string msg); | |
VV_LOCAL_SYMBOL u32 strconv__bool_to_u32(bool b); | |
VV_LOCAL_SYMBOL u64 strconv__bool_to_u64(bool b); | |
VV_LOCAL_SYMBOL string strconv__get_string_special(bool neg, bool expZero, bool mantZero); | |
VV_LOCAL_SYMBOL u32 strconv__mul_shift_32(u32 m, u64 mul, int ishift); | |
VV_LOCAL_SYMBOL u32 strconv__mul_pow5_invdiv_pow2(u32 m, u32 q, int j); | |
VV_LOCAL_SYMBOL u32 strconv__mul_pow5_div_pow2(u32 m, u32 i, int j); | |
VV_LOCAL_SYMBOL u32 strconv__pow5_factor_32(u32 i_v); | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_five_32(u32 v, u32 p); | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_two_32(u32 v, u32 p); | |
VV_LOCAL_SYMBOL u32 strconv__log10_pow2(int e); | |
VV_LOCAL_SYMBOL u32 strconv__log10_pow5(int e); | |
VV_LOCAL_SYMBOL int strconv__pow5_bits(int e); | |
VV_LOCAL_SYMBOL u64 strconv__shift_right_128(strconv__Uint128 v, int shift); | |
VV_LOCAL_SYMBOL u64 strconv__mul_shift_64(u64 m, strconv__Uint128 mul, int shift); | |
VV_LOCAL_SYMBOL u32 strconv__pow5_factor_64(u64 v_i); | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_five_64(u64 v, u32 p); | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_two_64(u64 v, u32 p); | |
string strconv__f32_to_str_l(f32 f); | |
string strconv__f32_to_str_l_no_dot(f32 f); | |
string strconv__f64_to_str_l(f64 f); | |
string strconv__f64_to_str_l_no_dot(f64 f); | |
string strconv__fxx_to_str_l_parse(string s); | |
string strconv__fxx_to_str_l_parse_no_dot(string s); | |
int strconv__dec_digits(u64 n); | |
VV_LOCAL_SYMBOL array __new_array(int mylen, int cap, int elm_size); | |
VV_LOCAL_SYMBOL array __new_array_with_default(int mylen, int cap, int elm_size, voidptr val); | |
VV_LOCAL_SYMBOL array __new_array_with_array_default(int mylen, int cap, int elm_size, array val); | |
VV_LOCAL_SYMBOL array new_array_from_c_array(int len, int cap, int elm_size, voidptr c_array); | |
VV_LOCAL_SYMBOL void array_ensure_cap(array* a, int required); | |
array array_repeat(array a, int count); | |
void array_insert_many(array* a, int i, voidptr val, int size); | |
void array_prepend_many(array* a, voidptr val, int size); | |
void array_trim(array* a, int index); | |
VV_LOCAL_SYMBOL voidptr array_get_unsafe(array a, int i); | |
VV_LOCAL_SYMBOL voidptr array_get(array a, int i); | |
VV_LOCAL_SYMBOL voidptr array_get_with_check(array a, int i); | |
voidptr array_first(array a); | |
voidptr array_last(array a); | |
voidptr array_pop(array* a); | |
VV_LOCAL_SYMBOL array array_slice(array a, int start, int _end); | |
VV_LOCAL_SYMBOL array array_slice2(array a, int start, int _end, bool end_max); | |
VV_LOCAL_SYMBOL array array_clone_static(array a); | |
array array_clone(array* a); | |
VV_LOCAL_SYMBOL void array_set_unsafe(array* a, int i, voidptr val); | |
VV_LOCAL_SYMBOL void array_set(array* a, int i, voidptr val); | |
VV_LOCAL_SYMBOL void array_push(array* a, voidptr val); | |
void array_push_many(array* a3, voidptr val, int size); | |
array array_reverse(array a); | |
void array_free(array* a); | |
void Array_string_free(Array_string* a); | |
string Array_string_str(Array_string a); | |
VV_LOCAL_SYMBOL int compare_ints(int* a, int* b); | |
VV_LOCAL_SYMBOL int compare_ints_reverse(int* a, int* b); | |
VV_LOCAL_SYMBOL string vcommithash(); | |
void panic_optional_not_set(string s); | |
void v_panic(string s); | |
void eprintln(string s); | |
void eprint(string s); | |
void println(string s); | |
i64 total_m = 0; // global | |
byte* v_malloc(int n); | |
byte* v_realloc(byte* b, int n); | |
byte* vcalloc(int n); | |
void v_free(voidptr ptr); | |
voidptr memdup(voidptr src, int sz); | |
VV_LOCAL_SYMBOL int v_fixed_index(int i, int len); | |
bool isnil(voidptr v); | |
Array_VCastTypeIndexName as_cast_type_indexes; // global | |
VV_LOCAL_SYMBOL voidptr __as_cast(voidptr obj, int obj_type, int expected_type); | |
VV_LOCAL_SYMBOL void __print_assert_failure(VAssertMetaInfo* i); | |
u32 g_original_codepage = 0; // global | |
VV_LOCAL_SYMBOL void restore_codepage(); | |
VV_LOCAL_SYMBOL int is_terminal(int fd); | |
VV_LOCAL_SYMBOL void builtin_init(); | |
VV_LOCAL_SYMBOL bool print_backtrace_skipping_top_frames(int skipframes); | |
VV_LOCAL_SYMBOL bool print_backtrace_skipping_top_frames_tcc(int skipframes); | |
VV_LOCAL_SYMBOL void add_vectored_exception_handler(int (*handler)(ExceptionPointers* )); | |
VV_LOCAL_SYMBOL int __stdcall unhandled_exception_handler(ExceptionPointers* e); | |
VV_LOCAL_SYMBOL void add_unhandled_exception_handler(); | |
string f64_str(f64 x); | |
string f64_strg(f64 x); | |
string float_literal_str(float_literal d); | |
string f32_str(f32 x); | |
string f32_strg(f32 x); | |
f32 f32_abs(f32 a); | |
VV_LOCAL_SYMBOL f64 f64_abs(f64 a); | |
string char_str(char* cptr); | |
string _const_digit_pairs; // a string literal, inited later | |
VV_LOCAL_SYMBOL string int_str_l(int nn, int max); | |
string i8_str(i8 n); | |
string i16_str(i16 n); | |
string u16_str(u16 n); | |
string int_str(int n); | |
string u32_str(u32 nn); | |
string int_literal_str(int_literal n); | |
string i64_str(i64 nn); | |
string u64_str(u64 nn); | |
string bool_str(bool b); | |
VV_LOCAL_SYMBOL string u64_to_hex(u64 nn, byte len); | |
VV_LOCAL_SYMBOL string u64_to_hex_no_leading_zeros(u64 nn, byte len); | |
string byte_hex(byte nn); | |
string u64_hex(u64 nn); | |
string voidptr_str(voidptr nn); | |
string byteptr_str(byteptr nn); | |
string byte_str(byte b); | |
string byte_ascii_str(byte b); | |
string byte_str_escaped(byte b); | |
VV_LOCAL_SYMBOL bool fast_string_eq(string a, string b); | |
VV_LOCAL_SYMBOL voidptr DenseArray_key(DenseArray* d, int i); | |
VV_LOCAL_SYMBOL bool DenseArray_has_index(DenseArray* d, int i); | |
void map_free(map* m); | |
string IError_str(IError err); | |
IError _const_none__; // inited later | |
VV_LOCAL_SYMBOL string None___str(None__ _t207); | |
VV_LOCAL_SYMBOL void trace_error(string x); | |
IError v_error(string message); | |
VV_LOCAL_SYMBOL void opt_ok(voidptr data, Option* option, int size); | |
void Error_free(Error* e); | |
void None___free(None__* n); | |
void IError_free(IError* ie); | |
VMemoryBlock* g_memory_block; // global | |
string rune_str(rune c); | |
string Array_byte_bytestr(Array_byte b); | |
VV_LOCAL_SYMBOL void mapnode_free(mapnode* n); | |
void SortedMap_free(SortedMap* m); | |
int vstrlen(byte* s); | |
string tos(byte* s, int len); | |
string tos2(byte* s); | |
string tos3(char* s); | |
string tos5(char* s); | |
string byte_vstring_with_len(byte* bp, int len); | |
VV_LOCAL_SYMBOL string string_clone_static(string a); | |
string string_clone(string a); | |
string string_replace(string s, string rep, string with); | |
VV_LOCAL_SYMBOL bool string__eq(string s, string a); | |
VV_LOCAL_SYMBOL bool string__lt(string s, string a); | |
VV_LOCAL_SYMBOL string string__plus(string s, string a); | |
string string_substr(string s, int start, int end); | |
VV_LOCAL_SYMBOL int string_index_(string s, string p); | |
VV_LOCAL_SYMBOL int string_index_kmp(string s, string p); | |
int string_index_after(string s, string p, int start); | |
bool string_contains(string s, string substr); | |
string string_to_upper(string s); | |
string string_trim_space(string s); | |
string string_trim(string s, string cutset); | |
int compare_strings(string* a, string* b); | |
VV_LOCAL_SYMBOL int compare_strings_reverse(string* a, string* b); | |
string string_str(string s); | |
string ustring_str(ustring s); | |
Array_int g_ustring_runes; // global | |
VV_LOCAL_SYMBOL bool ustring__eq(ustring u, ustring a); | |
VV_LOCAL_SYMBOL bool ustring__lt(ustring u, ustring a); | |
VV_LOCAL_SYMBOL ustring ustring__plus(ustring u, ustring a); | |
VV_LOCAL_SYMBOL byte string_at(string s, int idx); | |
VV_LOCAL_SYMBOL void ustring_free(ustring* u); | |
void string_free(string* s); | |
string byteptr_vstring(byteptr bp); | |
string byteptr_vstring_with_len(byteptr bp, int len); | |
string charptr_vstring(charptr cp); | |
string charptr_vstring_with_len(charptr cp, int len); | |
string StrIntpType_str(StrIntpType x); | |
VV_LOCAL_SYMBOL f64 fabs64(f64 x); | |
VV_LOCAL_SYMBOL f32 fabs32(f32 x); | |
VV_LOCAL_SYMBOL u64 abs64(i64 x); | |
VV_LOCAL_SYMBOL void StrIntpData_get_fmt_format(StrIntpData data, strings__Builder* sb); | |
string str_intp(int data_len, voidptr in_data); | |
int utf8_char_len(byte b); | |
string utf32_to_str(u32 code); | |
string utf32_to_str_no_malloc(u32 code, voidptr buf); | |
int utf8_str_visible_length(string s); | |
VV_LOCAL_SYMBOL void main__main(); | |
// V interface table: | |
static IError I_None___to_Interface_IError(None__* x); | |
int _IError_None___index = 0; | |
static IError I_Error_to_Interface_IError(Error* x); | |
int _IError_Error_index = 1; | |
// ^^^ number of types for interface IError: 2 | |
// Casting functions for converting "None__" to interface "IError" | |
static inline IError I_None___to_Interface_IError(None__* x) { | |
return (IError) { | |
._None__ = x, | |
._typ = _IError_None___index, | |
.msg = (string*)((char*)x + __offsetof_ptr(x, None__, msg)), | |
.code = (int*)((char*)x + __offsetof_ptr(x, None__, code)), | |
}; | |
} | |
// Casting functions for converting "Error" to interface "IError" | |
static inline IError I_Error_to_Interface_IError(Error* x) { | |
return (IError) { | |
._Error = x, | |
._typ = _IError_Error_index, | |
.msg = (string*)((char*)x + __offsetof_ptr(x, Error, msg)), | |
.code = (int*)((char*)x + __offsetof_ptr(x, Error, code)), | |
}; | |
} | |
// V stringliterals: | |
// >> string literal consts | |
void vinit_string_literals(){ | |
_const_strconv__digit_pairs = _SLIT("00102030405060708090011121314151617181910212223242526272829203132333435363738393041424344454647484940515253545556575859506162636465666768696071727374757677787970818283848586878889809192939495969798999"); | |
_const_strconv__base_digits = _SLIT("0123456789abcdefghijklmnopqrstuvwxyz"); | |
_const_digit_pairs = _SLIT("00102030405060708090011121314151617181910212223242526272829203132333435363738393041424344454647484940515253545556575859506162636465666768696071727374757677787970818283848586878889809192939495969798999"); | |
} | |
// << string literal consts | |
// V out | |
// >> typeof() support for sum types / interfaces | |
static char * v_typeof_interface_IError(int sidx) { /* IError */ | |
if (sidx == _IError_None___index) return "None__"; | |
if (sidx == _IError_Error_index) return "Error"; | |
return "unknown IError"; | |
} | |
// << typeof() support for sum types | |
strings__Builder strings__new_builder(int initial_size) { | |
return ((__new_array_with_default(0, initial_size, sizeof(byte), 0))); | |
} | |
void strings__Builder_write_ptr(strings__Builder* b, byte* ptr, int len) { | |
array_push_many(b, ptr, len); | |
} | |
void strings__Builder_write_b(strings__Builder* b, byte data) { | |
array_push((array*)b, _MOV((byte[]){ data })); | |
} | |
Option_int strings__Builder_write(strings__Builder* b, Array_byte data) { | |
_PUSH_MANY(b, (data), _t3, strings__Builder); | |
Option_int _t4; | |
opt_ok(&(int[]) { data.len }, (Option*)(&_t4), sizeof(int)); | |
return _t4; | |
} | |
inline byte strings__Builder_byte_at(strings__Builder* b, int n) { | |
return (*(byte*)/*ee elem_typ */array_get(*(((Array_byte*)(b))), n)); | |
} | |
inline void strings__Builder_write_string(strings__Builder* b, string s) { | |
if ((s).len == 0) { | |
return; | |
} | |
array_push_many(b, s.str, s.len); | |
} | |
void strings__Builder_go_back(strings__Builder* b, int n) { | |
array_trim(b, b->len - n); | |
} | |
string strings__Builder_cut_last(strings__Builder* b, int n) { | |
int cut_pos = b->len - n; | |
Array_byte x = array_slice(*(((Array_byte*)(b))), cut_pos, (*(((Array_byte*)(b)))).len); | |
string res = Array_byte_bytestr(x); | |
array_trim(b, cut_pos); | |
return res; | |
} | |
string strings__Builder_cut_to(strings__Builder* b, int pos) { | |
if (pos > b->len) { | |
return _SLIT(""); | |
} | |
return strings__Builder_cut_last(b, b->len - pos); | |
} | |
void strings__Builder_go_back_to(strings__Builder* b, int pos) { | |
array_trim(b, pos); | |
} | |
inline void strings__Builder_writeln(strings__Builder* b, string s) { | |
array_push_many(b, s.str, s.len); | |
array_push((array*)b, _MOV((byte[]){ ((byte)('\n')) })); | |
} | |
string strings__Builder_last_n(strings__Builder* b, int n) { | |
if (n > b->len) { | |
return _SLIT(""); | |
} | |
Array_byte x = array_slice(*(((Array_byte*)(b))), b->len - n, (*(((Array_byte*)(b)))).len); | |
return Array_byte_bytestr(x); | |
} | |
string strings__Builder_after(strings__Builder* b, int n) { | |
if (n >= b->len) { | |
return _SLIT(""); | |
} | |
Array_byte x = array_slice(*(((Array_byte*)(b))), n, (*(((Array_byte*)(b)))).len); | |
return Array_byte_bytestr(x); | |
} | |
string strings__Builder_str(strings__Builder* b) { | |
array_push((array*)b, _MOV((byte[]){ ((byte)(0)) })); | |
byte* bcopy = ((byte*)(memdup(b->data, b->len))); | |
string s = byte_vstring_with_len(bcopy, b->len - 1); | |
array_trim(b, 0); | |
return s; | |
} | |
void strings__Builder_free(strings__Builder* b) { | |
v_free(b->data); | |
} | |
int math__bits__trailing_zeros_32(u32 x) { | |
if (x == 0U) { | |
int _t16 = 32; | |
return _t16; | |
} | |
int _t17 = ((int)((*(byte*)/*ee elem_typ */array_get(_const_math__bits__de_bruijn32tab, ((x & -x)) * _const_math__bits__de_bruijn32 >> (32 - 5))))); | |
return _t17; | |
} | |
int math__bits__trailing_zeros_64(u64 x) { | |
if (x == 0U) { | |
int _t18 = 64; | |
return _t18; | |
} | |
int _t19 = ((int)((*(byte*)/*ee elem_typ */array_get(_const_math__bits__de_bruijn64tab, ((x & -x)) * _const_math__bits__de_bruijn64 >> (64 - 6))))); | |
return _t19; | |
} | |
multi_return_u64_u64 math__bits__mul_64(u64 x, u64 y) { | |
u64 x0 = (x & _const_math__bits__mask32); | |
u64 x1 = x >> 32U; | |
u64 y0 = (y & _const_math__bits__mask32); | |
u64 y1 = y >> 32U; | |
u64 w0 = x0 * y0; | |
u64 t = x1 * y0 + (w0 >> 32U); | |
u64 w1 = (t & _const_math__bits__mask32); | |
u64 w2 = t >> 32U; | |
w1 += x0 * y1; | |
u64 hi = x1 * y1 + w2 + (w1 >> 32U); | |
u64 lo = x * y; | |
return (multi_return_u64_u64){.arg0=hi, .arg1=lo}; | |
} | |
string strconv__Dec32_get_string_32(strconv__Dec32 d, bool neg, int i_n_digit, int i_pad_digit) { | |
int n_digit = i_n_digit + 1; | |
int pad_digit = i_pad_digit + 1; | |
u32 out = d.m; | |
int out_len = strconv__dec_digits(out); | |
int out_len_original = out_len; | |
int fw_zeros = 0; | |
if (pad_digit > out_len) { | |
fw_zeros = pad_digit - out_len; | |
} | |
Array_byte buf = __new_array_with_default(((int)(out_len + 5 + 1 + 1)), 0, sizeof(byte), 0); | |
int i = 0; | |
if (neg) { | |
((byte*)buf.data)[i] = '-'; | |
i++; | |
} | |
int disp = 0; | |
if (out_len <= 1) { | |
disp = 1; | |
} | |
if (n_digit < out_len) { | |
out += ((u32*)_const_strconv__ten_pow_table_32.data)[out_len - n_digit - 1] * 5U; | |
out /= ((u32*)_const_strconv__ten_pow_table_32.data)[out_len - n_digit]; | |
out_len = n_digit; | |
} | |
int y = i + out_len; | |
int x = 0; | |
for (;;) { | |
if (!(x < (out_len - disp - 1))) break; | |
((byte*)buf.data)[y - x] = '0' + ((byte)(out % 10U)); | |
out /= 10U; | |
i++; | |
x++; | |
} | |
if (i_n_digit == 0) { | |
{ // Unsafe block | |
((byte*)buf.data)[i] = 0; | |
return tos(((byteptr)(&((byte*)buf.data)[0])), i); | |
} | |
} | |
if (out_len >= 1) { | |
((byte*)buf.data)[y - x] = '.'; | |
x++; | |
i++; | |
} | |
if (y - x >= 0) { | |
((byte*)buf.data)[y - x] = '0' + ((byte)(out % 10U)); | |
i++; | |
} | |
for (;;) { | |
if (!(fw_zeros > 0)) break; | |
((byte*)buf.data)[i] = '0'; | |
i++; | |
fw_zeros--; | |
} | |
((byte*)buf.data)[i] = 'e'; | |
i++; | |
int exp = d.e + out_len_original - 1; | |
if (exp < 0) { | |
((byte*)buf.data)[i] = '-'; | |
i++; | |
exp = -exp; | |
} else { | |
((byte*)buf.data)[i] = '+'; | |
i++; | |
} | |
int d1 = exp % 10; | |
int d0 = exp / 10; | |
((byte*)buf.data)[i] = '0' + ((byte)(d0)); | |
i++; | |
((byte*)buf.data)[i] = '0' + ((byte)(d1)); | |
i++; | |
((byte*)buf.data)[i] = 0; | |
return tos(((byteptr)(&((byte*)buf.data)[0])), i); | |
} | |
VV_LOCAL_SYMBOL multi_return_strconv__Dec32_bool strconv__f32_to_decimal_exact_int(u32 i_mant, u32 exp) { | |
strconv__Dec32 d = (strconv__Dec32){.m = 0,.e = 0,}; | |
u32 e = exp - _const_strconv__bias32; | |
if (e > _const_strconv__mantbits32) { | |
return (multi_return_strconv__Dec32_bool){.arg0=d, .arg1=false}; | |
} | |
u32 shift = _const_strconv__mantbits32 - e; | |
u32 mant = (i_mant | 0x00800000U); | |
d.m = mant >> shift; | |
if ((d.m << shift) != mant) { | |
return (multi_return_strconv__Dec32_bool){.arg0=d, .arg1=false}; | |
} | |
for (;;) { | |
if (!((d.m % 10U) == 0U)) break; | |
d.m /= 10U; | |
d.e++; | |
} | |
return (multi_return_strconv__Dec32_bool){.arg0=d, .arg1=true}; | |
} | |
VV_LOCAL_SYMBOL strconv__Dec32 strconv__f32_to_decimal(u32 mant, u32 exp) { | |
int e2 = 0; | |
u32 m2 = ((u32)(0U)); | |
if (exp == 0U) { | |
e2 = 1 - _const_strconv__bias32 - ((int)(_const_strconv__mantbits32)) - 2; | |
m2 = mant; | |
} else { | |
e2 = ((int)(exp)) - _const_strconv__bias32 - ((int)(_const_strconv__mantbits32)) - 2; | |
m2 = ((((u32)(1U)) << _const_strconv__mantbits32) | mant); | |
} | |
bool even = ((m2 & 1U)) == 0U; | |
bool accept_bounds = even; | |
u32 mv = ((u32)(4 * m2)); | |
u32 mp = ((u32)(4 * m2 + 2U)); | |
u32 mm_shift = strconv__bool_to_u32(mant != 0U || exp <= 1U); | |
u32 mm = ((u32)(4 * m2 - 1U - mm_shift)); | |
u32 vr = ((u32)(0U)); | |
u32 vp = ((u32)(0U)); | |
u32 vm = ((u32)(0U)); | |
int e10 = 0; | |
bool vm_is_trailing_zeros = false; | |
bool vr_is_trailing_zeros = false; | |
byte last_removed_digit = ((byte)(0)); | |
if (e2 >= 0) { | |
u32 q = strconv__log10_pow2(e2); | |
e10 = ((int)(q)); | |
int k = _const_strconv__pow5_inv_num_bits_32 + strconv__pow5_bits(((int)(q))) - 1; | |
int i = -e2 + ((int)(q)) + k; | |
vr = strconv__mul_pow5_invdiv_pow2(mv, q, i); | |
vp = strconv__mul_pow5_invdiv_pow2(mp, q, i); | |
vm = strconv__mul_pow5_invdiv_pow2(mm, q, i); | |
if (q != 0U && (vp - 1U) / 10U <= vm / 10U) { | |
int l = _const_strconv__pow5_inv_num_bits_32 + strconv__pow5_bits(((int)(q - 1U))) - 1; | |
last_removed_digit = ((byte)(strconv__mul_pow5_invdiv_pow2(mv, q - 1U, -e2 + ((int)(q - 1U)) + l) % 10U)); | |
} | |
if (q <= 9U) { | |
if (mv % 5U == 0U) { | |
vr_is_trailing_zeros = strconv__multiple_of_power_of_five_32(mv, q); | |
} else if (accept_bounds) { | |
vm_is_trailing_zeros = strconv__multiple_of_power_of_five_32(mm, q); | |
} else if (strconv__multiple_of_power_of_five_32(mp, q)) { | |
vp--; | |
} | |
} | |
} else { | |
u32 q = strconv__log10_pow5(-e2); | |
e10 = ((int)(q)) + e2; | |
int i = -e2 - ((int)(q)); | |
int k = strconv__pow5_bits(i) - _const_strconv__pow5_num_bits_32; | |
int j = ((int)(q)) - k; | |
vr = strconv__mul_pow5_div_pow2(mv, ((u32)(i)), j); | |
vp = strconv__mul_pow5_div_pow2(mp, ((u32)(i)), j); | |
vm = strconv__mul_pow5_div_pow2(mm, ((u32)(i)), j); | |
if (q != 0U && ((vp - 1U) / 10U) <= vm / 10U) { | |
j = ((int)(q)) - 1 - (strconv__pow5_bits(i + 1) - _const_strconv__pow5_num_bits_32); | |
last_removed_digit = ((byte)(strconv__mul_pow5_div_pow2(mv, ((u32)(i + 1)), j) % 10U)); | |
} | |
if (q <= 1U) { | |
vr_is_trailing_zeros = true; | |
if (accept_bounds) { | |
vm_is_trailing_zeros = mm_shift == 1U; | |
} else { | |
vp--; | |
} | |
} else if (q < 31U) { | |
vr_is_trailing_zeros = strconv__multiple_of_power_of_two_32(mv, q - 1U); | |
} | |
} | |
int removed = 0; | |
u32 out = ((u32)(0U)); | |
if (vm_is_trailing_zeros || vr_is_trailing_zeros) { | |
for (;;) { | |
if (!(vp / 10U > vm / 10U)) break; | |
vm_is_trailing_zeros = vm_is_trailing_zeros && (vm % 10U) == 0U; | |
vr_is_trailing_zeros = vr_is_trailing_zeros && (last_removed_digit == 0); | |
last_removed_digit = ((byte)(vr % 10U)); | |
vr /= 10U; | |
vp /= 10U; | |
vm /= 10U; | |
removed++; | |
} | |
if (vm_is_trailing_zeros) { | |
for (;;) { | |
if (!(vm % 10U == 0U)) break; | |
vr_is_trailing_zeros = vr_is_trailing_zeros && (last_removed_digit == 0); | |
last_removed_digit = ((byte)(vr % 10U)); | |
vr /= 10U; | |
vp /= 10U; | |
vm /= 10U; | |
removed++; | |
} | |
} | |
if (vr_is_trailing_zeros && (last_removed_digit == 5) && (vr % 2U) == 0U) { | |
last_removed_digit = 4; | |
} | |
out = vr; | |
if ((vr == vm && (!accept_bounds || !vm_is_trailing_zeros)) || last_removed_digit >= 5) { | |
out++; | |
} | |
} else { | |
for (;;) { | |
if (!(vp / 10U > vm / 10U)) break; | |
last_removed_digit = ((byte)(vr % 10U)); | |
vr /= 10U; | |
vp /= 10U; | |
vm /= 10U; | |
removed++; | |
} | |
out = vr + strconv__bool_to_u32(vr == vm || last_removed_digit >= 5); | |
} | |
return (strconv__Dec32){.m = out,.e = e10 + removed,}; | |
} | |
string strconv__f32_to_str(f32 f, int n_digit) { | |
strconv__Uf32 u1 = (strconv__Uf32){0}; | |
u1.f = f; | |
u32 u = u1.u; | |
bool neg = (u >> (_const_strconv__mantbits32 + _const_strconv__expbits32)) != 0U; | |
u32 mant = (u & ((((u32)(1U)) << _const_strconv__mantbits32) - ((u32)(1U)))); | |
u32 exp = ((u >> _const_strconv__mantbits32) & ((((u32)(1U)) << _const_strconv__expbits32) - ((u32)(1U)))); | |
if ((exp == _const_strconv__maxexp32) || (exp == 0U && mant == 0U)) { | |
return strconv__get_string_special(neg, exp == 0U, mant == 0U); | |
} | |
multi_return_strconv__Dec32_bool mr_8521 = strconv__f32_to_decimal_exact_int(mant, exp); | |
strconv__Dec32 d = mr_8521.arg0; | |
bool ok = mr_8521.arg1; | |
if (!ok) { | |
d = strconv__f32_to_decimal(mant, exp); | |
} | |
return strconv__Dec32_get_string_32(d, neg, n_digit, 0); | |
} | |
VV_LOCAL_SYMBOL string strconv__Dec64_get_string_64(strconv__Dec64 d, bool neg, int i_n_digit, int i_pad_digit) { | |
int n_digit = i_n_digit + 1; | |
int pad_digit = i_pad_digit + 1; | |
u64 out = d.m; | |
int d_exp = d.e; | |
int out_len = strconv__dec_digits(out); | |
int out_len_original = out_len; | |
int fw_zeros = 0; | |
if (pad_digit > out_len) { | |
fw_zeros = pad_digit - out_len; | |
} | |
Array_byte buf = __new_array_with_default((out_len + 6 + 1 + 1 + fw_zeros), 0, sizeof(byte), 0); | |
int i = 0; | |
if (neg) { | |
((byte*)buf.data)[i] = '-'; | |
i++; | |
} | |
int disp = 0; | |
if (out_len <= 1) { | |
disp = 1; | |
} | |
if (n_digit < out_len) { | |
out += ((u64*)_const_strconv__ten_pow_table_64.data)[out_len - n_digit - 1] * 5U; | |
out /= ((u64*)_const_strconv__ten_pow_table_64.data)[out_len - n_digit]; | |
if (d.m / ((u64*)_const_strconv__ten_pow_table_64.data)[out_len - n_digit] < out) { | |
d_exp++; | |
n_digit++; | |
} | |
out_len = n_digit; | |
} | |
int y = i + out_len; | |
int x = 0; | |
for (;;) { | |
if (!(x < (out_len - disp - 1))) break; | |
((byte*)buf.data)[y - x] = '0' + ((byte)(out % 10U)); | |
out /= 10U; | |
i++; | |
x++; | |
} | |
if (i_n_digit == 0) { | |
{ // Unsafe block | |
((byte*)buf.data)[i] = 0; | |
return tos(((byteptr)(&((byte*)buf.data)[0])), i); | |
} | |
} | |
if (out_len >= 1) { | |
((byte*)buf.data)[y - x] = '.'; | |
x++; | |
i++; | |
} | |
if (y - x >= 0) { | |
((byte*)buf.data)[y - x] = '0' + ((byte)(out % 10U)); | |
i++; | |
} | |
for (;;) { | |
if (!(fw_zeros > 0)) break; | |
((byte*)buf.data)[i] = '0'; | |
i++; | |
fw_zeros--; | |
} | |
((byte*)buf.data)[i] = 'e'; | |
i++; | |
int exp = d_exp + out_len_original - 1; | |
if (exp < 0) { | |
((byte*)buf.data)[i] = '-'; | |
i++; | |
exp = -exp; | |
} else { | |
((byte*)buf.data)[i] = '+'; | |
i++; | |
} | |
int d2 = exp % 10; | |
exp /= 10; | |
int d1 = exp % 10; | |
int d0 = exp / 10; | |
if (d0 > 0) { | |
((byte*)buf.data)[i] = '0' + ((byte)(d0)); | |
i++; | |
} | |
((byte*)buf.data)[i] = '0' + ((byte)(d1)); | |
i++; | |
((byte*)buf.data)[i] = '0' + ((byte)(d2)); | |
i++; | |
((byte*)buf.data)[i] = 0; | |
return tos(((byteptr)(&((byte*)buf.data)[0])), i); | |
} | |
VV_LOCAL_SYMBOL multi_return_strconv__Dec64_bool strconv__f64_to_decimal_exact_int(u64 i_mant, u64 exp) { | |
strconv__Dec64 d = (strconv__Dec64){.m = 0,.e = 0,}; | |
u64 e = exp - _const_strconv__bias64; | |
if (e > _const_strconv__mantbits64) { | |
return (multi_return_strconv__Dec64_bool){.arg0=d, .arg1=false}; | |
} | |
u64 shift = _const_strconv__mantbits64 - e; | |
u64 mant = (i_mant | ((u64)(0x0010000000000000U))); | |
d.m = mant >> shift; | |
if ((d.m << shift) != mant) { | |
return (multi_return_strconv__Dec64_bool){.arg0=d, .arg1=false}; | |
} | |
for (;;) { | |
if (!((d.m % 10U) == 0U)) break; | |
d.m /= 10U; | |
d.e++; | |
} | |
return (multi_return_strconv__Dec64_bool){.arg0=d, .arg1=true}; | |
} | |
VV_LOCAL_SYMBOL strconv__Dec64 strconv__f64_to_decimal(u64 mant, u64 exp) { | |
int e2 = 0; | |
u64 m2 = ((u64)(0U)); | |
if (exp == 0U) { | |
e2 = 1 - _const_strconv__bias64 - ((int)(_const_strconv__mantbits64)) - 2; | |
m2 = mant; | |
} else { | |
e2 = ((int)(exp)) - _const_strconv__bias64 - ((int)(_const_strconv__mantbits64)) - 2; | |
m2 = ((((u64)(1U)) << _const_strconv__mantbits64) | mant); | |
} | |
bool even = ((m2 & 1U)) == 0U; | |
bool accept_bounds = even; | |
u64 mv = ((u64)(4 * m2)); | |
u64 mm_shift = strconv__bool_to_u64(mant != 0U || exp <= 1U); | |
u64 vr = ((u64)(0U)); | |
u64 vp = ((u64)(0U)); | |
u64 vm = ((u64)(0U)); | |
int e10 = 0; | |
bool vm_is_trailing_zeros = false; | |
bool vr_is_trailing_zeros = false; | |
if (e2 >= 0) { | |
u32 q = strconv__log10_pow2(e2) - strconv__bool_to_u32(e2 > 3); | |
e10 = ((int)(q)); | |
int k = _const_strconv__pow5_inv_num_bits_64 + strconv__pow5_bits(((int)(q))) - 1; | |
int i = -e2 + ((int)(q)) + k; | |
strconv__Uint128 mul = (*(strconv__Uint128*)/*ee elem_typ */array_get(_const_strconv__pow5_inv_split_64, q)); | |
vr = strconv__mul_shift_64(((u64)(4U)) * m2, mul, i); | |
vp = strconv__mul_shift_64(((u64)(4U)) * m2 + ((u64)(2U)), mul, i); | |
vm = strconv__mul_shift_64(((u64)(4U)) * m2 - ((u64)(1U)) - mm_shift, mul, i); | |
if (q <= 21U) { | |
if (mv % 5U == 0U) { | |
vr_is_trailing_zeros = strconv__multiple_of_power_of_five_64(mv, q); | |
} else if (accept_bounds) { | |
vm_is_trailing_zeros = strconv__multiple_of_power_of_five_64(mv - 1U - mm_shift, q); | |
} else if (strconv__multiple_of_power_of_five_64(mv + 2U, q)) { | |
vp--; | |
} | |
} | |
} else { | |
u32 q = strconv__log10_pow5(-e2) - strconv__bool_to_u32(-e2 > 1); | |
e10 = ((int)(q)) + e2; | |
int i = -e2 - ((int)(q)); | |
int k = strconv__pow5_bits(i) - _const_strconv__pow5_num_bits_64; | |
int j = ((int)(q)) - k; | |
strconv__Uint128 mul = (*(strconv__Uint128*)/*ee elem_typ */array_get(_const_strconv__pow5_split_64, i)); | |
vr = strconv__mul_shift_64(((u64)(4U)) * m2, mul, j); | |
vp = strconv__mul_shift_64(((u64)(4U)) * m2 + ((u64)(2U)), mul, j); | |
vm = strconv__mul_shift_64(((u64)(4U)) * m2 - ((u64)(1U)) - mm_shift, mul, j); | |
if (q <= 1U) { | |
vr_is_trailing_zeros = true; | |
if (accept_bounds) { | |
vm_is_trailing_zeros = (mm_shift == 1U); | |
} else { | |
vp--; | |
} | |
} else if (q < 63U) { | |
vr_is_trailing_zeros = strconv__multiple_of_power_of_two_64(mv, q - 1U); | |
} | |
} | |
int removed = 0; | |
byte last_removed_digit = ((byte)(0)); | |
u64 out = ((u64)(0U)); | |
if (vm_is_trailing_zeros || vr_is_trailing_zeros) { | |
for (;;) { | |
u64 vp_div_10 = vp / 10U; | |
u64 vm_div_10 = vm / 10U; | |
if (vp_div_10 <= vm_div_10) { | |
break; | |
} | |
u64 vm_mod_10 = vm % 10U; | |
u64 vr_div_10 = vr / 10U; | |
u64 vr_mod_10 = vr % 10U; | |
vm_is_trailing_zeros = vm_is_trailing_zeros && vm_mod_10 == 0U; | |
vr_is_trailing_zeros = vr_is_trailing_zeros && (last_removed_digit == 0); | |
last_removed_digit = ((byte)(vr_mod_10)); | |
vr = vr_div_10; | |
vp = vp_div_10; | |
vm = vm_div_10; | |
removed++; | |
} | |
if (vm_is_trailing_zeros) { | |
for (;;) { | |
u64 vm_div_10 = vm / 10U; | |
u64 vm_mod_10 = vm % 10U; | |
if (vm_mod_10 != 0U) { | |
break; | |
} | |
u64 vp_div_10 = vp / 10U; | |
u64 vr_div_10 = vr / 10U; | |
u64 vr_mod_10 = vr % 10U; | |
vr_is_trailing_zeros = vr_is_trailing_zeros && (last_removed_digit == 0); | |
last_removed_digit = ((byte)(vr_mod_10)); | |
vr = vr_div_10; | |
vp = vp_div_10; | |
vm = vm_div_10; | |
removed++; | |
} | |
} | |
if (vr_is_trailing_zeros && (last_removed_digit == 5) && (vr % 2U) == 0U) { | |
last_removed_digit = 4; | |
} | |
out = vr; | |
if ((vr == vm && (!accept_bounds || !vm_is_trailing_zeros)) || last_removed_digit >= 5) { | |
out++; | |
} | |
} else { | |
bool round_up = false; | |
for (;;) { | |
if (!(vp / 100U > vm / 100U)) break; | |
round_up = (vr % 100U) >= 50U; | |
vr /= 100U; | |
vp /= 100U; | |
vm /= 100U; | |
removed += 2; | |
} | |
for (;;) { | |
if (!(vp / 10U > vm / 10U)) break; | |
round_up = (vr % 10U) >= 5U; | |
vr /= 10U; | |
vp /= 10U; | |
vm /= 10U; | |
removed++; | |
} | |
out = vr + strconv__bool_to_u64(vr == vm || round_up); | |
} | |
return (strconv__Dec64){.m = out,.e = e10 + removed,}; | |
} | |
string strconv__f64_to_str(f64 f, int n_digit) { | |
strconv__Uf64 u1 = (strconv__Uf64){0}; | |
u1.f = f; | |
u64 u = u1.u; | |
bool neg = (u >> (_const_strconv__mantbits64 + _const_strconv__expbits64)) != 0U; | |
u64 mant = (u & ((((u64)(1U)) << _const_strconv__mantbits64) - ((u64)(1U)))); | |
u64 exp = ((u >> _const_strconv__mantbits64) & ((((u64)(1U)) << _const_strconv__expbits64) - ((u64)(1U)))); | |
if ((exp == _const_strconv__maxexp64) || (exp == 0U && mant == 0U)) { | |
return strconv__get_string_special(neg, exp == 0U, mant == 0U); | |
} | |
multi_return_strconv__Dec64_bool mr_10245 = strconv__f64_to_decimal_exact_int(mant, exp); | |
strconv__Dec64 d = mr_10245.arg0; | |
bool ok = mr_10245.arg1; | |
if (!ok) { | |
d = strconv__f64_to_decimal(mant, exp); | |
} | |
return strconv__Dec64_get_string_64(d, neg, n_digit, 0); | |
} | |
string strconv__f64_to_str_pad(f64 f, int n_digit) { | |
strconv__Uf64 u1 = (strconv__Uf64){0}; | |
u1.f = f; | |
u64 u = u1.u; | |
bool neg = (u >> (_const_strconv__mantbits64 + _const_strconv__expbits64)) != 0U; | |
u64 mant = (u & ((((u64)(1U)) << _const_strconv__mantbits64) - ((u64)(1U)))); | |
u64 exp = ((u >> _const_strconv__mantbits64) & ((((u64)(1U)) << _const_strconv__expbits64) - ((u64)(1U)))); | |
if ((exp == _const_strconv__maxexp64) || (exp == 0U && mant == 0U)) { | |
return strconv__get_string_special(neg, exp == 0U, mant == 0U); | |
} | |
multi_return_strconv__Dec64_bool mr_10998 = strconv__f64_to_decimal_exact_int(mant, exp); | |
strconv__Dec64 d = mr_10998.arg0; | |
bool ok = mr_10998.arg1; | |
if (!ok) { | |
d = strconv__f64_to_decimal(mant, exp); | |
} | |
return strconv__Dec64_get_string_64(d, neg, n_digit, n_digit); | |
} | |
void strconv__format_str_sb(string s, strconv__BF_param p, strings__Builder* sb) { | |
if (p.len0 <= 0) { | |
strings__Builder_write_string(sb, s); | |
return; | |
} | |
int dif = p.len0 - utf8_str_visible_length(s); | |
if (dif <= 0) { | |
strings__Builder_write_string(sb, s); | |
return; | |
} | |
if (p.allign == strconv__Align_text_right) { | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(sb, p.pad_ch); | |
} | |
} | |
strings__Builder_write_string(sb, s); | |
if (p.allign == strconv__Align_text_left) { | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(sb, p.pad_ch); | |
} | |
} | |
} | |
void strconv__format_dec_sb(u64 d, strconv__BF_param p, strings__Builder* res) { | |
int n_char = strconv__dec_digits(d); | |
int sign_len = (!p.positive || p.sign_flag ? (1) : (0)); | |
int number_len = sign_len + n_char; | |
int dif = p.len0 - number_len; | |
bool sign_written = false; | |
if (p.allign == strconv__Align_text_right) { | |
if (p.pad_ch == '0') { | |
if (p.positive) { | |
if (p.sign_flag) { | |
strings__Builder_write_b(res, '+'); | |
sign_written = true; | |
} | |
} else { | |
strings__Builder_write_b(res, '-'); | |
sign_written = true; | |
} | |
} | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(res, p.pad_ch); | |
} | |
} | |
if (!sign_written) { | |
if (p.positive) { | |
if (p.sign_flag) { | |
strings__Builder_write_b(res, '+'); | |
} | |
} else { | |
strings__Builder_write_b(res, '-'); | |
} | |
} | |
Array_fixed_byte_32 buf = {0}; | |
int i = 20; | |
u64 n = d; | |
u64 d_i = ((u64)(0U)); | |
if (n > 0U) { | |
for (;;) { | |
if (!(n > 0U)) break; | |
u64 n1 = n / 100U; | |
d_i = (n - (n1 * 100U)) << 1U; | |
n = n1; | |
{ // Unsafe block | |
buf[i] = _const_strconv__digit_pairs.str[d_i]; | |
} | |
i--; | |
d_i++; | |
{ // Unsafe block | |
buf[i] = _const_strconv__digit_pairs.str[d_i]; | |
} | |
i--; | |
} | |
i++; | |
if (d_i < 20U) { | |
i++; | |
} | |
strings__Builder_write_ptr(res, &buf[i], n_char); | |
} else { | |
strings__Builder_write_b(res, '0'); | |
} | |
if (p.allign == strconv__Align_text_left) { | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(res, p.pad_ch); | |
} | |
} | |
return; | |
} | |
string strconv__f64_to_str_lnd1(f64 f, int dec_digit) { | |
{ // Unsafe block | |
string s = strconv__f64_to_str(f + ((f64*)_const_strconv__dec_round.data)[dec_digit], 18); | |
if (s.len > 2 && (s.str[ 0] == 'n' || s.str[ 1] == 'i')) { | |
return s; | |
} | |
bool m_sgn_flag = false; | |
int sgn = 1; | |
Array_fixed_byte_26 b = {0}; | |
int d_pos = 1; | |
int i = 0; | |
int i1 = 0; | |
int exp = 0; | |
int exp_sgn = 1; | |
int dot_res_sp = -1; | |
for (int _t40 = 0; _t40 < s.len; ++_t40) { | |
byte c = s.str[_t40]; | |
if (c == '-') { | |
sgn = -1; | |
i++; | |
} else if (c == '+') { | |
sgn = 1; | |
i++; | |
} else if (c >= '0' && c <= '9') { | |
b[i1] = c; | |
i1++; | |
i++; | |
} else if (c == '.') { | |
if (sgn > 0) { | |
d_pos = i; | |
} else { | |
d_pos = i - 1; | |
} | |
i++; | |
} else if (c == 'e') { | |
i++; | |
break; | |
} else { | |
string_free(&s); | |
return _SLIT("[Float conversion error!!]"); | |
} | |
} | |
b[i1] = 0; | |
if (s.str[ i] == '-') { | |
exp_sgn = -1; | |
i++; | |
} else if (s.str[ i] == '+') { | |
exp_sgn = 1; | |
i++; | |
} | |
int c = i; | |
for (;;) { | |
if (!(c < s.len)) break; | |
exp = exp * 10 + ((int)(s.str[ c] - '0')); | |
c++; | |
} | |
Array_byte res = __new_array_with_default(exp + 32, 0, sizeof(byte), &(byte[]){0}); | |
int r_i = 0; | |
string_free(&s); | |
if (sgn == 1) { | |
if (m_sgn_flag) { | |
((byte*)res.data)[r_i] = '+'; | |
r_i++; | |
} | |
} else { | |
((byte*)res.data)[r_i] = '-'; | |
r_i++; | |
} | |
i = 0; | |
if (exp_sgn >= 0) { | |
for (;;) { | |
if (!(b[i] != 0)) break; | |
((byte*)res.data)[r_i] = b[i]; | |
r_i++; | |
i++; | |
if (i >= d_pos && exp >= 0) { | |
if (exp == 0) { | |
dot_res_sp = r_i; | |
((byte*)res.data)[r_i] = '.'; | |
r_i++; | |
} | |
exp--; | |
} | |
} | |
for (;;) { | |
if (!(exp >= 0)) break; | |
((byte*)res.data)[r_i] = '0'; | |
r_i++; | |
exp--; | |
} | |
} else { | |
bool dot_p = true; | |
for (;;) { | |
if (!(exp > 0)) break; | |
((byte*)res.data)[r_i] = '0'; | |
r_i++; | |
exp--; | |
if (dot_p) { | |
dot_res_sp = r_i; | |
((byte*)res.data)[r_i] = '.'; | |
r_i++; | |
dot_p = false; | |
} | |
} | |
for (;;) { | |
if (!(b[i] != 0)) break; | |
((byte*)res.data)[r_i] = b[i]; | |
r_i++; | |
i++; | |
} | |
} | |
if (dec_digit <= 0) { | |
string tmp_res = string_clone(tos(res.data, dot_res_sp)); | |
array_free(&res); | |
return tmp_res; | |
} | |
if (dot_res_sp >= 0) { | |
if ((r_i - dot_res_sp) > dec_digit) { | |
r_i = dot_res_sp + dec_digit + 1; | |
} | |
((byte*)res.data)[r_i] = 0; | |
string tmp_res = string_clone(tos(res.data, r_i)); | |
array_free(&res); | |
return tmp_res; | |
} else { | |
if (dec_digit > 0) { | |
int c1 = 0; | |
((byte*)res.data)[r_i] = '.'; | |
r_i++; | |
for (;;) { | |
if (!(c1 < dec_digit)) break; | |
((byte*)res.data)[r_i] = '0'; | |
r_i++; | |
c1++; | |
} | |
((byte*)res.data)[r_i] = 0; | |
} | |
string tmp_res = string_clone(tos(res.data, r_i)); | |
array_free(&res); | |
return tmp_res; | |
} | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string strconv__format_fl(f64 f, strconv__BF_param p) { | |
{ // Unsafe block | |
string s = _SLIT(""); | |
string fs = strconv__f64_to_str_lnd1((f >= 0.0 ? (f) : (-f)), p.len1); | |
if (string_at(fs, 0) == '[') { | |
string_free(&s); | |
return fs; | |
} | |
if (p.rm_tail_zero) { | |
string tmp = fs; | |
fs = strconv__remove_tail_zeros(fs); | |
string_free(&tmp); | |
} | |
strings__Builder res = strings__new_builder((p.len0 > fs.len ? (p.len0) : (fs.len))); | |
int sign_len_diff = 0; | |
if (p.pad_ch == '0') { | |
if (p.positive) { | |
if (p.sign_flag) { | |
strings__Builder_write_b(&res, '+'); | |
sign_len_diff = -1; | |
} | |
} else { | |
strings__Builder_write_b(&res, '-'); | |
sign_len_diff = -1; | |
} | |
string tmp = s; | |
s = string_clone(fs); | |
string_free(&tmp); | |
} else { | |
if (p.positive) { | |
if (p.sign_flag) { | |
string tmp = s; | |
s = string__plus(_SLIT("+"), fs); | |
string_free(&tmp); | |
} else { | |
string tmp = s; | |
s = string_clone(fs); | |
string_free(&tmp); | |
} | |
} else { | |
string tmp = s; | |
s = string__plus(_SLIT("-"), fs); | |
string_free(&tmp); | |
} | |
} | |
int dif = p.len0 - s.len + sign_len_diff; | |
if (p.allign == strconv__Align_text_right) { | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(&res, p.pad_ch); | |
} | |
} | |
strings__Builder_write_string(&res, s); | |
if (p.allign == strconv__Align_text_left) { | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(&res, p.pad_ch); | |
} | |
} | |
string_free(&s); | |
string_free(&fs); | |
string tmp_res = strings__Builder_str(&res); | |
strings__Builder_free(&res); | |
return tmp_res; | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string strconv__format_es(f64 f, strconv__BF_param p) { | |
{ // Unsafe block | |
string s = _SLIT(""); | |
string fs = strconv__f64_to_str_pad((f > 0 ? (f) : (-f)), p.len1); | |
if (p.rm_tail_zero) { | |
fs = strconv__remove_tail_zeros(fs); | |
} | |
strings__Builder res = strings__new_builder((p.len0 > fs.len ? (p.len0) : (fs.len))); | |
int sign_len_diff = 0; | |
if (p.pad_ch == '0') { | |
if (p.positive) { | |
if (p.sign_flag) { | |
strings__Builder_write_b(&res, '+'); | |
sign_len_diff = -1; | |
} | |
} else { | |
strings__Builder_write_b(&res, '-'); | |
sign_len_diff = -1; | |
} | |
string tmp = s; | |
s = string_clone(fs); | |
string_free(&tmp); | |
} else { | |
if (p.positive) { | |
if (p.sign_flag) { | |
string tmp = s; | |
s = string__plus(_SLIT("+"), fs); | |
string_free(&tmp); | |
} else { | |
string tmp = s; | |
s = string_clone(fs); | |
string_free(&tmp); | |
} | |
} else { | |
string tmp = s; | |
s = string__plus(_SLIT("-"), fs); | |
string_free(&tmp); | |
} | |
} | |
int dif = p.len0 - s.len + sign_len_diff; | |
if (p.allign == strconv__Align_text_right) { | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(&res, p.pad_ch); | |
} | |
} | |
strings__Builder_write_string(&res, s); | |
if (p.allign == strconv__Align_text_left) { | |
for (int i1 = 0; i1 < dif; i1++) { | |
strings__Builder_write_b(&res, p.pad_ch); | |
} | |
} | |
string_free(&s); | |
string_free(&fs); | |
string tmp_res = strings__Builder_str(&res); | |
strings__Builder_free(&res); | |
return tmp_res; | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string strconv__remove_tail_zeros(string s) { | |
{ // Unsafe block | |
byte* buf = v_malloc(s.len + 1); | |
int i_d = 0; | |
int i_s = 0; | |
for (;;) { | |
if (!(i_s < s.len && !(s.str[ i_s] == '-' || s.str[ i_s] == '+') && (s.str[ i_s] > '9' || s.str[ i_s] < '0'))) break; | |
buf[i_d] = s.str[ i_s]; | |
i_s++; | |
i_d++; | |
} | |
if (i_s < s.len && (s.str[ i_s] == '-' || s.str[ i_s] == '+')) { | |
buf[i_d] = s.str[ i_s]; | |
i_s++; | |
i_d++; | |
} | |
for (;;) { | |
if (!(i_s < s.len && s.str[ i_s] >= '0' && s.str[ i_s] <= '9')) break; | |
buf[i_d] = s.str[ i_s]; | |
i_s++; | |
i_d++; | |
} | |
if (i_s < s.len && s.str[ i_s] == '.') { | |
int i_s1 = i_s + 1; | |
int sum = 0; | |
for (;;) { | |
if (!(i_s1 < s.len && s.str[ i_s1] >= '0' && s.str[ i_s1] <= '9')) break; | |
sum += s.str[ i_s1] - ((byte)('0')); | |
i_s1++; | |
} | |
if (sum > 0) { | |
for (int c_i = i_s; c_i < i_s1; ++c_i) { | |
buf[i_d] = s.str[ c_i]; | |
i_d++; | |
} | |
} | |
i_s = i_s1; | |
} | |
if (i_s < s.len && s.str[ i_s] != '.') { | |
for (;;) { | |
buf[i_d] = s.str[ i_s]; | |
i_s++; | |
i_d++; | |
if (i_s >= s.len) { | |
break; | |
} | |
} | |
} | |
buf[i_d] = 0; | |
return tos(buf, i_d); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
inline string strconv__ftoa_64(f64 f) { | |
return strconv__f64_to_str(f, 17); | |
} | |
inline string strconv__ftoa_32(f32 f) { | |
return strconv__f32_to_str(f, 8); | |
} | |
string strconv__format_int(i64 n, int radix) { | |
{ // Unsafe block | |
if (radix < 2 || radix > 36) { | |
v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("invalid radix: "), 0xfe07, {.d_i32 = radix}}, {_SLIT(" . It should be => 2 and <= 36"), 0, { .d_c = 0 }}})) ); | |
} | |
if (n == 0) { | |
return _SLIT("0"); | |
} | |
i64 n_copy = n; | |
string sign = _SLIT(""); | |
if (n < 0) { | |
sign = _SLIT("-"); | |
n_copy = -n_copy; | |
} | |
string res = _SLIT(""); | |
for (;;) { | |
if (!(n_copy != 0)) break; | |
string tmp_0 = res; | |
string tmp_1 = byte_ascii_str(string_at(_const_strconv__base_digits, n_copy % radix)); | |
res = string__plus(tmp_1, res); | |
string_free(&tmp_0); | |
string_free(&tmp_1); | |
n_copy /= radix; | |
} | |
return str_intp(3, _MOV((StrIntpData[]){{_SLIT0, 0xfe10, {.d_s = sign}}, {_SLIT0, 0xfe10, {.d_s = res}}, {_SLIT0, 0, { .d_c = 0 }}})) ; | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string strconv__format_uint(u64 n, int radix) { | |
{ // Unsafe block | |
if (radix < 2 || radix > 36) { | |
v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("invalid radix: "), 0xfe07, {.d_i32 = radix}}, {_SLIT(" . It should be => 2 and <= 36"), 0, { .d_c = 0 }}})) ); | |
} | |
if (n == 0U) { | |
return _SLIT("0"); | |
} | |
u64 n_copy = n; | |
string res = _SLIT(""); | |
u64 uradix = ((u64)(radix)); | |
for (;;) { | |
if (!(n_copy != 0U)) break; | |
string tmp_0 = res; | |
string tmp_1 = byte_ascii_str(string_at(_const_strconv__base_digits, n_copy % uradix)); | |
res = string__plus(tmp_1, res); | |
string_free(&tmp_0); | |
string_free(&tmp_1); | |
n_copy /= uradix; | |
} | |
return res; | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
VV_LOCAL_SYMBOL void strconv__assert1(bool t, string msg) { | |
if (!t) { | |
v_panic(msg); | |
} | |
} | |
inline VV_LOCAL_SYMBOL u32 strconv__bool_to_u32(bool b) { | |
if (b) { | |
return ((u32)(1U)); | |
} | |
return ((u32)(0U)); | |
} | |
inline VV_LOCAL_SYMBOL u64 strconv__bool_to_u64(bool b) { | |
if (b) { | |
return ((u64)(1U)); | |
} | |
return ((u64)(0U)); | |
} | |
VV_LOCAL_SYMBOL string strconv__get_string_special(bool neg, bool expZero, bool mantZero) { | |
if (!mantZero) { | |
return _SLIT("nan"); | |
} | |
if (!expZero) { | |
if (neg) { | |
return _SLIT("-inf"); | |
} else { | |
return _SLIT("+inf"); | |
} | |
} | |
if (neg) { | |
return _SLIT("-0e+00"); | |
} | |
return _SLIT("0e+00"); | |
} | |
VV_LOCAL_SYMBOL u32 strconv__mul_shift_32(u32 m, u64 mul, int ishift) { | |
multi_return_u64_u64 mr_1939 = math__bits__mul_64(((u64)(m)), mul); | |
u64 hi = mr_1939.arg0; | |
u64 lo = mr_1939.arg1; | |
u64 shifted_sum = (lo >> ((u64)(ishift))) + (hi << ((u64)(64 - ishift))); | |
strconv__assert1(shifted_sum <= 2147483647U, _SLIT("shiftedSum <= math.max_u32")); | |
return ((u32)(shifted_sum)); | |
} | |
VV_LOCAL_SYMBOL u32 strconv__mul_pow5_invdiv_pow2(u32 m, u32 q, int j) { | |
return strconv__mul_shift_32(m, (*(u64*)/*ee elem_typ */array_get(_const_strconv__pow5_inv_split_32, q)), j); | |
} | |
VV_LOCAL_SYMBOL u32 strconv__mul_pow5_div_pow2(u32 m, u32 i, int j) { | |
return strconv__mul_shift_32(m, (*(u64*)/*ee elem_typ */array_get(_const_strconv__pow5_split_32, i)), j); | |
} | |
VV_LOCAL_SYMBOL u32 strconv__pow5_factor_32(u32 i_v) { | |
u32 v = i_v; | |
for (u32 n = ((u32)(0U)); ; n++) { | |
u32 q = v / 5U; | |
u32 r = v % 5U; | |
if (r != 0U) { | |
return n; | |
} | |
v = q; | |
} | |
return v; | |
} | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_five_32(u32 v, u32 p) { | |
return strconv__pow5_factor_32(v) >= p; | |
} | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_two_32(u32 v, u32 p) { | |
return ((u32)(math__bits__trailing_zeros_32(v))) >= p; | |
} | |
VV_LOCAL_SYMBOL u32 strconv__log10_pow2(int e) { | |
strconv__assert1(e >= 0, _SLIT("e >= 0")); | |
strconv__assert1(e <= 1650, _SLIT("e <= 1650")); | |
return (((u32)(e)) * 78913U) >> 18U; | |
} | |
VV_LOCAL_SYMBOL u32 strconv__log10_pow5(int e) { | |
strconv__assert1(e >= 0, _SLIT("e >= 0")); | |
strconv__assert1(e <= 2620, _SLIT("e <= 2620")); | |
return (((u32)(e)) * 732923U) >> 20U; | |
} | |
VV_LOCAL_SYMBOL int strconv__pow5_bits(int e) { | |
strconv__assert1(e >= 0, _SLIT("e >= 0")); | |
strconv__assert1(e <= 3528, _SLIT("e <= 3528")); | |
return ((int)(((((u32)(e)) * 1217359U) >> 19U) + 1U)); | |
} | |
VV_LOCAL_SYMBOL u64 strconv__shift_right_128(strconv__Uint128 v, int shift) { | |
strconv__assert1(shift < 64, _SLIT("shift < 64")); | |
return ((v.hi << ((u64)(64 - shift))) | (v.lo >> ((u32)(shift)))); | |
} | |
VV_LOCAL_SYMBOL u64 strconv__mul_shift_64(u64 m, strconv__Uint128 mul, int shift) { | |
multi_return_u64_u64 mr_4556 = math__bits__mul_64(m, mul.hi); | |
u64 hihi = mr_4556.arg0; | |
u64 hilo = mr_4556.arg1; | |
multi_return_u64_u64 mr_4594 = math__bits__mul_64(m, mul.lo); | |
u64 lohi = mr_4594.arg0; | |
strconv__Uint128 sum = (strconv__Uint128){.lo = lohi + hilo,.hi = hihi,}; | |
if (sum.lo < lohi) { | |
sum.hi++; | |
} | |
return strconv__shift_right_128(sum, shift - 64); | |
} | |
VV_LOCAL_SYMBOL u32 strconv__pow5_factor_64(u64 v_i) { | |
u64 v = v_i; | |
for (u32 n = ((u32)(0U)); ; n++) { | |
u64 q = v / 5U; | |
u64 r = v % 5U; | |
if (r != 0U) { | |
return n; | |
} | |
v = q; | |
} | |
return ((u32)(0U)); | |
} | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_five_64(u64 v, u32 p) { | |
return strconv__pow5_factor_64(v) >= p; | |
} | |
VV_LOCAL_SYMBOL bool strconv__multiple_of_power_of_two_64(u64 v, u32 p) { | |
return ((u32)(math__bits__trailing_zeros_64(v))) >= p; | |
} | |
string strconv__f32_to_str_l(f32 f) { | |
string s = strconv__f32_to_str(f, 6); | |
string res = strconv__fxx_to_str_l_parse(s); | |
string_free(&s); | |
return res; | |
} | |
string strconv__f32_to_str_l_no_dot(f32 f) { | |
string s = strconv__f32_to_str(f, 6); | |
string res = strconv__fxx_to_str_l_parse_no_dot(s); | |
string_free(&s); | |
return res; | |
} | |
string strconv__f64_to_str_l(f64 f) { | |
string s = strconv__f64_to_str(f, 18); | |
string res = strconv__fxx_to_str_l_parse(s); | |
string_free(&s); | |
return res; | |
} | |
string strconv__f64_to_str_l_no_dot(f64 f) { | |
string s = strconv__f64_to_str(f, 18); | |
string res = strconv__fxx_to_str_l_parse_no_dot(s); | |
string_free(&s); | |
return res; | |
} | |
string strconv__fxx_to_str_l_parse(string s) { | |
if (s.len > 2 && (string_at(s, 0) == 'n' || string_at(s, 1) == 'i')) { | |
return s; | |
} | |
bool m_sgn_flag = false; | |
int sgn = 1; | |
Array_fixed_byte_26 b = {0}; | |
int d_pos = 1; | |
int i = 0; | |
int i1 = 0; | |
int exp = 0; | |
int exp_sgn = 1; | |
for (int _t85 = 0; _t85 < s.len; ++_t85) { | |
byte c = s.str[_t85]; | |
if (c == '-') { | |
sgn = -1; | |
i++; | |
} else if (c == '+') { | |
sgn = 1; | |
i++; | |
} else if (c >= '0' && c <= '9') { | |
b[v_fixed_index(i1, 26)] = c; | |
i1++; | |
i++; | |
} else if (c == '.') { | |
if (sgn > 0) { | |
d_pos = i; | |
} else { | |
d_pos = i - 1; | |
} | |
i++; | |
} else if (c == 'e') { | |
i++; | |
break; | |
} else { | |
return _SLIT("Float conversion error!!"); | |
} | |
} | |
b[v_fixed_index(i1, 26)] = 0; | |
if (string_at(s, i) == '-') { | |
exp_sgn = -1; | |
i++; | |
} else if (string_at(s, i) == '+') { | |
exp_sgn = 1; | |
i++; | |
} | |
int c = i; | |
for (;;) { | |
if (!(c < s.len)) break; | |
exp = exp * 10 + ((int)(string_at(s, c) - '0')); | |
c++; | |
} | |
Array_byte res = __new_array_with_default(exp + 32, 0, sizeof(byte), &(byte[]){0}); | |
int r_i = 0; | |
if (sgn == 1) { | |
if (m_sgn_flag) { | |
array_set(&res, r_i, &(byte[]) { '+' }); | |
r_i++; | |
} | |
} else { | |
array_set(&res, r_i, &(byte[]) { '-' }); | |
r_i++; | |
} | |
i = 0; | |
if (exp_sgn >= 0) { | |
for (;;) { | |
if (!(b[v_fixed_index(i, 26)] != 0)) break; | |
array_set(&res, r_i, &(byte[]) { b[v_fixed_index(i, 26)] }); | |
r_i++; | |
i++; | |
if (i >= d_pos && exp >= 0) { | |
if (exp == 0) { | |
array_set(&res, r_i, &(byte[]) { '.' }); | |
r_i++; | |
} | |
exp--; | |
} | |
} | |
for (;;) { | |
if (!(exp >= 0)) break; | |
array_set(&res, r_i, &(byte[]) { '0' }); | |
r_i++; | |
exp--; | |
} | |
} else { | |
bool dot_p = true; | |
for (;;) { | |
if (!(exp > 0)) break; | |
array_set(&res, r_i, &(byte[]) { '0' }); | |
r_i++; | |
exp--; | |
if (dot_p) { | |
array_set(&res, r_i, &(byte[]) { '.' }); | |
r_i++; | |
dot_p = false; | |
} | |
} | |
for (;;) { | |
if (!(b[v_fixed_index(i, 26)] != 0)) break; | |
array_set(&res, r_i, &(byte[]) { b[v_fixed_index(i, 26)] }); | |
r_i++; | |
i++; | |
} | |
} | |
array_set(&res, r_i, &(byte[]) { 0 }); | |
return tos(res.data, r_i); | |
} | |
string strconv__fxx_to_str_l_parse_no_dot(string s) { | |
if (s.len > 2 && (string_at(s, 0) == 'n' || string_at(s, 1) == 'i')) { | |
return s; | |
} | |
bool m_sgn_flag = false; | |
int sgn = 1; | |
Array_fixed_byte_26 b = {0}; | |
int d_pos = 1; | |
int i = 0; | |
int i1 = 0; | |
int exp = 0; | |
int exp_sgn = 1; | |
for (int _t89 = 0; _t89 < s.len; ++_t89) { | |
byte c = s.str[_t89]; | |
if (c == '-') { | |
sgn = -1; | |
i++; | |
} else if (c == '+') { | |
sgn = 1; | |
i++; | |
} else if (c >= '0' && c <= '9') { | |
b[v_fixed_index(i1, 26)] = c; | |
i1++; | |
i++; | |
} else if (c == '.') { | |
if (sgn > 0) { | |
d_pos = i; | |
} else { | |
d_pos = i - 1; | |
} | |
i++; | |
} else if (c == 'e') { | |
i++; | |
break; | |
} else { | |
return _SLIT("Float conversion error!!"); | |
} | |
} | |
b[v_fixed_index(i1, 26)] = 0; | |
if (string_at(s, i) == '-') { | |
exp_sgn = -1; | |
i++; | |
} else if (string_at(s, i) == '+') { | |
exp_sgn = 1; | |
i++; | |
} | |
int c = i; | |
for (;;) { | |
if (!(c < s.len)) break; | |
exp = exp * 10 + ((int)(string_at(s, c) - '0')); | |
c++; | |
} | |
Array_byte res = __new_array_with_default(exp + 32, 0, sizeof(byte), &(byte[]){0}); | |
int r_i = 0; | |
if (sgn == 1) { | |
if (m_sgn_flag) { | |
array_set(&res, r_i, &(byte[]) { '+' }); | |
r_i++; | |
} | |
} else { | |
array_set(&res, r_i, &(byte[]) { '-' }); | |
r_i++; | |
} | |
i = 0; | |
if (exp_sgn >= 0) { | |
for (;;) { | |
if (!(b[v_fixed_index(i, 26)] != 0)) break; | |
array_set(&res, r_i, &(byte[]) { b[v_fixed_index(i, 26)] }); | |
r_i++; | |
i++; | |
if (i >= d_pos && exp >= 0) { | |
if (exp == 0) { | |
array_set(&res, r_i, &(byte[]) { '.' }); | |
r_i++; | |
} | |
exp--; | |
} | |
} | |
for (;;) { | |
if (!(exp >= 0)) break; | |
array_set(&res, r_i, &(byte[]) { '0' }); | |
r_i++; | |
exp--; | |
} | |
} else { | |
bool dot_p = true; | |
for (;;) { | |
if (!(exp > 0)) break; | |
array_set(&res, r_i, &(byte[]) { '0' }); | |
r_i++; | |
exp--; | |
if (dot_p) { | |
array_set(&res, r_i, &(byte[]) { '.' }); | |
r_i++; | |
dot_p = false; | |
} | |
} | |
for (;;) { | |
if (!(b[v_fixed_index(i, 26)] != 0)) break; | |
array_set(&res, r_i, &(byte[]) { b[v_fixed_index(i, 26)] }); | |
r_i++; | |
i++; | |
} | |
} | |
if (r_i > 1 && (*(byte*)/*ee elem_typ */array_get(res, r_i - 1)) == '.') { | |
r_i--; | |
} | |
array_set(&res, r_i, &(byte[]) { 0 }); | |
return tos(res.data, r_i); | |
} | |
int strconv__dec_digits(u64 n) { | |
if (n <= 9999999999U) { | |
if (n <= 99999U) { | |
if (n <= 99U) { | |
if (n <= 9U) { | |
return 1; | |
} else { | |
return 2; | |
} | |
} else { | |
if (n <= 999U) { | |
return 3; | |
} else { | |
if (n <= 9999U) { | |
return 4; | |
} else { | |
return 5; | |
} | |
} | |
} | |
} else { | |
if (n <= 9999999U) { | |
if (n <= 999999U) { | |
return 6; | |
} else { | |
return 7; | |
} | |
} else { | |
if (n <= 99999999U) { | |
return 8; | |
} else { | |
if (n <= 999999999U) { | |
return 9; | |
} | |
return 10; | |
} | |
} | |
} | |
} else { | |
if (n <= 999999999999999U) { | |
if (n <= 999999999999U) { | |
if (n <= 99999999999U) { | |
return 11; | |
} else { | |
return 12; | |
} | |
} else { | |
if (n <= 9999999999999U) { | |
return 13; | |
} else { | |
if (n <= 99999999999999U) { | |
return 14; | |
} else { | |
return 15; | |
} | |
} | |
} | |
} else { | |
if (n <= 99999999999999999U) { | |
if (n <= 9999999999999999U) { | |
return 16; | |
} else { | |
return 17; | |
} | |
} else { | |
if (n <= 999999999999999999U) { | |
return 18; | |
} else { | |
if (n <= 9999999999999999999U) { | |
return 19; | |
} | |
return 20; | |
} | |
} | |
} | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL array __new_array(int mylen, int cap, int elm_size) { | |
int cap_ = (cap < mylen ? (mylen) : (cap)); | |
array arr = (array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,}; | |
return arr; | |
} | |
VV_LOCAL_SYMBOL array __new_array_with_default(int mylen, int cap, int elm_size, voidptr val) { | |
int cap_ = (cap < mylen ? (mylen) : (cap)); | |
array arr = (array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,}; | |
if (val != 0) { | |
for (int i = 0; i < arr.len; ++i) { | |
array_set_unsafe(&arr, i, val); | |
} | |
} | |
return arr; | |
} | |
VV_LOCAL_SYMBOL array __new_array_with_array_default(int mylen, int cap, int elm_size, array val) { | |
int cap_ = (cap < mylen ? (mylen) : (cap)); | |
array arr = (array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,}; | |
for (int i = 0; i < arr.len; ++i) { | |
array val_clone = array_clone(&val); | |
array_set_unsafe(&arr, i, &val_clone); | |
} | |
return arr; | |
} | |
VV_LOCAL_SYMBOL array new_array_from_c_array(int len, int cap, int elm_size, voidptr c_array) { | |
int cap_ = (cap < len ? (len) : (cap)); | |
array arr = (array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = len,.cap = cap_,}; | |
memcpy(arr.data, c_array, len * elm_size); | |
return arr; | |
} | |
VV_LOCAL_SYMBOL void array_ensure_cap(array* a, int required) { | |
if (required <= a->cap) { | |
return; | |
} | |
int cap = (a->cap > 0 ? (a->cap) : (2)); | |
for (;;) { | |
if (!(required > cap)) break; | |
cap *= 2; | |
} | |
int new_size = cap * a->element_size; | |
byte* new_data = vcalloc(new_size); | |
if (a->data != ((voidptr)(0))) { | |
memcpy(new_data, a->data, a->len * a->element_size); | |
} | |
a->data = new_data; | |
a->offset = 0; | |
a->cap = cap; | |
} | |
array array_repeat(array a, int count) { | |
if (count < 0) { | |
v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("array.repeat: count is negative: "), 0xfe07, {.d_i32 = count}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
} | |
int size = count * a.len * a.element_size; | |
if (size == 0) { | |
size = a.element_size; | |
} | |
array arr = (array){.element_size = a.element_size,.data = vcalloc(size),.offset = 0,.len = count * a.len,.cap = count * a.len,}; | |
int size_of_array = ((int)(/*SizeOf*/ sizeof(array))); | |
for (int i = 0; i < count; ++i) { | |
if (a.len > 0 && a.element_size == size_of_array) { | |
array ary = (array){.element_size = 0,.data = 0,.offset = 0,.len = 0,.cap = 0,}; | |
memcpy(&ary, a.data, size_of_array); | |
array ary_clone = array_clone(&ary); | |
memcpy(array_get_unsafe(arr, i * a.len), &ary_clone, a.len * a.element_size); | |
} else { | |
memcpy(array_get_unsafe(arr, i * a.len), ((byte*)(a.data)), a.len * a.element_size); | |
} | |
} | |
return arr; | |
} | |
void array_insert_many(array* a, int i, voidptr val, int size) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (i < 0 || i > a->len) { | |
v_panic( str_intp(3, _MOV((StrIntpData[]){{_SLIT("array.insert_many: index out of range (i == "), 0xfe07, {.d_i32 = i}}, {_SLIT(", a.len == "), 0xfe07, {.d_i32 = a->len}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ); | |
} | |
} | |
#endif | |
array_ensure_cap(a, a->len + size); | |
int elem_size = a->element_size; | |
{ // Unsafe block | |
voidptr iptr = array_get_unsafe(/*rec*/*a, i); | |
memmove(array_get_unsafe(/*rec*/*a, i + size), iptr, (a->len - i) * elem_size); | |
memcpy(iptr, val, size * elem_size); | |
} | |
a->len += size; | |
} | |
void array_prepend_many(array* a, voidptr val, int size) { | |
array_insert_many(a, 0, val, size); | |
} | |
void array_trim(array* a, int index) { | |
if (index < a->len) { | |
a->len = index; | |
} | |
} | |
inline VV_LOCAL_SYMBOL voidptr array_get_unsafe(array a, int i) { | |
{ // Unsafe block | |
return ((byte*)(a.data)) + i * a.element_size; | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL voidptr array_get(array a, int i) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (i < 0 || i >= a.len) { | |
v_panic( str_intp(3, _MOV((StrIntpData[]){{_SLIT("array.get: index out of range (i == "), 0xfe07, {.d_i32 = i}}, {_SLIT(", a.len == "), 0xfe07, {.d_i32 = a.len}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ); | |
} | |
} | |
#endif | |
{ // Unsafe block | |
return ((byte*)(a.data)) + i * a.element_size; | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL voidptr array_get_with_check(array a, int i) { | |
if (i < 0 || i >= a.len) { | |
return 0; | |
} | |
{ // Unsafe block | |
return ((byte*)(a.data)) + i * a.element_size; | |
} | |
return 0; | |
} | |
voidptr array_first(array a) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (a.len == 0) { | |
v_panic(_SLIT("array.first: array is empty")); | |
} | |
} | |
#endif | |
return a.data; | |
} | |
voidptr array_last(array a) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (a.len == 0) { | |
v_panic(_SLIT("array.last: array is empty")); | |
} | |
} | |
#endif | |
{ // Unsafe block | |
return ((byte*)(a.data)) + (a.len - 1) * a.element_size; | |
} | |
return 0; | |
} | |
voidptr array_pop(array* a) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (a->len == 0) { | |
v_panic(_SLIT("array.pop: array is empty")); | |
} | |
} | |
#endif | |
int new_len = a->len - 1; | |
byte* last_elem = ((byte*)(a->data)) + new_len * a->element_size; | |
a->len = new_len; | |
return memdup(last_elem, a->element_size); | |
} | |
VV_LOCAL_SYMBOL array array_slice(array a, int start, int _end) { | |
int end = _end; | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (start > end) { | |
v_panic( str_intp(3, _MOV((StrIntpData[]){{_SLIT("array.slice: invalid slice index ("), 0xfe07, {.d_i32 = start}}, {_SLIT(" > "), 0xfe07, {.d_i32 = end}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ); | |
} | |
if (end > a.len) { | |
v_panic( str_intp(3, _MOV((StrIntpData[]){{_SLIT("array.slice: slice bounds out of range ("), 0xfe07, {.d_i32 = end}}, {_SLIT(" >= "), 0xfe07, {.d_i32 = a.len}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ); | |
} | |
if (start < 0) { | |
v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("array.slice: slice bounds out of range ("), 0xfe07, {.d_i32 = start}}, {_SLIT(" < 0)"), 0, { .d_c = 0 }}})) ); | |
} | |
} | |
#endif | |
int offset = start * a.element_size; | |
byte* data = ((byte*)(a.data)) + offset; | |
int l = end - start; | |
array res = (array){.element_size = a.element_size,.data = data,.offset = a.offset + offset,.len = l,.cap = l,}; | |
return res; | |
} | |
VV_LOCAL_SYMBOL array array_slice2(array a, int start, int _end, bool end_max) { | |
int end = (end_max ? (a.len) : (_end)); | |
return array_slice(a, start, end); | |
} | |
VV_LOCAL_SYMBOL array array_clone_static(array a) { | |
return array_clone(&a); | |
} | |
array array_clone(array* a) { | |
int size = a->cap * a->element_size; | |
if (size == 0) { | |
size++; | |
} | |
array arr = (array){.element_size = a->element_size,.data = vcalloc(size),.offset = 0,.len = a->len,.cap = a->cap,}; | |
int size_of_array = ((int)(/*SizeOf*/ sizeof(array))); | |
if (a->element_size == size_of_array) { | |
bool is_elem_array = true; | |
for (int i = 0; i < a->len; ++i) { | |
array ar = (array){.element_size = 0,.data = 0,.offset = 0,.len = 0,.cap = 0,}; | |
memcpy(&ar, array_get_unsafe(/*rec*/*a, i), size_of_array); | |
if (ar.len > ar.cap || ar.cap <= 0 || ar.element_size <= 0) { | |
is_elem_array = false; | |
break; | |
} | |
array ar_clone = array_clone(&ar); | |
array_set_unsafe(&arr, i, &ar_clone); | |
} | |
if (is_elem_array) { | |
return arr; | |
} | |
} | |
if (!isnil(a->data)) { | |
memcpy(((byte*)(arr.data)), a->data, a->cap * a->element_size); | |
} | |
return arr; | |
} | |
inline VV_LOCAL_SYMBOL void array_set_unsafe(array* a, int i, voidptr val) { | |
memcpy(((byte*)(a->data)) + a->element_size * i, val, a->element_size); | |
} | |
VV_LOCAL_SYMBOL void array_set(array* a, int i, voidptr val) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (i < 0 || i >= a->len) { | |
v_panic( str_intp(3, _MOV((StrIntpData[]){{_SLIT("array.set: index out of range (i == "), 0xfe07, {.d_i32 = i}}, {_SLIT(", a.len == "), 0xfe07, {.d_i32 = a->len}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ); | |
} | |
} | |
#endif | |
memcpy(((byte*)(a->data)) + a->element_size * i, val, a->element_size); | |
} | |
VV_LOCAL_SYMBOL void array_push(array* a, voidptr val) { | |
array_ensure_cap(a, a->len + 1); | |
memmove(((byte*)(a->data)) + a->element_size * a->len, val, a->element_size); | |
a->len++; | |
} | |
void array_push_many(array* a3, voidptr val, int size) { | |
if (a3->data == val && !isnil(a3->data)) { | |
array copy = array_clone(a3); | |
array_ensure_cap(a3, a3->len + size); | |
memcpy(array_get_unsafe(/*rec*/*a3, a3->len), copy.data, a3->element_size * size); | |
} else { | |
array_ensure_cap(a3, a3->len + size); | |
if (!isnil(a3->data) && !isnil(val)) { | |
memcpy(array_get_unsafe(/*rec*/*a3, a3->len), val, a3->element_size * size); | |
} | |
} | |
a3->len += size; | |
} | |
array array_reverse(array a) { | |
if (a.len < 2) { | |
return a; | |
} | |
array arr = (array){.element_size = a.element_size,.data = vcalloc(a.cap * a.element_size),.offset = 0,.len = a.len,.cap = a.cap,}; | |
for (int i = 0; i < a.len; ++i) { | |
array_set_unsafe(&arr, i, array_get_unsafe(a, a.len - 1 - i)); | |
} | |
return arr; | |
} | |
void array_free(array* a) { | |
v_free(((byte*)(a->data)) - a->offset); | |
} | |
void Array_string_free(Array_string* a) { | |
// FOR IN array | |
for (int _t131 = 0; _t131 < a->len; ++_t131) { | |
string s = ((string*)a->data)[_t131]; | |
string_free(&s); | |
} | |
v_free(a->data); | |
} | |
string Array_string_str(Array_string a) { | |
strings__Builder sb = strings__new_builder(a.len * 3); | |
strings__Builder_write_string(&sb, _SLIT("[")); | |
for (int i = 0; i < a.len; ++i) { | |
string val = (*(string*)/*ee elem_typ */array_get(a, i)); | |
strings__Builder_write_string(&sb, _SLIT("'")); | |
strings__Builder_write_string(&sb, val); | |
strings__Builder_write_string(&sb, _SLIT("'")); | |
if (i < a.len - 1) { | |
strings__Builder_write_string(&sb, _SLIT(", ")); | |
} | |
} | |
strings__Builder_write_string(&sb, _SLIT("]")); | |
string res = strings__Builder_str(&sb); | |
strings__Builder_free(&sb); | |
return res; | |
} | |
VV_LOCAL_SYMBOL int compare_ints(int* a, int* b) { | |
if (*a < *b) { | |
return -1; | |
} | |
if (*a > *b) { | |
return 1; | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL int compare_ints_reverse(int* a, int* b) { | |
if (*a > *b) { | |
return -1; | |
} | |
if (*a < *b) { | |
return 1; | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL string vcommithash(void) { | |
return tos5(((char*)(V_CURRENT_COMMIT_HASH))); | |
} | |
void panic_optional_not_set(string s) { | |
v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("optional not set ("), 0xfe10, {.d_s = s}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ); | |
} | |
void v_panic(string s) { | |
#if defined(_VFREESTANDING) | |
{ | |
} | |
#else | |
{ | |
eprint(_SLIT("V panic: ")); | |
eprintln(s); | |
eprintln( str_intp(2, _MOV((StrIntpData[]){{_SLIT("v hash: "), 0xfe10, {.d_s = vcommithash()}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
#if defined(CUSTOM_DEFINE_exit_after_panic_message) | |
{ | |
} | |
#elif defined(CUSTOM_DEFINE_no_backtrace) | |
{ | |
} | |
#else | |
{ | |
#if defined(__TINYC__) | |
{ | |
#if defined(CUSTOM_DEFINE_panics_break_into_debugger) | |
{ | |
} | |
#else | |
{ | |
tcc_backtrace("Backtrace"); | |
} | |
#endif | |
exit(1); | |
} | |
#endif | |
print_backtrace_skipping_top_frames(1); | |
exit(1); | |
} | |
#endif | |
} | |
#endif | |
} | |
void eprintln(string s) { | |
#if defined(_VFREESTANDING) | |
{ | |
} | |
#elif defined(__TARGET_IOS__) | |
{ | |
} | |
#else | |
{ | |
fflush(stdout); | |
fflush(stderr); | |
if (s.str == 0) { | |
write(2, "eprintln(NIL)\n", 14); | |
} else { | |
write(2, s.str, s.len); | |
write(2, "\n", 1); | |
} | |
fflush(stderr); | |
} | |
#endif | |
} | |
void eprint(string s) { | |
#if defined(_VFREESTANDING) | |
{ | |
} | |
#elif defined(__TARGET_IOS__) | |
{ | |
} | |
#else | |
{ | |
fflush(stdout); | |
fflush(stderr); | |
if (s.str == 0) { | |
write(2, "eprint(NIL)", 11); | |
} else { | |
write(2, s.str, s.len); | |
} | |
fflush(stderr); | |
} | |
#endif | |
} | |
void println(string s) { | |
if (s.str == 0) { | |
#if defined(__ANDROID__) | |
{ | |
} | |
#elif defined(__TARGET_IOS__) | |
{ | |
} | |
#elif defined(_VFREESTANDING) | |
{ | |
} | |
#else | |
{ | |
write(1, "println(NIL)\n", 13); | |
} | |
#endif | |
return; | |
} | |
#if defined(__TARGET_IOS__) | |
{ | |
} | |
#elif defined(_VFREESTANDING) | |
{ | |
} | |
#else | |
{ | |
write(1, s.str, s.len); | |
write(1, "\n", 1); | |
} | |
#endif | |
} | |
byte* v_malloc(int n) { | |
if (n <= 0) { | |
v_panic(_SLIT("> V malloc(<=0)")); | |
} | |
byte* res = ((byte*)(0)); | |
#if defined(_VPREALLOC) | |
{ | |
} | |
#elif defined(_VGCBOEHM) | |
{ | |
} | |
#elif defined(_VFREESTANDING) | |
{ | |
} | |
#else | |
{ | |
res = malloc(n); | |
} | |
#endif | |
if (res == 0) { | |
v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), 0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}})) ); | |
} | |
return res; | |
} | |
byte* v_realloc(byte* b, int n) { | |
byte* new_ptr = ((byte*)(0)); | |
#if defined(_VPREALLOC) | |
{ | |
} | |
#elif defined(_VGCBOEHM) | |
{ | |
} | |
#else | |
{ | |
new_ptr = realloc(b, n); | |
} | |
#endif | |
if (new_ptr == 0) { | |
v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("realloc("), 0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}})) ); | |
} | |
return new_ptr; | |
} | |
byte* vcalloc(int n) { | |
if (n < 0) { | |
v_panic(_SLIT("calloc(<0)")); | |
} else if (n == 0) { | |
return ((byte*)(0)); | |
} | |
#if defined(_VPREALLOC) | |
{ | |
} | |
#elif defined(_VGCBOEHM) | |
{ | |
} | |
#else | |
{ | |
return calloc(1, n); | |
} | |
#endif | |
return 0; | |
} | |
void v_free(voidptr ptr) { | |
#if defined(_VPREALLOC) | |
{ | |
} | |
#elif defined(_VGCBOEHM) | |
{ | |
} | |
#else | |
{ | |
free(ptr); | |
} | |
#endif | |
} | |
voidptr memdup(voidptr src, int sz) { | |
if (sz == 0) { | |
return vcalloc(1); | |
} | |
{ // Unsafe block | |
byte* mem = v_malloc(sz); | |
return memcpy(mem, src, sz); | |
} | |
return 0; | |
} | |
inline VV_LOCAL_SYMBOL int v_fixed_index(int i, int len) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (i < 0 || i >= len) { | |
string s = str_intp(3, _MOV((StrIntpData[]){{_SLIT("fixed array index out of range (index: "), 0xfe07, {.d_i32 = i}}, {_SLIT(", len: "), 0xfe07, {.d_i32 = len}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ; | |
v_panic(s); | |
} | |
} | |
#endif | |
return i; | |
} | |
inline bool isnil(voidptr v) { | |
return v == 0; | |
} | |
VV_LOCAL_SYMBOL voidptr __as_cast(voidptr obj, int obj_type, int expected_type) { | |
if (obj_type != expected_type) { | |
string obj_name = string_clone((*(VCastTypeIndexName*)/*ee elem_typ */array_get(as_cast_type_indexes, 0)).tname); | |
string expected_name = string_clone((*(VCastTypeIndexName*)/*ee elem_typ */array_get(as_cast_type_indexes, 0)).tname); | |
// FOR IN array | |
for (int _t148 = 0; _t148 < as_cast_type_indexes.len; ++_t148) { | |
VCastTypeIndexName x = ((VCastTypeIndexName*)as_cast_type_indexes.data)[_t148]; | |
if (x.tindex == obj_type) { | |
obj_name = string_clone(x.tname); | |
} | |
if (x.tindex == expected_type) { | |
expected_name = string_clone(x.tname); | |
} | |
} | |
v_panic( str_intp(3, _MOV((StrIntpData[]){{_SLIT("as cast: cannot cast `"), 0xfe10, {.d_s = obj_name}}, {_SLIT("` to `"), 0xfe10, {.d_s = expected_name}}, {_SLIT("`"), 0, { .d_c = 0 }}})) ); | |
} | |
return obj; | |
} | |
VV_LOCAL_SYMBOL void __print_assert_failure(VAssertMetaInfo* i) { | |
eprintln( str_intp(5, _MOV((StrIntpData[]){{_SLIT0, 0xfe10, {.d_s = i->fpath}}, {_SLIT(":"), 0xfe07, {.d_i32 = i->line_nr + 1}}, {_SLIT(": FAIL: fn "), 0xfe10, {.d_s = i->fn_name}}, {_SLIT(": assert "), 0xfe10, {.d_s = i->src}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
if (i->op.len > 0 && !string__eq(i->op, _SLIT("call"))) { | |
eprintln( str_intp(3, _MOV((StrIntpData[]){{_SLIT(" left value: "), 0xfe10, {.d_s = i->llabel}}, {_SLIT(" = "), 0xfe10, {.d_s = i->lvalue}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
if (string__eq(i->rlabel, i->rvalue)) { | |
eprintln( str_intp(2, _MOV((StrIntpData[]){{_SLIT(" right value: "), 0xfe10, {.d_s = i->rlabel}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
} else { | |
eprintln( str_intp(3, _MOV((StrIntpData[]){{_SLIT(" right value: "), 0xfe10, {.d_s = i->rlabel}}, {_SLIT(" = "), 0xfe10, {.d_s = i->rvalue}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
} | |
} | |
} | |
VV_LOCAL_SYMBOL void restore_codepage(void) { | |
SetConsoleOutputCP(g_original_codepage); | |
} | |
VV_LOCAL_SYMBOL int is_terminal(int fd) { | |
u32 mode = ((u32)(0U)); | |
voidptr osfh = ((voidptr)(_get_osfhandle(fd))); | |
GetConsoleMode(osfh, ((voidptr)(&mode))); | |
return ((int)(mode)); | |
} | |
VV_LOCAL_SYMBOL void builtin_init(void) { | |
g_original_codepage = GetConsoleOutputCP(); | |
#ifndef __AVR_ARCH__ | |
SetConsoleOutputCP(CP_UTF8); | |
#endif | |
atexit((voidptr)restore_codepage); | |
if (is_terminal(1) > 0) { | |
#ifndef __AVR_ARCH__ | |
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ((ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT) | 0x0004)); | |
SetConsoleMode(GetStdHandle(STD_ERROR_HANDLE), ((ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT) | 0x0004)); | |
#endif | |
{ // Unsafe block | |
setbuf(stdout, 0); | |
setbuf(stderr, 0); | |
} | |
} | |
add_unhandled_exception_handler(); | |
} | |
VV_LOCAL_SYMBOL bool print_backtrace_skipping_top_frames(int skipframes) { | |
#if defined(__TINYC__) | |
{ | |
return print_backtrace_skipping_top_frames_tcc(skipframes); | |
} | |
#endif | |
eprintln(_SLIT("print_backtrace_skipping_top_frames is not implemented")); | |
return false; | |
} | |
VV_LOCAL_SYMBOL bool print_backtrace_skipping_top_frames_tcc(int skipframes) { | |
#if defined(__TINYC__) | |
{ | |
#if defined(CUSTOM_DEFINE_no_backtrace) | |
{ | |
} | |
#else | |
{ | |
tcc_backtrace("Backtrace"); | |
return true; | |
} | |
#endif | |
} | |
#else | |
{ | |
} | |
#endif | |
return false; | |
} | |
VV_LOCAL_SYMBOL void add_vectored_exception_handler(int (*handler)(ExceptionPointers* )) { | |
AddVectoredExceptionHandler(1, ((PVECTORED_EXCEPTION_HANDLER)(handler))); | |
} | |
VV_LOCAL_SYMBOL int __stdcall unhandled_exception_handler(ExceptionPointers* e) { | |
if (e->exception_record->code == (0x4001000A) || e->exception_record->code == (0x40010006)) { | |
return 0; | |
} | |
else { | |
println( str_intp(2, _MOV((StrIntpData[]){{_SLIT("Unhandled Exception 0x"), 0x7000fe86, {.d_u32 = e->exception_record->code}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
print_backtrace_skipping_top_frames(5); | |
}; | |
return 0; | |
} | |
VV_LOCAL_SYMBOL void add_unhandled_exception_handler(void) { | |
add_vectored_exception_handler((voidptr)((VectoredExceptionHandler)(((voidptr)(unhandled_exception_handler))))); | |
} | |
inline string f64_str(f64 x) { | |
{ // Unsafe block | |
strconv__Float64u f = (strconv__Float64u){.f = x,}; | |
if (f.u == _const_strconv__double_minus_zero) { | |
return _SLIT("-0"); | |
} | |
if (f.u == _const_strconv__double_plus_zero) { | |
return _SLIT("0"); | |
} | |
} | |
f64 abs_x = f64_abs(x); | |
if (abs_x >= 0.0001 && abs_x < 1.0e6) { | |
return strconv__f64_to_str_l(x); | |
} else { | |
return strconv__ftoa_64(x); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
inline string f64_strg(f64 x) { | |
if (x == 0) { | |
return _SLIT("0"); | |
} | |
f64 abs_x = f64_abs(x); | |
if (abs_x >= 0.0001 && abs_x < 1.0e6) { | |
return strconv__f64_to_str_l_no_dot(x); | |
} else { | |
return strconv__ftoa_64(x); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
inline string float_literal_str(float_literal d) { | |
return f64_str(((f64)(d))); | |
} | |
inline string f32_str(f32 x) { | |
{ // Unsafe block | |
strconv__Float32u f = (strconv__Float32u){.f = x,}; | |
if (f.u == _const_strconv__single_minus_zero) { | |
return _SLIT("-0"); | |
} | |
if (f.u == _const_strconv__single_plus_zero) { | |
return _SLIT("0"); | |
} | |
} | |
f32 abs_x = f32_abs(x); | |
if (abs_x >= 0.0001 && abs_x < 1.0e6) { | |
return strconv__f32_to_str_l(x); | |
} else { | |
return strconv__ftoa_32(x); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
inline string f32_strg(f32 x) { | |
if (x == 0) { | |
return _SLIT("0"); | |
} | |
f32 abs_x = f32_abs(x); | |
if (abs_x >= 0.0001 && abs_x < 1.0e6) { | |
return strconv__f32_to_str_l_no_dot(x); | |
} else { | |
return strconv__ftoa_32(x); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
inline f32 f32_abs(f32 a) { | |
return (a < 0 ? (-a) : (a)); | |
} | |
inline VV_LOCAL_SYMBOL f64 f64_abs(f64 a) { | |
return (a < 0 ? (-a) : (a)); | |
} | |
string char_str(char* cptr) { | |
return u64_hex(((u64)(cptr))); | |
} | |
inline VV_LOCAL_SYMBOL string int_str_l(int nn, int max) { | |
{ // Unsafe block | |
i64 n = ((i64)(nn)); | |
int d = 0; | |
if (n == 0) { | |
return _SLIT("0"); | |
} | |
bool is_neg = false; | |
if (n < 0) { | |
n = -n; | |
is_neg = true; | |
} | |
int index = max; | |
byte* buf = v_malloc(max + 1); | |
buf[index] = 0; | |
index--; | |
for (;;) { | |
if (!(n > 0)) break; | |
int n1 = ((int)(n / 100)); | |
d = ((((int)(n)) - (n1 * 100)) << 1); | |
n = n1; | |
buf[index] = _const_digit_pairs.str[d]; | |
index--; | |
d++; | |
buf[index] = _const_digit_pairs.str[d]; | |
index--; | |
} | |
index++; | |
if (d < 20) { | |
index++; | |
} | |
if (is_neg) { | |
index--; | |
buf[index] = '-'; | |
} | |
int diff = max - index; | |
memmove(buf, buf + index, diff + 1); | |
return tos(buf, diff); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string i8_str(i8 n) { | |
return int_str_l(((int)(n)), 5); | |
} | |
string i16_str(i16 n) { | |
return int_str_l(((int)(n)), 7); | |
} | |
string u16_str(u16 n) { | |
return int_str_l(((int)(n)), 7); | |
} | |
string int_str(int n) { | |
return int_str_l(n, 12); | |
} | |
inline string u32_str(u32 nn) { | |
{ // Unsafe block | |
u32 n = nn; | |
u32 d = ((u32)(0U)); | |
if (n == 0U) { | |
return _SLIT("0"); | |
} | |
int max = 12; | |
byte* buf = v_malloc(max + 1); | |
int index = max; | |
buf[index] = 0; | |
index--; | |
for (;;) { | |
if (!(n > 0U)) break; | |
u32 n1 = n / ((u32)(100U)); | |
d = ((n - (n1 * ((u32)(100U)))) << ((u32)(1U))); | |
n = n1; | |
buf[index] = _const_digit_pairs.str[ d]; | |
index--; | |
d++; | |
buf[index] = _const_digit_pairs.str[ d]; | |
index--; | |
} | |
index++; | |
if (d < ((u32)(20U))) { | |
index++; | |
} | |
int diff = max - index; | |
memmove(buf, buf + index, diff + 1); | |
return tos(buf, diff); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
inline string int_literal_str(int_literal n) { | |
return i64_str(((i64)(n))); | |
} | |
inline string i64_str(i64 nn) { | |
{ // Unsafe block | |
i64 n = nn; | |
i64 d = ((i64)(0)); | |
if (n == 0) { | |
return _SLIT("0"); | |
} | |
int max = 20; | |
byte* buf = v_malloc(max + 1); | |
bool is_neg = false; | |
if (n < 0) { | |
n = -n; | |
is_neg = true; | |
} | |
int index = max; | |
buf[index] = 0; | |
index--; | |
for (;;) { | |
if (!(n > 0)) break; | |
i64 n1 = n / ((i64)(100)); | |
d = ((n - (n1 * ((i64)(100)))) << ((i64)(1))); | |
n = n1; | |
buf[index] = _const_digit_pairs.str[ d]; | |
index--; | |
d++; | |
buf[index] = _const_digit_pairs.str[ d]; | |
index--; | |
} | |
index++; | |
if (d < ((i64)(20))) { | |
index++; | |
} | |
if (is_neg) { | |
index--; | |
buf[index] = '-'; | |
} | |
int diff = max - index; | |
memmove(buf, buf + index, diff + 1); | |
return tos(buf, diff); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
inline string u64_str(u64 nn) { | |
{ // Unsafe block | |
u64 n = nn; | |
u64 d = ((u64)(0U)); | |
if (n == 0U) { | |
return _SLIT("0"); | |
} | |
int max = 20; | |
byte* buf = v_malloc(max + 1); | |
int index = max; | |
buf[index] = 0; | |
index--; | |
for (;;) { | |
if (!(n > 0U)) break; | |
u64 n1 = n / 100U; | |
d = ((n - (n1 * 100U)) << 1U); | |
n = n1; | |
buf[index] = _const_digit_pairs.str[ d]; | |
index--; | |
d++; | |
buf[index] = _const_digit_pairs.str[ d]; | |
index--; | |
} | |
index++; | |
if (d < 20U) { | |
index++; | |
} | |
int diff = max - index; | |
memmove(buf, buf + index, diff + 1); | |
return tos(buf, diff); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string bool_str(bool b) { | |
if (b) { | |
return _SLIT("true"); | |
} | |
return _SLIT("false"); | |
} | |
inline VV_LOCAL_SYMBOL string u64_to_hex(u64 nn, byte len) { | |
u64 n = nn; | |
Array_fixed_byte_256 buf = {0}; | |
buf[len] = 0; | |
int i = 0; | |
for (i = len - 1; i >= 0; i--) { | |
byte d = ((byte)((n & 0xFU))); | |
rune x = (d < 10 ? (d + '0') : (d + 87)); | |
buf[i] = x; | |
n = n >> 4U; | |
} | |
return tos(memdup(&buf[0], len + 1), len); | |
} | |
inline VV_LOCAL_SYMBOL string u64_to_hex_no_leading_zeros(u64 nn, byte len) { | |
u64 n = nn; | |
Array_fixed_byte_256 buf = {0}; | |
buf[len] = 0; | |
int i = 0; | |
for (i = len - 1; i >= 0; i--) { | |
byte d = ((byte)((n & 0xFU))); | |
rune x = (d < 10 ? (d + '0') : (d + 87)); | |
buf[i] = x; | |
n = n >> 4U; | |
if (n == 0U) { | |
break; | |
} | |
} | |
int res_len = len - i; | |
return tos(memdup(&buf[i], res_len + 1), res_len); | |
} | |
string byte_hex(byte nn) { | |
if (nn == 0) { | |
return _SLIT("00"); | |
} | |
return u64_to_hex(nn, 2); | |
} | |
string u64_hex(u64 nn) { | |
if (nn == 0U) { | |
return _SLIT("0"); | |
} | |
return u64_to_hex_no_leading_zeros(nn, 16); | |
} | |
string voidptr_str(voidptr nn) { | |
return u64_hex(((u64)(nn))); | |
} | |
string byteptr_str(byteptr nn) { | |
return u64_hex(((u64)(nn))); | |
} | |
string byte_str(byte b) { | |
return int_str_l(((int)(b)), 7); | |
} | |
string byte_ascii_str(byte b) { | |
string str = (string){.str = v_malloc(2), .len = 1}; | |
{ // Unsafe block | |
str.str[0] = b; | |
str.str[1] = 0; | |
} | |
return str; | |
} | |
string byte_str_escaped(byte b) { | |
string _t200; | |
if (b == (0)) { | |
_t200 = _SLIT("`\\0`"); | |
; | |
} | |
else if (b == (7)) { | |
_t200 = _SLIT("`\\a`"); | |
; | |
} | |
else if (b == (8)) { | |
_t200 = _SLIT("`\\b`"); | |
; | |
} | |
else if (b == (9)) { | |
_t200 = _SLIT("`\\t`"); | |
; | |
} | |
else if (b == (10)) { | |
_t200 = _SLIT("`\\n`"); | |
; | |
} | |
else if (b == (11)) { | |
_t200 = _SLIT("`\\v`"); | |
; | |
} | |
else if (b == (12)) { | |
_t200 = _SLIT("`\\f`"); | |
; | |
} | |
else if (b == (13)) { | |
_t200 = _SLIT("`\\r`"); | |
; | |
} | |
else if (b == (27)) { | |
_t200 = _SLIT("`\\e`"); | |
; | |
} | |
else if ((b >= 32 && b <= 126)) { | |
_t200 = byte_ascii_str(b); | |
; | |
} | |
else { | |
_t200 = string__plus(_SLIT("0x"), byte_hex(b)); | |
; | |
} string str = _t200; | |
return str; | |
} | |
inline VV_LOCAL_SYMBOL bool fast_string_eq(string a, string b) { | |
if (a.len != b.len) { | |
return false; | |
} | |
{ // Unsafe block | |
return memcmp(a.str, b.str, b.len) == 0; | |
} | |
return 0; | |
} | |
inline VV_LOCAL_SYMBOL voidptr DenseArray_key(DenseArray* d, int i) { | |
return d->keys + i * d->key_bytes; | |
} | |
inline VV_LOCAL_SYMBOL bool DenseArray_has_index(DenseArray* d, int i) { | |
return d->deletes == 0U || d->all_deleted[i] == 0; | |
} | |
void map_free(map* m) { | |
v_free(m->metas); | |
if (m->key_values.deletes == 0U) { | |
for (int i = 0; i < m->key_values.len; i++) { | |
{ // Unsafe block | |
voidptr pkey = DenseArray_key(&m->key_values, i); | |
m->free_fn(pkey); | |
} | |
} | |
} else { | |
for (int i = 0; i < m->key_values.len; i++) { | |
if (!DenseArray_has_index(&m->key_values, i)) { | |
continue; | |
} | |
{ // Unsafe block | |
voidptr pkey = DenseArray_key(&m->key_values, i); | |
m->free_fn(pkey); | |
} | |
} | |
v_free(m->key_values.all_deleted); | |
} | |
{ // Unsafe block | |
v_free(m->key_values.keys); | |
v_free(m->key_values.values); | |
} | |
} | |
string IError_str(IError err) { | |
return ((err._typ == _IError_None___index) ? (_SLIT("none")) : (err._typ == _IError_Error_index) ? ((err._Error)->msg) : ( str_intp(3, _MOV((StrIntpData[]){{_SLIT0, 0xfe10, {.d_s = tos3( /* IError */ v_typeof_interface_IError( (err)._typ ))}}, {_SLIT(": "), 0xfe10, {.d_s = (*(err.msg))}}, {_SLIT0, 0, { .d_c = 0 }}})) )); | |
} | |
VV_LOCAL_SYMBOL string None___str(None__ _t207) { | |
return _SLIT("none"); | |
} | |
VV_LOCAL_SYMBOL void trace_error(string x) { | |
eprintln( str_intp(3, _MOV((StrIntpData[]){{_SLIT("> "), 0xfe10, {.d_s = _SLIT("trace_error")}}, {_SLIT(" | "), 0xfe10, {.d_s = x}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
} | |
inline IError v_error(string message) { | |
; | |
return I_Error_to_Interface_IError((Error*)memdup(&(Error){.msg = message,.code = 0,}, sizeof(Error))); | |
} | |
VV_LOCAL_SYMBOL void opt_ok(voidptr data, Option* option, int size) { | |
{ // Unsafe block | |
*option = (Option){.state = 0,.err = _const_none__,}; | |
memcpy(((byte*)(&option->err)) + /*SizeOf*/ sizeof(IError), data, size); | |
} | |
} | |
void Error_free(Error* e) { | |
string_free(&e->msg); | |
} | |
void None___free(None__* n) { | |
string_free(&n->msg); | |
} | |
void IError_free(IError* ie) { | |
{ // Unsafe block | |
string_free(&(*(ie->msg))); | |
IError* cie = ((IError*)(ie)); | |
v_free(cie->_object); | |
} | |
} | |
string rune_str(rune c) { | |
return utf32_to_str(((u32)(c))); | |
} | |
string Array_byte_bytestr(Array_byte b) { | |
{ // Unsafe block | |
byte* buf = v_malloc(b.len + 1); | |
memcpy(buf, b.data, b.len); | |
buf[b.len] = 0; | |
return tos(buf, b.len); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
VV_LOCAL_SYMBOL void mapnode_free(mapnode* n) { | |
println(_SLIT("TODO")); | |
} | |
void SortedMap_free(SortedMap* m) { | |
if (isnil(m->root)) { | |
return; | |
} | |
mapnode_free(m->root); | |
} | |
int vstrlen(byte* s) { | |
return strlen(((char*)(s))); | |
} | |
string tos(byte* s, int len) { | |
if (s == 0) { | |
v_panic(_SLIT("tos(): nil string")); | |
} | |
return (string){.str = s, .len = len}; | |
} | |
string tos2(byte* s) { | |
if (s == 0) { | |
v_panic(_SLIT("tos2: nil string")); | |
} | |
return (string){.str = s, .len = vstrlen(s)}; | |
} | |
string tos3(char* s) { | |
if (s == 0) { | |
v_panic(_SLIT("tos3: nil string")); | |
} | |
return (string){.str = ((byte*)(s)), .len = strlen(s)}; | |
} | |
string tos5(char* s) { | |
if (s == 0) { | |
return _SLIT(""); | |
} | |
return tos3(s); | |
} | |
string byte_vstring_with_len(byte* bp, int len) { | |
return (string){.str = bp, .len = len, .is_lit = 0}; | |
} | |
VV_LOCAL_SYMBOL string string_clone_static(string a) { | |
return string_clone(a); | |
} | |
string string_clone(string a) { | |
if (a.len == 0) { | |
return _SLIT(""); | |
} | |
string b = (string){.str = v_malloc(a.len + 1), .len = a.len}; | |
{ // Unsafe block | |
memcpy(b.str, a.str, a.len); | |
b.str[a.len] = 0; | |
} | |
return b; | |
} | |
string string_replace(string s, string rep, string with) { | |
bool string_replace_defer_0 = false; | |
Array_int idxs; | |
if (s.len == 0 || rep.len == 0 || rep.len > s.len) { | |
return string_clone(s); | |
} | |
if (!string_contains(s, rep)) { | |
return string_clone(s); | |
} | |
idxs = __new_array_with_default(0, s.len / rep.len, sizeof(int), 0); | |
string_replace_defer_0 = true; | |
int idx = 0; | |
for (;;) { | |
idx = string_index_after(s, rep, idx); | |
if (idx == -1) { | |
break; | |
} | |
array_push((array*)&idxs, _MOV((int[]){ idx })); | |
idx += rep.len; | |
} | |
if (idxs.len == 0) { | |
string _t225 = string_clone(s); | |
// Defer begin | |
if (string_replace_defer_0) { | |
array_free(&idxs); | |
} | |
// Defer end | |
return _t225; | |
} | |
int new_len = s.len + idxs.len * (with.len - rep.len); | |
byte* b = v_malloc(new_len + 1); | |
int b_i = 0; | |
int s_idx = 0; | |
// FOR IN array | |
for (int _t226 = 0; _t226 < idxs.len; ++_t226) { | |
int rep_pos = ((int*)idxs.data)[_t226]; | |
for (int i = s_idx; i < rep_pos; ++i) { | |
{ // Unsafe block | |
b[b_i] = s.str[ i]; | |
} | |
b_i++; | |
} | |
s_idx = rep_pos + rep.len; | |
for (int i = 0; i < with.len; ++i) { | |
{ // Unsafe block | |
b[b_i] = with.str[ i]; | |
} | |
b_i++; | |
} | |
} | |
if (s_idx < s.len) { | |
for (int i = s_idx; i < s.len; ++i) { | |
{ // Unsafe block | |
b[b_i] = s.str[ i]; | |
} | |
b_i++; | |
} | |
} | |
{ // Unsafe block | |
b[new_len] = 0; | |
string _t227 = tos(b, new_len); | |
// Defer begin | |
if (string_replace_defer_0) { | |
array_free(&idxs); | |
} | |
// Defer end | |
return _t227; | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
VV_LOCAL_SYMBOL bool string__eq(string s, string a) { | |
if (s.str == 0) { | |
v_panic(_SLIT("string.eq(): nil string")); | |
} | |
if (s.len != a.len) { | |
return false; | |
} | |
if (s.len > 0) { | |
int last_idx = s.len - 1; | |
if (s.str[ last_idx] != a.str[ last_idx]) { | |
return false; | |
} | |
} | |
{ // Unsafe block | |
return memcmp(s.str, a.str, a.len) == 0; | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL bool string__lt(string s, string a) { | |
for (int i = 0; i < s.len; ++i) { | |
if (i >= a.len || string_at(s, i) > string_at(a, i)) { | |
return false; | |
} else if (string_at(s, i) < string_at(a, i)) { | |
return true; | |
} | |
} | |
if (s.len < a.len) { | |
return true; | |
} | |
return false; | |
} | |
VV_LOCAL_SYMBOL string string__plus(string s, string a) { | |
int new_len = a.len + s.len; | |
string res = (string){.str = v_malloc(new_len + 1), .len = new_len}; | |
for (int j = 0; j < s.len; ++j) { | |
{ // Unsafe block | |
res.str[j] = s.str[j]; | |
} | |
} | |
for (int j = 0; j < a.len; ++j) { | |
{ // Unsafe block | |
res.str[s.len + j] = a.str[j]; | |
} | |
} | |
{ // Unsafe block | |
res.str[new_len] = 0; | |
} | |
return res; | |
} | |
string string_substr(string s, int start, int end) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (start > end || start > s.len || end > s.len || start < 0 || end < 0) { | |
v_panic( str_intp(4, _MOV((StrIntpData[]){{_SLIT("substr("), 0xfe07, {.d_i32 = start}}, {_SLIT(", "), 0xfe07, {.d_i32 = end}}, {_SLIT(") out of bounds (len="), 0xfe07, {.d_i32 = s.len}}, {_SLIT(")"), 0, { .d_c = 0 }}})) ); | |
} | |
} | |
#endif | |
int len = end - start; | |
if (len == s.len) { | |
return string_clone(s); | |
} | |
string res = (string){.str = v_malloc(len + 1), .len = len}; | |
for (int i = 0; i < len; ++i) { | |
{ // Unsafe block | |
res.str[i] = s.str[start + i]; | |
} | |
} | |
{ // Unsafe block | |
res.str[len] = 0; | |
} | |
return res; | |
} | |
VV_LOCAL_SYMBOL int string_index_(string s, string p) { | |
if (p.len > s.len || p.len == 0) { | |
return -1; | |
} | |
if (p.len > 2) { | |
return string_index_kmp(s, p); | |
} | |
int i = 0; | |
for (;;) { | |
if (!(i < s.len)) break; | |
int j = 0; | |
for (;;) { | |
if (!(j < p.len && s.str[i + j] == p.str[j])) break; | |
j++; | |
} | |
if (j == p.len) { | |
return i; | |
} | |
i++; | |
} | |
return -1; | |
} | |
VV_LOCAL_SYMBOL int string_index_kmp(string s, string p) { | |
bool string_index_kmp_defer_0 = false; | |
Array_int prefix; | |
if (p.len > s.len) { | |
return -1; | |
} | |
prefix = __new_array_with_default(p.len, 0, sizeof(int), 0); | |
string_index_kmp_defer_0 = true; | |
int j = 0; | |
for (int i = 1; i < p.len; i++) { | |
for (;;) { | |
if (!(p.str[j] != p.str[i] && j > 0)) break; | |
j = ((int*)prefix.data)[j - 1]; | |
} | |
if (p.str[j] == p.str[i]) { | |
j++; | |
} | |
((int*)prefix.data)[i] = j; | |
} | |
j = 0; | |
for (int i = 0; i < s.len; ++i) { | |
for (;;) { | |
if (!(p.str[j] != s.str[i] && j > 0)) break; | |
j = ((int*)prefix.data)[j - 1]; | |
} | |
if (p.str[j] == s.str[i]) { | |
j++; | |
} | |
if (j == p.len) { | |
int _t243 = i - p.len + 1; | |
// Defer begin | |
if (string_index_kmp_defer_0) { | |
array_free(&prefix); | |
} | |
// Defer end | |
return _t243; | |
} | |
} | |
int _t244 = -1; | |
// Defer begin | |
if (string_index_kmp_defer_0) { | |
array_free(&prefix); | |
} | |
// Defer end | |
return _t244; | |
} | |
int string_index_after(string s, string p, int start) { | |
if (p.len > s.len) { | |
return -1; | |
} | |
int strt = start; | |
if (start < 0) { | |
strt = 0; | |
} | |
if (start >= s.len) { | |
return -1; | |
} | |
int i = strt; | |
for (;;) { | |
if (!(i < s.len)) break; | |
int j = 0; | |
int ii = i; | |
for (;;) { | |
if (!(j < p.len && s.str[ii] == p.str[j])) break; | |
j++; | |
ii++; | |
} | |
if (j == p.len) { | |
return i; | |
} | |
i++; | |
} | |
return -1; | |
} | |
bool string_contains(string s, string substr) { | |
if (substr.len == 0) { | |
return true; | |
} | |
if (string_index_(s, substr) == -1) { | |
return false; | |
} | |
return true; | |
} | |
string string_to_upper(string s) { | |
{ // Unsafe block | |
byte* b = v_malloc(s.len + 1); | |
for (int i = 0; i < s.len; ++i) { | |
if (s.str[i] >= 'a' && s.str[i] <= 'z') { | |
b[i] = s.str[i] - 32; | |
} else { | |
b[i] = s.str[i]; | |
} | |
} | |
b[s.len] = 0; | |
return tos(b, s.len); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string string_trim_space(string s) { | |
return string_trim(s, _SLIT(" \n\t\v\f\r")); | |
} | |
string string_trim(string s, string cutset) { | |
if (s.len < 1 || cutset.len < 1) { | |
return string_clone(s); | |
} | |
int pos_left = 0; | |
int pos_right = s.len - 1; | |
bool cs_match = true; | |
for (;;) { | |
if (!(pos_left <= s.len && pos_right >= -1 && cs_match)) break; | |
cs_match = false; | |
for (int _t255 = 0; _t255 < cutset.len; ++_t255) { | |
byte cs = cutset.str[_t255]; | |
if (s.str[ pos_left] == cs) { | |
pos_left++; | |
cs_match = true; | |
break; | |
} | |
} | |
for (int _t256 = 0; _t256 < cutset.len; ++_t256) { | |
byte cs = cutset.str[_t256]; | |
if (s.str[ pos_right] == cs) { | |
pos_right--; | |
cs_match = true; | |
break; | |
} | |
} | |
if (pos_left > pos_right) { | |
return _SLIT(""); | |
} | |
} | |
return string_substr(s, pos_left, pos_right + 1); | |
} | |
int compare_strings(string* a, string* b) { | |
if (string__lt(*a, *b)) { | |
return -1; | |
} | |
if (string__lt(*b, *a)) { | |
return 1; | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL int compare_strings_reverse(string* a, string* b) { | |
if (string__lt(*a, *b)) { | |
return 1; | |
} | |
if (string__lt(*b, *a)) { | |
return -1; | |
} | |
return 0; | |
} | |
string string_str(string s) { | |
return string_clone(s); | |
} | |
string ustring_str(ustring s) { | |
return s.s; | |
} | |
VV_LOCAL_SYMBOL bool ustring__eq(ustring u, ustring a) { | |
return string__eq(u.s, a.s); | |
} | |
VV_LOCAL_SYMBOL bool ustring__lt(ustring u, ustring a) { | |
return string__lt(u.s, a.s); | |
} | |
VV_LOCAL_SYMBOL ustring ustring__plus(ustring u, ustring a) { | |
ustring res = (ustring){.s = string__plus(u.s, a.s),.runes = __new_array(0, u.s.len + a.s.len, ((int)(/*SizeOf*/ sizeof(int)))),.len = 0,}; | |
int j = 0; | |
for (int i = 0; i < u.s.len; i++) { | |
int char_len = utf8_char_len(u.s.str[i]); | |
array_push((array*)&res.runes, _MOV((int[]){ j })); | |
i += char_len - 1; | |
j += char_len; | |
res.len++; | |
} | |
for (int i = 0; i < a.s.len; i++) { | |
int char_len = utf8_char_len(a.s.str[i]); | |
array_push((array*)&res.runes, _MOV((int[]){ j })); | |
i += char_len - 1; | |
j += char_len; | |
res.len++; | |
} | |
return res; | |
} | |
VV_LOCAL_SYMBOL byte string_at(string s, int idx) { | |
#if !defined(CUSTOM_DEFINE_no_bounds_checking) | |
{ | |
if (idx < 0 || idx >= s.len) { | |
v_panic( str_intp(3, _MOV((StrIntpData[]){{_SLIT("string index out of range: "), 0xfe07, {.d_i32 = idx}}, {_SLIT(" / "), 0xfe07, {.d_i32 = s.len}}, {_SLIT0, 0, { .d_c = 0 }}})) ); | |
} | |
} | |
#endif | |
{ // Unsafe block | |
return s.str[idx]; | |
} | |
return 0; | |
} | |
VV_LOCAL_SYMBOL void ustring_free(ustring* u) { | |
{ // Unsafe block | |
array_free(&u->runes); | |
string_free(&u->s); | |
} | |
} | |
void string_free(string* s) { | |
if (s->is_lit == -98761234) { | |
#if defined(_VFREESTANDING) | |
{ | |
} | |
#else | |
{ | |
printf("double string.free() detected\n"); | |
} | |
#endif | |
return; | |
} | |
if (s->is_lit == 1 || s->len == 0 || s->str == 0) { | |
return; | |
} | |
v_free(s->str); | |
s->is_lit = -98761234; | |
} | |
string byteptr_vstring(byteptr bp) { | |
return (string){.str = bp, .len = strlen(((char*)(bp)))}; | |
} | |
string byteptr_vstring_with_len(byteptr bp, int len) { | |
return (string){.str = bp, .len = len, .is_lit = 0}; | |
} | |
string charptr_vstring(charptr cp) { | |
return (string){.str = ((byteptr)(cp)), .len = strlen(((char*)(cp))), .is_lit = 0}; | |
} | |
string charptr_vstring_with_len(charptr cp, int len) { | |
return (string){.str = ((byteptr)(cp)), .len = len, .is_lit = 0}; | |
} | |
string StrIntpType_str(StrIntpType x) { | |
if (x == (StrIntpType_si_no_str)) { | |
return _SLIT("no_str"); | |
} | |
else if (x == (StrIntpType_si_c)) { | |
return _SLIT("c"); | |
} | |
else if (x == (StrIntpType_si_u8)) { | |
return _SLIT("u8"); | |
} | |
else if (x == (StrIntpType_si_i8)) { | |
return _SLIT("i8"); | |
} | |
else if (x == (StrIntpType_si_u16)) { | |
return _SLIT("u16"); | |
} | |
else if (x == (StrIntpType_si_i16)) { | |
return _SLIT("i16"); | |
} | |
else if (x == (StrIntpType_si_u32)) { | |
return _SLIT("u32"); | |
} | |
else if (x == (StrIntpType_si_i32)) { | |
return _SLIT("i32"); | |
} | |
else if (x == (StrIntpType_si_u64)) { | |
return _SLIT("u64"); | |
} | |
else if (x == (StrIntpType_si_i64)) { | |
return _SLIT("i64"); | |
} | |
else if (x == (StrIntpType_si_f32)) { | |
return _SLIT("f32"); | |
} | |
else if (x == (StrIntpType_si_f64)) { | |
return _SLIT("f64"); | |
} | |
else if (x == (StrIntpType_si_g32)) { | |
return _SLIT("f32"); | |
} | |
else if (x == (StrIntpType_si_g64)) { | |
return _SLIT("f64"); | |
} | |
else if (x == (StrIntpType_si_e32)) { | |
return _SLIT("f32"); | |
} | |
else if (x == (StrIntpType_si_e64)) { | |
return _SLIT("f64"); | |
} | |
else if (x == (StrIntpType_si_s)) { | |
return _SLIT("s"); | |
} | |
else if (x == (StrIntpType_si_p)) { | |
return _SLIT("p"); | |
} | |
else if (x == (StrIntpType_si_vp)) { | |
return _SLIT("vp"); | |
}; | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
VV_LOCAL_SYMBOL f64 fabs64(f64 x) { | |
if (x < 0) { | |
return -x; | |
} | |
return x; | |
} | |
VV_LOCAL_SYMBOL f32 fabs32(f32 x) { | |
if (x < 0) { | |
return -x; | |
} | |
return x; | |
} | |
VV_LOCAL_SYMBOL u64 abs64(i64 x) { | |
if (x < 0) { | |
return ((u64)(-x)); | |
} | |
return ((u64)(x)); | |
} | |
VV_LOCAL_SYMBOL void StrIntpData_get_fmt_format(StrIntpData data, strings__Builder* sb) { | |
u32 x = data.fmt; | |
StrIntpType typ = ((StrIntpType)((x & 0x1FU))); | |
int allign = ((int)(((x >> 5U) & 0x01U))); | |
bool upper_case = ((((x >> 7U) & 0x01U)) > 0U ? (true) : (false)); | |
int sign = ((int)(((x >> 8U) & 0x01U))); | |
int precision = ((int)(((x >> 9U) & 0x7FU))); | |
bool tail_zeros = ((((x >> 16U) & 0x01U)) > 0U ? (true) : (false)); | |
int width = ((int)(((i16)(((x >> 17U) & 0x3FFU))))); | |
int base = (((int)(x >> 27U)) & 0xF); | |
byte fmt_pad_ch = ((byte)(((x >> 31U) & 0xFFU))); | |
if (typ == StrIntpType_si_no_str) { | |
return; | |
} | |
if (base > 0) { | |
base += 2; | |
} | |
byte pad_ch = ((byte)(' ')); | |
if (fmt_pad_ch > 0) { | |
pad_ch = '0'; | |
} | |
int len0_set = (width > 0 ? (width) : (-1)); | |
int len1_set = (precision == 0x7F ? (-1) : (precision)); | |
bool sign_set = (sign == 1 ? (true) : (false)); | |
strconv__BF_param bf = (strconv__BF_param){ | |
.pad_ch = pad_ch, | |
.len0 = len0_set, | |
.len1 = len1_set, | |
.positive = true, | |
.sign_flag = sign_set, | |
.allign = strconv__Align_text_left, | |
.rm_tail_zero = tail_zeros, | |
}; | |
if (fmt_pad_ch == 0) { | |
if (allign == (0)) { | |
bf.allign = strconv__Align_text_left; | |
} | |
else if (allign == (1)) { | |
bf.allign = strconv__Align_text_right; | |
} | |
else { | |
bf.allign = strconv__Align_text_left; | |
}; | |
} else { | |
bf.allign = strconv__Align_text_right; | |
} | |
{ // Unsafe block | |
if (typ == StrIntpType_si_s) { | |
string s = _SLIT(""); | |
if (upper_case) { | |
s = string_to_upper(data.d.d_s); | |
} else { | |
s = string_clone(data.d.d_s); | |
} | |
if (width == 0) { | |
strings__Builder_write_string(sb, s); | |
} else { | |
strconv__format_str_sb(s, bf, sb); | |
} | |
string_free(&s); | |
return; | |
} | |
if ((typ == StrIntpType_si_i8 || typ == StrIntpType_si_i16 || typ == StrIntpType_si_i32 || typ == StrIntpType_si_i64)) { | |
i64 d = data.d.d_i64; | |
if (typ == StrIntpType_si_i8) { | |
d = ((i64)(data.d.d_i8)); | |
} else if (typ == StrIntpType_si_i16) { | |
d = ((i64)(data.d.d_i16)); | |
} else if (typ == StrIntpType_si_i32) { | |
d = ((i64)(data.d.d_i32)); | |
} | |
if (base == 0) { | |
if (width == 0) { | |
string d_str = i64_str(d); | |
strings__Builder_write_string(sb, d_str); | |
string_free(&d_str); | |
return; | |
} | |
if (d < 0) { | |
bf.positive = false; | |
} | |
strconv__format_dec_sb(abs64(d), bf, sb); | |
} else { | |
string hx = strconv__format_int(d, base); | |
if (upper_case) { | |
string tmp = hx; | |
hx = string_to_upper(hx); | |
string_free(&tmp); | |
} | |
if (width == 0) { | |
strings__Builder_write_string(sb, hx); | |
} else { | |
strconv__format_str_sb(hx, bf, sb); | |
} | |
string_free(&hx); | |
} | |
return; | |
} | |
if ((typ == StrIntpType_si_u8 || typ == StrIntpType_si_u16 || typ == StrIntpType_si_u32 || typ == StrIntpType_si_u64)) { | |
u64 d = data.d.d_u64; | |
if (typ == StrIntpType_si_u8) { | |
d = ((u64)(data.d.d_u8)); | |
} else if (typ == StrIntpType_si_u16) { | |
d = ((u64)(data.d.d_u16)); | |
} else if (typ == StrIntpType_si_u32) { | |
d = ((u64)(data.d.d_u32)); | |
} | |
if (base == 0) { | |
if (width == 0) { | |
string d_str = u64_str(d); | |
strings__Builder_write_string(sb, d_str); | |
string_free(&d_str); | |
return; | |
} | |
strconv__format_dec_sb(d, bf, sb); | |
} else { | |
string hx = strconv__format_uint(d, base); | |
if (upper_case) { | |
string tmp = hx; | |
hx = string_to_upper(hx); | |
string_free(&tmp); | |
} | |
if (width == 0) { | |
strings__Builder_write_string(sb, hx); | |
} else { | |
strconv__format_str_sb(hx, bf, sb); | |
} | |
string_free(&hx); | |
} | |
return; | |
} | |
if (typ == StrIntpType_si_p) { | |
u64 d = data.d.d_u64; | |
base = 16; | |
if (base == 0) { | |
if (width == 0) { | |
string d_str = u64_str(d); | |
strings__Builder_write_string(sb, d_str); | |
string_free(&d_str); | |
return; | |
} | |
strconv__format_dec_sb(d, bf, sb); | |
} else { | |
string hx = strconv__format_uint(d, base); | |
if (upper_case) { | |
string tmp = hx; | |
hx = string_to_upper(hx); | |
string_free(&tmp); | |
} | |
if (width == 0) { | |
strings__Builder_write_string(sb, hx); | |
} else { | |
strconv__format_str_sb(hx, bf, sb); | |
} | |
string_free(&hx); | |
} | |
return; | |
} | |
bool use_default_str = false; | |
if (width == 0 && precision == 0x7F) { | |
bf.len1 = 3; | |
use_default_str = true; | |
} | |
if (bf.len1 < 0) { | |
bf.len1 = 3; | |
} | |
if (typ == (StrIntpType_si_f32)) { | |
if (use_default_str) { | |
string f = f32_str(data.d.d_f32); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} else { | |
if (data.d.d_f32 < 0) { | |
bf.positive = false; | |
} | |
string f = strconv__format_fl(data.d.d_f32, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} | |
} | |
else if (typ == (StrIntpType_si_f64)) { | |
if (use_default_str) { | |
string f = f64_str(data.d.d_f64); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} else { | |
if (data.d.d_f64 < 0) { | |
bf.positive = false; | |
} | |
strconv__Float64u f_union = (strconv__Float64u){.f = data.d.d_f64,}; | |
if (f_union.u == _const_strconv__double_minus_zero) { | |
bf.positive = false; | |
} | |
string f = strconv__format_fl(data.d.d_f64, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} | |
} | |
else if (typ == (StrIntpType_si_g32)) { | |
if (use_default_str) { | |
string f = f32_strg(data.d.d_f32); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} else { | |
if (data.d.d_f32 == _const_strconv__single_plus_zero) { | |
string tmp_str = _SLIT("0"); | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
return; | |
} | |
if (data.d.d_f32 == _const_strconv__single_minus_zero) { | |
string tmp_str = _SLIT("-0"); | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
return; | |
} | |
if (data.d.d_f32 == _const_strconv__single_plus_infinity) { | |
string tmp_str = _SLIT("+inf"); | |
if (upper_case) { | |
tmp_str = _SLIT("+INF"); | |
} | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
} | |
if (data.d.d_f32 == _const_strconv__single_minus_infinity) { | |
string tmp_str = _SLIT("-inf"); | |
if (upper_case) { | |
tmp_str = _SLIT("-INF"); | |
} | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
} | |
if (data.d.d_f32 < 0) { | |
bf.positive = false; | |
} | |
f32 d = fabs32(data.d.d_f32); | |
if (d < 999999.0 && d >= 0.00001) { | |
string f = strconv__format_fl(data.d.d_f32, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
return; | |
} | |
string f = strconv__format_es(data.d.d_f32, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} | |
} | |
else if (typ == (StrIntpType_si_g64)) { | |
if (use_default_str) { | |
string f = f64_strg(data.d.d_f64); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} else { | |
if (data.d.d_f64 == _const_strconv__double_plus_zero) { | |
string tmp_str = _SLIT("0"); | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
return; | |
} | |
if (data.d.d_f64 == _const_strconv__double_minus_zero) { | |
string tmp_str = _SLIT("-0"); | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
return; | |
} | |
if (data.d.d_f64 == _const_strconv__double_plus_infinity) { | |
string tmp_str = _SLIT("+inf"); | |
if (upper_case) { | |
tmp_str = _SLIT("+INF"); | |
} | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
} | |
if (data.d.d_f64 == _const_strconv__double_minus_infinity) { | |
string tmp_str = _SLIT("-inf"); | |
if (upper_case) { | |
tmp_str = _SLIT("-INF"); | |
} | |
strconv__format_str_sb(tmp_str, bf, sb); | |
string_free(&tmp_str); | |
} | |
if (data.d.d_f64 < 0) { | |
bf.positive = false; | |
} | |
f64 d = fabs64(data.d.d_f64); | |
if (d < 999999.0 && d >= 0.00001) { | |
string f = strconv__format_fl(data.d.d_f64, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
return; | |
} | |
string f = strconv__format_es(data.d.d_f64, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} | |
} | |
else if (typ == (StrIntpType_si_e32)) { | |
bf.len1 = 6; | |
if (use_default_str) { | |
string f = f32_str(data.d.d_f32); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} else { | |
if (data.d.d_f32 < 0) { | |
bf.positive = false; | |
} | |
string f = strconv__format_es(data.d.d_f32, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} | |
} | |
else if (typ == (StrIntpType_si_e64)) { | |
bf.len1 = 6; | |
if (use_default_str) { | |
string f = f64_str(data.d.d_f64); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} else { | |
if (data.d.d_f64 < 0) { | |
bf.positive = false; | |
} | |
string f = strconv__format_es(data.d.d_f64, bf); | |
if (upper_case) { | |
string tmp = f; | |
f = string_to_upper(f); | |
string_free(&tmp); | |
} | |
strings__Builder_write_string(sb, f); | |
string_free(&f); | |
} | |
} | |
else if (typ == (StrIntpType_si_c)) { | |
strings__Builder_write_string(sb, utf32_to_str(data.d.d_c)); | |
} | |
else if (typ == (StrIntpType_si_vp)) { | |
strings__Builder_write_string(sb, u64_hex(((u64)(data.d.d_vp)))); | |
} | |
else { | |
strings__Builder_write_string(sb, _SLIT("***ERROR!***")); | |
}; | |
} | |
} | |
string str_intp(int data_len, voidptr in_data) { | |
strings__Builder res = strings__new_builder(256); | |
{ // Unsafe block | |
int i = 0; | |
for (;;) { | |
if (!(i < data_len)) break; | |
StrIntpData* data = ((StrIntpData*)(((byte*)(in_data)) + (((int)(/*SizeOf*/ sizeof(StrIntpData))) * i))); | |
if (data->str.len != 0) { | |
strings__Builder_write_string(&res, data->str); | |
} | |
if (data->fmt != 0U) { | |
StrIntpData_get_fmt_format(/*rec*/*data, &res); | |
} | |
i++; | |
} | |
} | |
string ret = strings__Builder_str(&res); | |
strings__Builder_free(&res); | |
return ret; | |
} | |
int utf8_char_len(byte b) { | |
return (((0xe5000000 >> (((b >> 3) & 0x1e))) & 3)) + 1; | |
} | |
string utf32_to_str(u32 code) { | |
{ // Unsafe block | |
byte* buffer = v_malloc(5); | |
return utf32_to_str_no_malloc(code, buffer); | |
} | |
return (string){.str=(byteptr)"", .is_lit=1}; | |
} | |
string utf32_to_str_no_malloc(u32 code, voidptr buf) { | |
int icode = ((int)(code)); | |
string res = _SLIT(""); | |
{ // Unsafe block | |
byte* buffer = ((byte*)(buf)); | |
if (icode <= 127) { | |
buffer[0] = ((byte)(icode)); | |
buffer[1] = 0; | |
res = tos(buffer, 1); | |
} else if (icode <= 2047) { | |
buffer[0] = (192 | ((byte)(icode >> 6))); | |
buffer[1] = (128 | ((byte)((icode & 63)))); | |
buffer[2] = 0; | |
res = tos(buffer, 2); | |
} else if (icode <= 65535) { | |
buffer[0] = (224 | ((byte)(icode >> 12))); | |
buffer[1] = (128 | ((((byte)(icode >> 6)) & 63))); | |
buffer[2] = (128 | ((byte)((icode & 63)))); | |
buffer[3] = 0; | |
res = tos(buffer, 3); | |
} else if (icode <= 1114111) { | |
buffer[0] = (240 | ((byte)(icode >> 18))); | |
buffer[1] = (128 | ((((byte)(icode >> 12)) & 63))); | |
buffer[2] = (128 | ((((byte)(icode >> 6)) & 63))); | |
buffer[3] = (128 | ((byte)((icode & 63)))); | |
buffer[4] = 0; | |
res = tos(buffer, 4); | |
} | |
} | |
res.is_lit = 1; | |
return res; | |
} | |
int utf8_str_visible_length(string s) { | |
int l = 0; | |
int ul = 1; | |
for (int i = 0; i < s.len; i += ul) { | |
byte c = s.str[i]; | |
ul = (((0xe5000000 >> (((s.str[i] >> 3) & 0x1e))) & 3)) + 1; | |
if (i + ul > s.len) { | |
return l; | |
} | |
l++; | |
if (ul == 1) { | |
continue; | |
} | |
if (ul == (2)) { | |
u64 r = ((u64)(((((u16)(c)) << 8U) | s.str[i + 1]))); | |
if (r >= 0xcc80U && r < 0xcdb0U) { | |
l--; | |
} | |
} | |
else if (ul == (3)) { | |
u64 r = ((u64)(((((u32)(c)) << 16U) | ((((u32)(s.str[i + 1])) << 8U) | s.str[i + 2])))); | |
if ((r >= 0xe1aab0U && r <= 0xe1ac7fU) || (r >= 0xe1b780U && r <= 0xe1b87fU) || (r >= 0xe28390U && r <= 0xe2847fU) || (r >= 0xefb8a0U && r <= 0xefb8afU)) { | |
l--; | |
} else if ((r >= 0xe18480U && r <= 0xe1859fU) || (r >= 0xe2ba80U && r <= 0xe2bf95U) || (r >= 0xe38080U && r <= 0xe4b77fU) || (r >= 0xe4b880U && r <= 0xea807fU) || (r >= 0xeaa5a0U && r <= 0xeaa79fU) || (r >= 0xeab080U && r <= 0xed9eafU) || (r >= 0xefa480U && r <= 0xefac7fU) || (r >= 0xefb8b8U && r <= 0xefb9afU)) { | |
l++; | |
} | |
} | |
else if (ul == (4)) { | |
u64 r = ((u64)(((((u32)(c)) << 24U) | (((((u32)(s.str[i + 1])) << 16U) | (((u32)(s.str[i + 2])) << 8U)) | s.str[i + 3])))); | |
if ((r >= 0x0f9f8880U && r <= 0xf09f8a8fU) || (r >= 0xf09f8c80U && r <= 0xf09f9c90U) || (r >= 0xf09fa490U && r <= 0xf09fa7afU) || (r >= 0xf0a08080U && r <= 0xf180807fU)) { | |
l++; | |
} | |
} | |
else { | |
}; | |
} | |
return l; | |
} | |
VV_LOCAL_SYMBOL void main__main(void) { | |
println(_SLIT("hello world")); | |
} | |
void _vinit(int ___argc, voidptr ___argv) { | |
as_cast_type_indexes = new_array_from_c_array(1, 1, sizeof(VCastTypeIndexName), _MOV((VCastTypeIndexName[1]){(VCastTypeIndexName){.tindex = 0,.tname = _SLIT("unknown")}})); | |
builtin_init(); | |
vinit_string_literals(); | |
// Initializations for module strings : | |
// Initializations for module math.bits : | |
_const_math__bits__de_bruijn32 = ((u32)(0x077CB531U)); | |
_const_math__bits__de_bruijn32tab = new_array_from_c_array(32, 32, sizeof(byte), _MOV((byte[32]){ | |
((byte)(0)), 1, 28, 2, 29, 14, 24, 3, 30, | |
22, 20, 15, 25, 17, 4, 8, 31, | |
27, 13, 23, 21, 19, 16, 7, 26, | |
12, 18, 6, 11, 5, 10, 9})); | |
_const_math__bits__de_bruijn64 = ((u64)(0x03f79d71b4ca8b09U)); | |
_const_math__bits__de_bruijn64tab = new_array_from_c_array(64, 64, sizeof(byte), _MOV((byte[64]){ | |
((byte)(0)), 1, 56, 2, 57, 49, 28, 3, 61, | |
58, 42, 50, 38, 29, 17, 4, 62, | |
47, 59, 36, 45, 43, 51, 22, 53, | |
39, 33, 30, 24, 18, 12, 5, 63, | |
55, 48, 27, 60, 41, 37, 16, 46, | |
35, 44, 21, 52, 32, 23, 11, 54, | |
26, 40, 15, 34, 20, 31, 10, 25, | |
14, 19, 9, 13, 8, 7, 6})); | |
_const_math__bits__two32 = ((u64)(0x100000000U)); | |
_const_math__bits__mask32 = _const_math__bits__two32 - 1U; | |
// Initializations for module strconv : | |
_const_strconv__single_plus_zero = ((u32)(0x00000000U)); | |
_const_strconv__single_minus_zero = ((u32)(0x80000000U)); | |
_const_strconv__single_plus_infinity = ((u32)(0x7F800000U)); | |
_const_strconv__single_minus_infinity = ((u32)(0xFF800000U)); | |
_const_strconv__double_plus_zero = ((u64)(0x0000000000000000U)); | |
_const_strconv__double_minus_zero = ((u64)(0x8000000000000000U)); | |
_const_strconv__double_plus_infinity = ((u64)(0x7FF0000000000000U)); | |
_const_strconv__double_minus_infinity = ((u64)(0xFFF0000000000000U)); | |
_const_strconv__ten_pow_table_32 = new_array_from_c_array(12, 12, sizeof(u32), _MOV((u32[12]){ | |
((u32)(1U)), ((u32)(10U)), ((u32)(100U)), ((u32)(1000U)), ((u32)(10000U)), ((u32)(100000U)), ((u32)(1000000U)), ((u32)(10000000U)), ((u32)(100000000U)), | |
((u32)(1000000000U)), ((u32)(10000000000U)), ((u32)(100000000000U))})); | |
_const_strconv__mantbits32 = ((u32)(23U)); | |
_const_strconv__expbits32 = ((u32)(8U)); | |
_const_strconv__ten_pow_table_64 = new_array_from_c_array(20, 20, sizeof(u64), _MOV((u64[20]){ | |
((u64)(1U)), ((u64)(10U)), ((u64)(100U)), ((u64)(1000U)), ((u64)(10000U)), ((u64)(100000U)), ((u64)(1000000U)), ((u64)(10000000U)), ((u64)(100000000U)), | |
((u64)(1000000000U)), ((u64)(10000000000U)), ((u64)(100000000000U)), ((u64)(1000000000000U)), ((u64)(10000000000000U)), ((u64)(100000000000000U)), ((u64)(1000000000000000U)), ((u64)(10000000000000000U)), | |
((u64)(100000000000000000U)), ((u64)(1000000000000000000U)), ((u64)(10000000000000000000U))})); | |
_const_strconv__mantbits64 = ((u32)(52U)); | |
_const_strconv__expbits64 = ((u32)(11U)); | |
_const_strconv__dec_round = new_array_from_c_array(20, 20, sizeof(f64), _MOV((f64[20]){ | |
((f64)(0.5)), 0.05, 0.005, 0.0005, 0.00005, 0.000005, 0.0000005, 0.00000005, 0.000000005, | |
0.0000000005, 0.00000000005, 0.000000000005, 0.0000000000005, 0.00000000000005, 0.000000000000005, 0.0000000000000005, 0.00000000000000005, | |
0.000000000000000005, 0.0000000000000000005, 0.00000000000000000005})); | |
_const_strconv__pow5_split_32 = new_array_from_c_array(47, 47, sizeof(u64), _MOV((u64[47]){ | |
((u64)(1152921504606846976U)), ((u64)(1441151880758558720U)), ((u64)(1801439850948198400U)), ((u64)(2251799813685248000U)), ((u64)(1407374883553280000U)), ((u64)(1759218604441600000U)), ((u64)(2199023255552000000U)), ((u64)(1374389534720000000U)), ((u64)(1717986918400000000U)), | |
((u64)(2147483648000000000U)), ((u64)(1342177280000000000U)), ((u64)(1677721600000000000U)), ((u64)(2097152000000000000U)), ((u64)(1310720000000000000U)), ((u64)(1638400000000000000U)), ((u64)(2048000000000000000U)), ((u64)(1280000000000000000U)), | |
((u64)(1600000000000000000U)), ((u64)(2000000000000000000U)), ((u64)(1250000000000000000U)), ((u64)(1562500000000000000U)), ((u64)(1953125000000000000U)), ((u64)(1220703125000000000U)), ((u64)(1525878906250000000U)), ((u64)(1907348632812500000U)), | |
((u64)(1192092895507812500U)), ((u64)(1490116119384765625U)), ((u64)(1862645149230957031U)), ((u64)(1164153218269348144U)), ((u64)(1455191522836685180U)), ((u64)(1818989403545856475U)), ((u64)(2273736754432320594U)), ((u64)(1421085471520200371U)), | |
((u64)(1776356839400250464U)), ((u64)(2220446049250313080U)), ((u64)(1387778780781445675U)), ((u64)(1734723475976807094U)), ((u64)(2168404344971008868U)), ((u64)(1355252715606880542U)), ((u64)(1694065894508600678U)), ((u64)(2117582368135750847U)), | |
((u64)(1323488980084844279U)), ((u64)(1654361225106055349U)), ((u64)(2067951531382569187U)), ((u64)(1292469707114105741U)), ((u64)(1615587133892632177U)), ((u64)(2019483917365790221U))})); | |
_const_strconv__pow5_inv_split_32 = new_array_from_c_array(31, 31, sizeof(u64), _MOV((u64[31]){ | |
((u64)(576460752303423489U)), ((u64)(461168601842738791U)), ((u64)(368934881474191033U)), ((u64)(295147905179352826U)), ((u64)(472236648286964522U)), ((u64)(377789318629571618U)), ((u64)(302231454903657294U)), ((u64)(483570327845851670U)), ((u64)(386856262276681336U)), | |
((u64)(309485009821345069U)), ((u64)(495176015714152110U)), ((u64)(396140812571321688U)), ((u64)(316912650057057351U)), ((u64)(507060240091291761U)), ((u64)(405648192073033409U)), ((u64)(324518553658426727U)), ((u64)(519229685853482763U)), | |
((u64)(415383748682786211U)), ((u64)(332306998946228969U)), ((u64)(531691198313966350U)), ((u64)(425352958651173080U)), ((u64)(340282366920938464U)), ((u64)(544451787073501542U)), ((u64)(435561429658801234U)), ((u64)(348449143727040987U)), | |
((u64)(557518629963265579U)), ((u64)(446014903970612463U)), ((u64)(356811923176489971U)), ((u64)(570899077082383953U)), ((u64)(456719261665907162U)), ((u64)(365375409332725730U))})); | |
_const_strconv__pow5_split_64 = new_array_from_c_array(326, 326, sizeof(strconv__Uint128), _MOV((strconv__Uint128[326]){ | |
(strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x0100000000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x0140000000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x0190000000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01f4000000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x0138800000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x0186a00000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01e8480000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01312d0000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x017d784000000000U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01dcd65000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x012a05f200000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x0174876e80000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01d1a94a20000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x012309ce54000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x016bcc41e9000000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01c6bf5263400000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x011c37937e080000U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x016345785d8a0000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01bc16d674ec8000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01158e460913d000U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x015af1d78b58c400U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01b1ae4d6e2ef500U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x010f0cf064dd5920U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x0152d02c7e14af68U)),}, (strconv__Uint128){.lo = ((u64)(0x0000000000000000U)),.hi = ((u64)(0x01a784379d99db42U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x4000000000000000U)),.hi = ((u64)(0x0108b2a2c2802909U)),}, (strconv__Uint128){.lo = ((u64)(0x9000000000000000U)),.hi = ((u64)(0x014adf4b7320334bU)),}, (strconv__Uint128){.lo = ((u64)(0x7400000000000000U)),.hi = ((u64)(0x019d971e4fe8401eU)),}, (strconv__Uint128){.lo = ((u64)(0x0880000000000000U)),.hi = ((u64)(0x01027e72f1f12813U)),}, (strconv__Uint128){.lo = ((u64)(0xcaa0000000000000U)),.hi = ((u64)(0x01431e0fae6d7217U)),}, (strconv__Uint128){.lo = ((u64)(0xbd48000000000000U)),.hi = ((u64)(0x0193e5939a08ce9dU)),}, (strconv__Uint128){.lo = ((u64)(0x2c9a000000000000U)),.hi = ((u64)(0x01f8def8808b0245U)),}, (strconv__Uint128){.lo = ((u64)(0x3be0400000000000U)),.hi = ((u64)(0x013b8b5b5056e16bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x0ad8500000000000U)),.hi = ((u64)(0x018a6e32246c99c6U)),}, (strconv__Uint128){.lo = ((u64)(0x8d8e640000000000U)),.hi = ((u64)(0x01ed09bead87c037U)),}, (strconv__Uint128){.lo = ((u64)(0xb878fe8000000000U)),.hi = ((u64)(0x013426172c74d822U)),}, (strconv__Uint128){.lo = ((u64)(0x66973e2000000000U)),.hi = ((u64)(0x01812f9cf7920e2bU)),}, (strconv__Uint128){.lo = ((u64)(0x403d0da800000000U)),.hi = ((u64)(0x01e17b84357691b6U)),}, (strconv__Uint128){.lo = ((u64)(0xe826288900000000U)),.hi = ((u64)(0x012ced32a16a1b11U)),}, (strconv__Uint128){.lo = ((u64)(0x622fb2ab40000000U)),.hi = ((u64)(0x0178287f49c4a1d6U)),}, (strconv__Uint128){.lo = ((u64)(0xfabb9f5610000000U)),.hi = ((u64)(0x01d6329f1c35ca4bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x7cb54395ca000000U)),.hi = ((u64)(0x0125dfa371a19e6fU)),}, (strconv__Uint128){.lo = ((u64)(0x5be2947b3c800000U)),.hi = ((u64)(0x016f578c4e0a060bU)),}, (strconv__Uint128){.lo = ((u64)(0x32db399a0ba00000U)),.hi = ((u64)(0x01cb2d6f618c878eU)),}, (strconv__Uint128){.lo = ((u64)(0xdfc9040047440000U)),.hi = ((u64)(0x011efc659cf7d4b8U)),}, (strconv__Uint128){.lo = ((u64)(0x17bb450059150000U)),.hi = ((u64)(0x0166bb7f0435c9e7U)),}, (strconv__Uint128){.lo = ((u64)(0xddaa16406f5a4000U)),.hi = ((u64)(0x01c06a5ec5433c60U)),}, (strconv__Uint128){.lo = ((u64)(0x8a8a4de845986800U)),.hi = ((u64)(0x0118427b3b4a05bcU)),}, (strconv__Uint128){.lo = ((u64)(0xad2ce16256fe8200U)),.hi = ((u64)(0x015e531a0a1c872bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x987819baecbe2280U)),.hi = ((u64)(0x01b5e7e08ca3a8f6U)),}, (strconv__Uint128){.lo = ((u64)(0x1f4b1014d3f6d590U)),.hi = ((u64)(0x0111b0ec57e6499aU)),}, (strconv__Uint128){.lo = ((u64)(0xa71dd41a08f48af4U)),.hi = ((u64)(0x01561d276ddfdc00U)),}, (strconv__Uint128){.lo = ((u64)(0xd0e549208b31adb1U)),.hi = ((u64)(0x01aba4714957d300U)),}, (strconv__Uint128){.lo = ((u64)(0x828f4db456ff0c8eU)),.hi = ((u64)(0x010b46c6cdd6e3e0U)),}, (strconv__Uint128){.lo = ((u64)(0xa33321216cbecfb2U)),.hi = ((u64)(0x014e1878814c9cd8U)),}, (strconv__Uint128){.lo = ((u64)(0xcbffe969c7ee839eU)),.hi = ((u64)(0x01a19e96a19fc40eU)),}, (strconv__Uint128){.lo = ((u64)(0x3f7ff1e21cf51243U)),.hi = ((u64)(0x0105031e2503da89U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8f5fee5aa43256d4U)),.hi = ((u64)(0x014643e5ae44d12bU)),}, (strconv__Uint128){.lo = ((u64)(0x7337e9f14d3eec89U)),.hi = ((u64)(0x0197d4df19d60576U)),}, (strconv__Uint128){.lo = ((u64)(0x1005e46da08ea7abU)),.hi = ((u64)(0x01fdca16e04b86d4U)),}, (strconv__Uint128){.lo = ((u64)(0x8a03aec4845928cbU)),.hi = ((u64)(0x013e9e4e4c2f3444U)),}, (strconv__Uint128){.lo = ((u64)(0xac849a75a56f72fdU)),.hi = ((u64)(0x018e45e1df3b0155U)),}, (strconv__Uint128){.lo = ((u64)(0x17a5c1130ecb4fbdU)),.hi = ((u64)(0x01f1d75a5709c1abU)),}, (strconv__Uint128){.lo = ((u64)(0xeec798abe93f11d6U)),.hi = ((u64)(0x013726987666190aU)),}, (strconv__Uint128){.lo = ((u64)(0xaa797ed6e38ed64bU)),.hi = ((u64)(0x0184f03e93ff9f4dU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x1517de8c9c728bdeU)),.hi = ((u64)(0x01e62c4e38ff8721U)),}, (strconv__Uint128){.lo = ((u64)(0xad2eeb17e1c7976bU)),.hi = ((u64)(0x012fdbb0e39fb474U)),}, (strconv__Uint128){.lo = ((u64)(0xd87aa5ddda397d46U)),.hi = ((u64)(0x017bd29d1c87a191U)),}, (strconv__Uint128){.lo = ((u64)(0x4e994f5550c7dc97U)),.hi = ((u64)(0x01dac74463a989f6U)),}, (strconv__Uint128){.lo = ((u64)(0xf11fd195527ce9deU)),.hi = ((u64)(0x0128bc8abe49f639U)),}, (strconv__Uint128){.lo = ((u64)(0x6d67c5faa71c2456U)),.hi = ((u64)(0x0172ebad6ddc73c8U)),}, (strconv__Uint128){.lo = ((u64)(0x88c1b77950e32d6cU)),.hi = ((u64)(0x01cfa698c95390baU)),}, (strconv__Uint128){.lo = ((u64)(0x957912abd28dfc63U)),.hi = ((u64)(0x0121c81f7dd43a74U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xbad75756c7317b7cU)),.hi = ((u64)(0x016a3a275d494911U)),}, (strconv__Uint128){.lo = ((u64)(0x298d2d2c78fdda5bU)),.hi = ((u64)(0x01c4c8b1349b9b56U)),}, (strconv__Uint128){.lo = ((u64)(0xd9f83c3bcb9ea879U)),.hi = ((u64)(0x011afd6ec0e14115U)),}, (strconv__Uint128){.lo = ((u64)(0x50764b4abe865297U)),.hi = ((u64)(0x0161bcca7119915bU)),}, (strconv__Uint128){.lo = ((u64)(0x2493de1d6e27e73dU)),.hi = ((u64)(0x01ba2bfd0d5ff5b2U)),}, (strconv__Uint128){.lo = ((u64)(0x56dc6ad264d8f086U)),.hi = ((u64)(0x01145b7e285bf98fU)),}, (strconv__Uint128){.lo = ((u64)(0x2c938586fe0f2ca8U)),.hi = ((u64)(0x0159725db272f7f3U)),}, (strconv__Uint128){.lo = ((u64)(0xf7b866e8bd92f7d2U)),.hi = ((u64)(0x01afcef51f0fb5efU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xfad34051767bdae3U)),.hi = ((u64)(0x010de1593369d1b5U)),}, (strconv__Uint128){.lo = ((u64)(0x79881065d41ad19cU)),.hi = ((u64)(0x015159af80444623U)),}, (strconv__Uint128){.lo = ((u64)(0x57ea147f49218603U)),.hi = ((u64)(0x01a5b01b605557acU)),}, (strconv__Uint128){.lo = ((u64)(0xb6f24ccf8db4f3c1U)),.hi = ((u64)(0x01078e111c3556cbU)),}, (strconv__Uint128){.lo = ((u64)(0xa4aee003712230b2U)),.hi = ((u64)(0x014971956342ac7eU)),}, (strconv__Uint128){.lo = ((u64)(0x4dda98044d6abcdfU)),.hi = ((u64)(0x019bcdfabc13579eU)),}, (strconv__Uint128){.lo = ((u64)(0xf0a89f02b062b60bU)),.hi = ((u64)(0x010160bcb58c16c2U)),}, (strconv__Uint128){.lo = ((u64)(0xacd2c6c35c7b638eU)),.hi = ((u64)(0x0141b8ebe2ef1c73U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x98077874339a3c71U)),.hi = ((u64)(0x01922726dbaae390U)),}, (strconv__Uint128){.lo = ((u64)(0xbe0956914080cb8eU)),.hi = ((u64)(0x01f6b0f092959c74U)),}, (strconv__Uint128){.lo = ((u64)(0xf6c5d61ac8507f38U)),.hi = ((u64)(0x013a2e965b9d81c8U)),}, (strconv__Uint128){.lo = ((u64)(0x34774ba17a649f07U)),.hi = ((u64)(0x0188ba3bf284e23bU)),}, (strconv__Uint128){.lo = ((u64)(0x01951e89d8fdc6c8U)),.hi = ((u64)(0x01eae8caef261acaU)),}, (strconv__Uint128){.lo = ((u64)(0x40fd3316279e9c3dU)),.hi = ((u64)(0x0132d17ed577d0beU)),}, (strconv__Uint128){.lo = ((u64)(0xd13c7fdbb186434cU)),.hi = ((u64)(0x017f85de8ad5c4edU)),}, (strconv__Uint128){.lo = ((u64)(0x458b9fd29de7d420U)),.hi = ((u64)(0x01df67562d8b3629U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xcb7743e3a2b0e494U)),.hi = ((u64)(0x012ba095dc7701d9U)),}, (strconv__Uint128){.lo = ((u64)(0x3e5514dc8b5d1db9U)),.hi = ((u64)(0x017688bb5394c250U)),}, (strconv__Uint128){.lo = ((u64)(0x4dea5a13ae346527U)),.hi = ((u64)(0x01d42aea2879f2e4U)),}, (strconv__Uint128){.lo = ((u64)(0xb0b2784c4ce0bf38U)),.hi = ((u64)(0x01249ad2594c37ceU)),}, (strconv__Uint128){.lo = ((u64)(0x5cdf165f6018ef06U)),.hi = ((u64)(0x016dc186ef9f45c2U)),}, (strconv__Uint128){.lo = ((u64)(0xf416dbf7381f2ac8U)),.hi = ((u64)(0x01c931e8ab871732U)),}, (strconv__Uint128){.lo = ((u64)(0xd88e497a83137abdU)),.hi = ((u64)(0x011dbf316b346e7fU)),}, (strconv__Uint128){.lo = ((u64)(0xceb1dbd923d8596cU)),.hi = ((u64)(0x01652efdc6018a1fU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xc25e52cf6cce6fc7U)),.hi = ((u64)(0x01be7abd3781eca7U)),}, (strconv__Uint128){.lo = ((u64)(0xd97af3c1a40105dcU)),.hi = ((u64)(0x01170cb642b133e8U)),}, (strconv__Uint128){.lo = ((u64)(0x0fd9b0b20d014754U)),.hi = ((u64)(0x015ccfe3d35d80e3U)),}, (strconv__Uint128){.lo = ((u64)(0xd3d01cde90419929U)),.hi = ((u64)(0x01b403dcc834e11bU)),}, (strconv__Uint128){.lo = ((u64)(0x6462120b1a28ffb9U)),.hi = ((u64)(0x01108269fd210cb1U)),}, (strconv__Uint128){.lo = ((u64)(0xbd7a968de0b33fa8U)),.hi = ((u64)(0x0154a3047c694fddU)),}, (strconv__Uint128){.lo = ((u64)(0x2cd93c3158e00f92U)),.hi = ((u64)(0x01a9cbc59b83a3d5U)),}, (strconv__Uint128){.lo = ((u64)(0x3c07c59ed78c09bbU)),.hi = ((u64)(0x010a1f5b81324665U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8b09b7068d6f0c2aU)),.hi = ((u64)(0x014ca732617ed7feU)),}, (strconv__Uint128){.lo = ((u64)(0x2dcc24c830cacf34U)),.hi = ((u64)(0x019fd0fef9de8dfeU)),}, (strconv__Uint128){.lo = ((u64)(0xdc9f96fd1e7ec180U)),.hi = ((u64)(0x0103e29f5c2b18beU)),}, (strconv__Uint128){.lo = ((u64)(0x93c77cbc661e71e1U)),.hi = ((u64)(0x0144db473335deeeU)),}, (strconv__Uint128){.lo = ((u64)(0x38b95beb7fa60e59U)),.hi = ((u64)(0x01961219000356aaU)),}, (strconv__Uint128){.lo = ((u64)(0xc6e7b2e65f8f91efU)),.hi = ((u64)(0x01fb969f40042c54U)),}, (strconv__Uint128){.lo = ((u64)(0xfc50cfcffbb9bb35U)),.hi = ((u64)(0x013d3e2388029bb4U)),}, (strconv__Uint128){.lo = ((u64)(0x3b6503c3faa82a03U)),.hi = ((u64)(0x018c8dac6a0342a2U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xca3e44b4f9523484U)),.hi = ((u64)(0x01efb1178484134aU)),}, (strconv__Uint128){.lo = ((u64)(0xbe66eaf11bd360d2U)),.hi = ((u64)(0x0135ceaeb2d28c0eU)),}, (strconv__Uint128){.lo = ((u64)(0x6e00a5ad62c83907U)),.hi = ((u64)(0x0183425a5f872f12U)),}, (strconv__Uint128){.lo = ((u64)(0x0980cf18bb7a4749U)),.hi = ((u64)(0x01e412f0f768fad7U)),}, (strconv__Uint128){.lo = ((u64)(0x65f0816f752c6c8dU)),.hi = ((u64)(0x012e8bd69aa19cc6U)),}, (strconv__Uint128){.lo = ((u64)(0xff6ca1cb527787b1U)),.hi = ((u64)(0x017a2ecc414a03f7U)),}, (strconv__Uint128){.lo = ((u64)(0xff47ca3e2715699dU)),.hi = ((u64)(0x01d8ba7f519c84f5U)),}, (strconv__Uint128){.lo = ((u64)(0xbf8cde66d86d6202U)),.hi = ((u64)(0x0127748f9301d319U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x2f7016008e88ba83U)),.hi = ((u64)(0x017151b377c247e0U)),}, (strconv__Uint128){.lo = ((u64)(0x3b4c1b80b22ae923U)),.hi = ((u64)(0x01cda62055b2d9d8U)),}, (strconv__Uint128){.lo = ((u64)(0x250f91306f5ad1b6U)),.hi = ((u64)(0x012087d4358fc827U)),}, (strconv__Uint128){.lo = ((u64)(0xee53757c8b318623U)),.hi = ((u64)(0x0168a9c942f3ba30U)),}, (strconv__Uint128){.lo = ((u64)(0x29e852dbadfde7acU)),.hi = ((u64)(0x01c2d43b93b0a8bdU)),}, (strconv__Uint128){.lo = ((u64)(0x3a3133c94cbeb0ccU)),.hi = ((u64)(0x0119c4a53c4e6976U)),}, (strconv__Uint128){.lo = ((u64)(0xc8bd80bb9fee5cffU)),.hi = ((u64)(0x016035ce8b6203d3U)),}, (strconv__Uint128){.lo = ((u64)(0xbaece0ea87e9f43eU)),.hi = ((u64)(0x01b843422e3a84c8U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x74d40c9294f238a7U)),.hi = ((u64)(0x01132a095ce492fdU)),}, (strconv__Uint128){.lo = ((u64)(0xd2090fb73a2ec6d1U)),.hi = ((u64)(0x0157f48bb41db7bcU)),}, (strconv__Uint128){.lo = ((u64)(0x068b53a508ba7885U)),.hi = ((u64)(0x01adf1aea12525acU)),}, (strconv__Uint128){.lo = ((u64)(0x8417144725748b53U)),.hi = ((u64)(0x010cb70d24b7378bU)),}, (strconv__Uint128){.lo = ((u64)(0x651cd958eed1ae28U)),.hi = ((u64)(0x014fe4d06de5056eU)),}, (strconv__Uint128){.lo = ((u64)(0xfe640faf2a8619b2U)),.hi = ((u64)(0x01a3de04895e46c9U)),}, (strconv__Uint128){.lo = ((u64)(0x3efe89cd7a93d00fU)),.hi = ((u64)(0x01066ac2d5daec3eU)),}, (strconv__Uint128){.lo = ((u64)(0xcebe2c40d938c413U)),.hi = ((u64)(0x014805738b51a74dU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x426db7510f86f518U)),.hi = ((u64)(0x019a06d06e261121U)),}, (strconv__Uint128){.lo = ((u64)(0xc9849292a9b4592fU)),.hi = ((u64)(0x0100444244d7cab4U)),}, (strconv__Uint128){.lo = ((u64)(0xfbe5b73754216f7aU)),.hi = ((u64)(0x01405552d60dbd61U)),}, (strconv__Uint128){.lo = ((u64)(0x7adf25052929cb59U)),.hi = ((u64)(0x01906aa78b912cbaU)),}, (strconv__Uint128){.lo = ((u64)(0x1996ee4673743e2fU)),.hi = ((u64)(0x01f485516e7577e9U)),}, (strconv__Uint128){.lo = ((u64)(0xaffe54ec0828a6ddU)),.hi = ((u64)(0x0138d352e5096af1U)),}, (strconv__Uint128){.lo = ((u64)(0x1bfdea270a32d095U)),.hi = ((u64)(0x018708279e4bc5aeU)),}, (strconv__Uint128){.lo = ((u64)(0xa2fd64b0ccbf84baU)),.hi = ((u64)(0x01e8ca3185deb719U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x05de5eee7ff7b2f4U)),.hi = ((u64)(0x01317e5ef3ab3270U)),}, (strconv__Uint128){.lo = ((u64)(0x0755f6aa1ff59fb1U)),.hi = ((u64)(0x017dddf6b095ff0cU)),}, (strconv__Uint128){.lo = ((u64)(0x092b7454a7f3079eU)),.hi = ((u64)(0x01dd55745cbb7ecfU)),}, (strconv__Uint128){.lo = ((u64)(0x65bb28b4e8f7e4c3U)),.hi = ((u64)(0x012a5568b9f52f41U)),}, (strconv__Uint128){.lo = ((u64)(0xbf29f2e22335ddf3U)),.hi = ((u64)(0x0174eac2e8727b11U)),}, (strconv__Uint128){.lo = ((u64)(0x2ef46f9aac035570U)),.hi = ((u64)(0x01d22573a28f19d6U)),}, (strconv__Uint128){.lo = ((u64)(0xdd58c5c0ab821566U)),.hi = ((u64)(0x0123576845997025U)),}, (strconv__Uint128){.lo = ((u64)(0x54aef730d6629ac0U)),.hi = ((u64)(0x016c2d4256ffcc2fU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x29dab4fd0bfb4170U)),.hi = ((u64)(0x01c73892ecbfbf3bU)),}, (strconv__Uint128){.lo = ((u64)(0xfa28b11e277d08e6U)),.hi = ((u64)(0x011c835bd3f7d784U)),}, (strconv__Uint128){.lo = ((u64)(0x38b2dd65b15c4b1fU)),.hi = ((u64)(0x0163a432c8f5cd66U)),}, (strconv__Uint128){.lo = ((u64)(0xc6df94bf1db35de7U)),.hi = ((u64)(0x01bc8d3f7b3340bfU)),}, (strconv__Uint128){.lo = ((u64)(0xdc4bbcf772901ab0U)),.hi = ((u64)(0x0115d847ad000877U)),}, (strconv__Uint128){.lo = ((u64)(0xd35eac354f34215cU)),.hi = ((u64)(0x015b4e5998400a95U)),}, (strconv__Uint128){.lo = ((u64)(0x48365742a30129b4U)),.hi = ((u64)(0x01b221effe500d3bU)),}, (strconv__Uint128){.lo = ((u64)(0x0d21f689a5e0ba10U)),.hi = ((u64)(0x010f5535fef20845U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x506a742c0f58e894U)),.hi = ((u64)(0x01532a837eae8a56U)),}, (strconv__Uint128){.lo = ((u64)(0xe4851137132f22b9U)),.hi = ((u64)(0x01a7f5245e5a2cebU)),}, (strconv__Uint128){.lo = ((u64)(0x6ed32ac26bfd75b4U)),.hi = ((u64)(0x0108f936baf85c13U)),}, (strconv__Uint128){.lo = ((u64)(0x4a87f57306fcd321U)),.hi = ((u64)(0x014b378469b67318U)),}, (strconv__Uint128){.lo = ((u64)(0x5d29f2cfc8bc07e9U)),.hi = ((u64)(0x019e056584240fdeU)),}, (strconv__Uint128){.lo = ((u64)(0xfa3a37c1dd7584f1U)),.hi = ((u64)(0x0102c35f729689eaU)),}, (strconv__Uint128){.lo = ((u64)(0xb8c8c5b254d2e62eU)),.hi = ((u64)(0x014374374f3c2c65U)),}, (strconv__Uint128){.lo = ((u64)(0x26faf71eea079fb9U)),.hi = ((u64)(0x01945145230b377fU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xf0b9b4e6a48987a8U)),.hi = ((u64)(0x01f965966bce055eU)),}, (strconv__Uint128){.lo = ((u64)(0x5674111026d5f4c9U)),.hi = ((u64)(0x013bdf7e0360c35bU)),}, (strconv__Uint128){.lo = ((u64)(0x2c111554308b71fbU)),.hi = ((u64)(0x018ad75d8438f432U)),}, (strconv__Uint128){.lo = ((u64)(0xb7155aa93cae4e7aU)),.hi = ((u64)(0x01ed8d34e547313eU)),}, (strconv__Uint128){.lo = ((u64)(0x326d58a9c5ecf10cU)),.hi = ((u64)(0x013478410f4c7ec7U)),}, (strconv__Uint128){.lo = ((u64)(0xff08aed437682d4fU)),.hi = ((u64)(0x01819651531f9e78U)),}, (strconv__Uint128){.lo = ((u64)(0x3ecada89454238a3U)),.hi = ((u64)(0x01e1fbe5a7e78617U)),}, (strconv__Uint128){.lo = ((u64)(0x873ec895cb496366U)),.hi = ((u64)(0x012d3d6f88f0b3ceU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x290e7abb3e1bbc3fU)),.hi = ((u64)(0x01788ccb6b2ce0c2U)),}, (strconv__Uint128){.lo = ((u64)(0xb352196a0da2ab4fU)),.hi = ((u64)(0x01d6affe45f818f2U)),}, (strconv__Uint128){.lo = ((u64)(0xb0134fe24885ab11U)),.hi = ((u64)(0x01262dfeebbb0f97U)),}, (strconv__Uint128){.lo = ((u64)(0x9c1823dadaa715d6U)),.hi = ((u64)(0x016fb97ea6a9d37dU)),}, (strconv__Uint128){.lo = ((u64)(0x031e2cd19150db4bU)),.hi = ((u64)(0x01cba7de5054485dU)),}, (strconv__Uint128){.lo = ((u64)(0x21f2dc02fad2890fU)),.hi = ((u64)(0x011f48eaf234ad3aU)),}, (strconv__Uint128){.lo = ((u64)(0xaa6f9303b9872b53U)),.hi = ((u64)(0x01671b25aec1d888U)),}, (strconv__Uint128){.lo = ((u64)(0xd50b77c4a7e8f628U)),.hi = ((u64)(0x01c0e1ef1a724eaaU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xc5272adae8f199d9U)),.hi = ((u64)(0x01188d357087712aU)),}, (strconv__Uint128){.lo = ((u64)(0x7670f591a32e004fU)),.hi = ((u64)(0x015eb082cca94d75U)),}, (strconv__Uint128){.lo = ((u64)(0xd40d32f60bf98063U)),.hi = ((u64)(0x01b65ca37fd3a0d2U)),}, (strconv__Uint128){.lo = ((u64)(0xc4883fd9c77bf03eU)),.hi = ((u64)(0x0111f9e62fe44483U)),}, (strconv__Uint128){.lo = ((u64)(0xb5aa4fd0395aec4dU)),.hi = ((u64)(0x0156785fbbdd55a4U)),}, (strconv__Uint128){.lo = ((u64)(0xe314e3c447b1a760U)),.hi = ((u64)(0x01ac1677aad4ab0dU)),}, (strconv__Uint128){.lo = ((u64)(0xaded0e5aaccf089cU)),.hi = ((u64)(0x010b8e0acac4eae8U)),}, (strconv__Uint128){.lo = ((u64)(0xd96851f15802cac3U)),.hi = ((u64)(0x014e718d7d7625a2U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8fc2666dae037d74U)),.hi = ((u64)(0x01a20df0dcd3af0bU)),}, (strconv__Uint128){.lo = ((u64)(0x39d980048cc22e68U)),.hi = ((u64)(0x010548b68a044d67U)),}, (strconv__Uint128){.lo = ((u64)(0x084fe005aff2ba03U)),.hi = ((u64)(0x01469ae42c8560c1U)),}, (strconv__Uint128){.lo = ((u64)(0x4a63d8071bef6883U)),.hi = ((u64)(0x0198419d37a6b8f1U)),}, (strconv__Uint128){.lo = ((u64)(0x9cfcce08e2eb42a4U)),.hi = ((u64)(0x01fe52048590672dU)),}, (strconv__Uint128){.lo = ((u64)(0x821e00c58dd309a7U)),.hi = ((u64)(0x013ef342d37a407cU)),}, (strconv__Uint128){.lo = ((u64)(0xa2a580f6f147cc10U)),.hi = ((u64)(0x018eb0138858d09bU)),}, (strconv__Uint128){.lo = ((u64)(0x8b4ee134ad99bf15U)),.hi = ((u64)(0x01f25c186a6f04c2U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x97114cc0ec80176dU)),.hi = ((u64)(0x0137798f428562f9U)),}, (strconv__Uint128){.lo = ((u64)(0xfcd59ff127a01d48U)),.hi = ((u64)(0x018557f31326bbb7U)),}, (strconv__Uint128){.lo = ((u64)(0xfc0b07ed7188249aU)),.hi = ((u64)(0x01e6adefd7f06aa5U)),}, (strconv__Uint128){.lo = ((u64)(0xbd86e4f466f516e0U)),.hi = ((u64)(0x01302cb5e6f642a7U)),}, (strconv__Uint128){.lo = ((u64)(0xace89e3180b25c98U)),.hi = ((u64)(0x017c37e360b3d351U)),}, (strconv__Uint128){.lo = ((u64)(0x1822c5bde0def3beU)),.hi = ((u64)(0x01db45dc38e0c826U)),}, (strconv__Uint128){.lo = ((u64)(0xcf15bb96ac8b5857U)),.hi = ((u64)(0x01290ba9a38c7d17U)),}, (strconv__Uint128){.lo = ((u64)(0xc2db2a7c57ae2e6dU)),.hi = ((u64)(0x01734e940c6f9c5dU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x3391f51b6d99ba08U)),.hi = ((u64)(0x01d022390f8b8375U)),}, (strconv__Uint128){.lo = ((u64)(0x403b393124801445U)),.hi = ((u64)(0x01221563a9b73229U)),}, (strconv__Uint128){.lo = ((u64)(0x904a077d6da01956U)),.hi = ((u64)(0x016a9abc9424feb3U)),}, (strconv__Uint128){.lo = ((u64)(0x745c895cc9081facU)),.hi = ((u64)(0x01c5416bb92e3e60U)),}, (strconv__Uint128){.lo = ((u64)(0x48b9d5d9fda513cbU)),.hi = ((u64)(0x011b48e353bce6fcU)),}, (strconv__Uint128){.lo = ((u64)(0x5ae84b507d0e58beU)),.hi = ((u64)(0x01621b1c28ac20bbU)),}, (strconv__Uint128){.lo = ((u64)(0x31a25e249c51eeeeU)),.hi = ((u64)(0x01baa1e332d728eaU)),}, (strconv__Uint128){.lo = ((u64)(0x5f057ad6e1b33554U)),.hi = ((u64)(0x0114a52dffc67992U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xf6c6d98c9a2002aaU)),.hi = ((u64)(0x0159ce797fb817f6U)),}, (strconv__Uint128){.lo = ((u64)(0xb4788fefc0a80354U)),.hi = ((u64)(0x01b04217dfa61df4U)),}, (strconv__Uint128){.lo = ((u64)(0xf0cb59f5d8690214U)),.hi = ((u64)(0x010e294eebc7d2b8U)),}, (strconv__Uint128){.lo = ((u64)(0x2cfe30734e83429aU)),.hi = ((u64)(0x0151b3a2a6b9c767U)),}, (strconv__Uint128){.lo = ((u64)(0xf83dbc9022241340U)),.hi = ((u64)(0x01a6208b50683940U)),}, (strconv__Uint128){.lo = ((u64)(0x9b2695da15568c08U)),.hi = ((u64)(0x0107d457124123c8U)),}, (strconv__Uint128){.lo = ((u64)(0xc1f03b509aac2f0aU)),.hi = ((u64)(0x0149c96cd6d16cbaU)),}, (strconv__Uint128){.lo = ((u64)(0x726c4a24c1573acdU)),.hi = ((u64)(0x019c3bc80c85c7e9U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xe783ae56f8d684c0U)),.hi = ((u64)(0x0101a55d07d39cf1U)),}, (strconv__Uint128){.lo = ((u64)(0x616499ecb70c25f0U)),.hi = ((u64)(0x01420eb449c8842eU)),}, (strconv__Uint128){.lo = ((u64)(0xf9bdc067e4cf2f6cU)),.hi = ((u64)(0x019292615c3aa539U)),}, (strconv__Uint128){.lo = ((u64)(0x782d3081de02fb47U)),.hi = ((u64)(0x01f736f9b3494e88U)),}, (strconv__Uint128){.lo = ((u64)(0x4b1c3e512ac1dd0cU)),.hi = ((u64)(0x013a825c100dd115U)),}, (strconv__Uint128){.lo = ((u64)(0x9de34de57572544fU)),.hi = ((u64)(0x018922f31411455aU)),}, (strconv__Uint128){.lo = ((u64)(0x455c215ed2cee963U)),.hi = ((u64)(0x01eb6bafd91596b1U)),}, (strconv__Uint128){.lo = ((u64)(0xcb5994db43c151deU)),.hi = ((u64)(0x0133234de7ad7e2eU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x7e2ffa1214b1a655U)),.hi = ((u64)(0x017fec216198ddbaU)),}, (strconv__Uint128){.lo = ((u64)(0x1dbbf89699de0febU)),.hi = ((u64)(0x01dfe729b9ff1529U)),}, (strconv__Uint128){.lo = ((u64)(0xb2957b5e202ac9f3U)),.hi = ((u64)(0x012bf07a143f6d39U)),}, (strconv__Uint128){.lo = ((u64)(0x1f3ada35a8357c6fU)),.hi = ((u64)(0x0176ec98994f4888U)),}, (strconv__Uint128){.lo = ((u64)(0x270990c31242db8bU)),.hi = ((u64)(0x01d4a7bebfa31aaaU)),}, (strconv__Uint128){.lo = ((u64)(0x5865fa79eb69c937U)),.hi = ((u64)(0x0124e8d737c5f0aaU)),}, (strconv__Uint128){.lo = ((u64)(0xee7f791866443b85U)),.hi = ((u64)(0x016e230d05b76cd4U)),}, (strconv__Uint128){.lo = ((u64)(0x2a1f575e7fd54a66U)),.hi = ((u64)(0x01c9abd04725480aU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x5a53969b0fe54e80U)),.hi = ((u64)(0x011e0b622c774d06U)),}, (strconv__Uint128){.lo = ((u64)(0xf0e87c41d3dea220U)),.hi = ((u64)(0x01658e3ab7952047U)),}, (strconv__Uint128){.lo = ((u64)(0xed229b5248d64aa8U)),.hi = ((u64)(0x01bef1c9657a6859U)),}, (strconv__Uint128){.lo = ((u64)(0x3435a1136d85eea9U)),.hi = ((u64)(0x0117571ddf6c8138U)),}, (strconv__Uint128){.lo = ((u64)(0x4143095848e76a53U)),.hi = ((u64)(0x015d2ce55747a186U)),}, (strconv__Uint128){.lo = ((u64)(0xd193cbae5b2144e8U)),.hi = ((u64)(0x01b4781ead1989e7U)),}, (strconv__Uint128){.lo = ((u64)(0xe2fc5f4cf8f4cb11U)),.hi = ((u64)(0x0110cb132c2ff630U)),}, (strconv__Uint128){.lo = ((u64)(0x1bbb77203731fdd5U)),.hi = ((u64)(0x0154fdd7f73bf3bdU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x62aa54e844fe7d4aU)),.hi = ((u64)(0x01aa3d4df50af0acU)),}, (strconv__Uint128){.lo = ((u64)(0xbdaa75112b1f0e4eU)),.hi = ((u64)(0x010a6650b926d66bU)),}, (strconv__Uint128){.lo = ((u64)(0xad15125575e6d1e2U)),.hi = ((u64)(0x014cffe4e7708c06U)),}, (strconv__Uint128){.lo = ((u64)(0x585a56ead360865bU)),.hi = ((u64)(0x01a03fde214caf08U)),}, (strconv__Uint128){.lo = ((u64)(0x37387652c41c53f8U)),.hi = ((u64)(0x010427ead4cfed65U)),}, (strconv__Uint128){.lo = ((u64)(0x850693e7752368f7U)),.hi = ((u64)(0x014531e58a03e8beU)),}, (strconv__Uint128){.lo = ((u64)(0x264838e1526c4334U)),.hi = ((u64)(0x01967e5eec84e2eeU)),}, (strconv__Uint128){.lo = ((u64)(0xafda4719a7075402U)),.hi = ((u64)(0x01fc1df6a7a61ba9U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x0de86c7008649481U)),.hi = ((u64)(0x013d92ba28c7d14aU)),}, (strconv__Uint128){.lo = ((u64)(0x9162878c0a7db9a1U)),.hi = ((u64)(0x018cf768b2f9c59cU)),}, (strconv__Uint128){.lo = ((u64)(0xb5bb296f0d1d280aU)),.hi = ((u64)(0x01f03542dfb83703U)),}, (strconv__Uint128){.lo = ((u64)(0x5194f9e568323906U)),.hi = ((u64)(0x01362149cbd32262U)),}, (strconv__Uint128){.lo = ((u64)(0xe5fa385ec23ec747U)),.hi = ((u64)(0x0183a99c3ec7eafaU)),}, (strconv__Uint128){.lo = ((u64)(0x9f78c67672ce7919U)),.hi = ((u64)(0x01e494034e79e5b9U)),}, (strconv__Uint128){.lo = ((u64)(0x03ab7c0a07c10bb0U)),.hi = ((u64)(0x012edc82110c2f94U)),}, (strconv__Uint128){.lo = ((u64)(0x04965b0c89b14e9cU)),.hi = ((u64)(0x017a93a2954f3b79U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x45bbf1cfac1da243U)),.hi = ((u64)(0x01d9388b3aa30a57U)),}, (strconv__Uint128){.lo = ((u64)(0x8b957721cb92856aU)),.hi = ((u64)(0x0127c35704a5e676U)),}, (strconv__Uint128){.lo = ((u64)(0x2e7ad4ea3e7726c4U)),.hi = ((u64)(0x0171b42cc5cf6014U)),}, (strconv__Uint128){.lo = ((u64)(0x3a198a24ce14f075U)),.hi = ((u64)(0x01ce2137f7433819U)),}, (strconv__Uint128){.lo = ((u64)(0xc44ff65700cd1649U)),.hi = ((u64)(0x0120d4c2fa8a030fU)),}, (strconv__Uint128){.lo = ((u64)(0xb563f3ecc1005bdbU)),.hi = ((u64)(0x016909f3b92c83d3U)),}, (strconv__Uint128){.lo = ((u64)(0xa2bcf0e7f14072d2U)),.hi = ((u64)(0x01c34c70a777a4c8U)),}, (strconv__Uint128){.lo = ((u64)(0x65b61690f6c847c3U)),.hi = ((u64)(0x011a0fc668aac6fdU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xbf239c35347a59b4U)),.hi = ((u64)(0x016093b802d578bcU)),}, (strconv__Uint128){.lo = ((u64)(0xeeec83428198f021U)),.hi = ((u64)(0x01b8b8a6038ad6ebU)),}, (strconv__Uint128){.lo = ((u64)(0x7553d20990ff9615U)),.hi = ((u64)(0x01137367c236c653U)),}, (strconv__Uint128){.lo = ((u64)(0x52a8c68bf53f7b9aU)),.hi = ((u64)(0x01585041b2c477e8U)),}, (strconv__Uint128){.lo = ((u64)(0x6752f82ef28f5a81U)),.hi = ((u64)(0x01ae64521f7595e2U)),}, (strconv__Uint128){.lo = ((u64)(0x8093db1d57999890U)),.hi = ((u64)(0x010cfeb353a97dadU)),}, (strconv__Uint128){.lo = ((u64)(0xe0b8d1e4ad7ffeb4U)),.hi = ((u64)(0x01503e602893dd18U)),}, (strconv__Uint128){.lo = ((u64)(0x18e7065dd8dffe62U)),.hi = ((u64)(0x01a44df832b8d45fU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x6f9063faa78bfefdU)),.hi = ((u64)(0x0106b0bb1fb384bbU)),}, (strconv__Uint128){.lo = ((u64)(0x4b747cf9516efebcU)),.hi = ((u64)(0x01485ce9e7a065eaU)),}, (strconv__Uint128){.lo = ((u64)(0xde519c37a5cabe6bU)),.hi = ((u64)(0x019a742461887f64U)),}, (strconv__Uint128){.lo = ((u64)(0x0af301a2c79eb703U)),.hi = ((u64)(0x01008896bcf54f9fU)),}, (strconv__Uint128){.lo = ((u64)(0xcdafc20b798664c4U)),.hi = ((u64)(0x0140aabc6c32a386U)),}, (strconv__Uint128){.lo = ((u64)(0x811bb28e57e7fdf5U)),.hi = ((u64)(0x0190d56b873f4c68U)),}, (strconv__Uint128){.lo = ((u64)(0xa1629f31ede1fd72U)),.hi = ((u64)(0x01f50ac6690f1f82U)),}, (strconv__Uint128){.lo = ((u64)(0xa4dda37f34ad3e67U)),.hi = ((u64)(0x013926bc01a973b1U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x0e150c5f01d88e01U)),.hi = ((u64)(0x0187706b0213d09eU)),}, (strconv__Uint128){.lo = ((u64)(0x919a4f76c24eb181U)),.hi = ((u64)(0x01e94c85c298c4c5U)),}, (strconv__Uint128){.lo = ((u64)(0x7b0071aa39712ef1U)),.hi = ((u64)(0x0131cfd3999f7afbU)),}, (strconv__Uint128){.lo = ((u64)(0x59c08e14c7cd7aadU)),.hi = ((u64)(0x017e43c8800759baU)),}, (strconv__Uint128){.lo = ((u64)(0xf030b199f9c0d958U)),.hi = ((u64)(0x01ddd4baa0093028U)),}, (strconv__Uint128){.lo = ((u64)(0x961e6f003c1887d7U)),.hi = ((u64)(0x012aa4f4a405be19U)),}, (strconv__Uint128){.lo = ((u64)(0xfba60ac04b1ea9cdU)),.hi = ((u64)(0x01754e31cd072d9fU)),}, (strconv__Uint128){.lo = ((u64)(0xfa8f8d705de65440U)),.hi = ((u64)(0x01d2a1be4048f907U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xfc99b8663aaff4a8U)),.hi = ((u64)(0x0123a516e82d9ba4U)),}, (strconv__Uint128){.lo = ((u64)(0x3bc0267fc95bf1d2U)),.hi = ((u64)(0x016c8e5ca239028eU)),}, (strconv__Uint128){.lo = ((u64)(0xcab0301fbbb2ee47U)),.hi = ((u64)(0x01c7b1f3cac74331U)),}, (strconv__Uint128){.lo = ((u64)(0x1eae1e13d54fd4ecU)),.hi = ((u64)(0x011ccf385ebc89ffU)),}, (strconv__Uint128){.lo = ((u64)(0xe659a598caa3ca27U)),.hi = ((u64)(0x01640306766bac7eU)),}, (strconv__Uint128){.lo = ((u64)(0x9ff00efefd4cbcb1U)),.hi = ((u64)(0x01bd03c81406979eU)),}, (strconv__Uint128){.lo = ((u64)(0x23f6095f5e4ff5efU)),.hi = ((u64)(0x0116225d0c841ec3U)),}, (strconv__Uint128){.lo = ((u64)(0xecf38bb735e3f36aU)),.hi = ((u64)(0x015baaf44fa52673U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xe8306ea5035cf045U)),.hi = ((u64)(0x01b295b1638e7010U)),}, (strconv__Uint128){.lo = ((u64)(0x911e4527221a162bU)),.hi = ((u64)(0x010f9d8ede39060aU)),}, (strconv__Uint128){.lo = ((u64)(0x3565d670eaa09bb6U)),.hi = ((u64)(0x015384f295c7478dU)),}, (strconv__Uint128){.lo = ((u64)(0x82bf4c0d2548c2a3U)),.hi = ((u64)(0x01a8662f3b391970U)),}, (strconv__Uint128){.lo = ((u64)(0x51b78f88374d79a6U)),.hi = ((u64)(0x01093fdd8503afe6U)),}, (strconv__Uint128){.lo = ((u64)(0xe625736a4520d810U)),.hi = ((u64)(0x014b8fd4e6449bdfU)),}, (strconv__Uint128){.lo = ((u64)(0xdfaed044d6690e14U)),.hi = ((u64)(0x019e73ca1fd5c2d7U)),}, (strconv__Uint128){.lo = ((u64)(0xebcd422b0601a8ccU)),.hi = ((u64)(0x0103085e53e599c6U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xa6c092b5c78212ffU)),.hi = ((u64)(0x0143ca75e8df0038U)),}, (strconv__Uint128){.lo = ((u64)(0xd070b763396297bfU)),.hi = ((u64)(0x0194bd136316c046U)),}, (strconv__Uint128){.lo = ((u64)(0x848ce53c07bb3dafU)),.hi = ((u64)(0x01f9ec583bdc7058U)),}, (strconv__Uint128){.lo = ((u64)(0x52d80f4584d5068dU)),.hi = ((u64)(0x013c33b72569c637U)),}, (strconv__Uint128){.lo = ((u64)(0x278e1316e60a4831U)),.hi = ((u64)(0x018b40a4eec437c5U)),}})); | |
_const_strconv__pow5_inv_split_64 = new_array_from_c_array(292, 292, sizeof(strconv__Uint128), _MOV((strconv__Uint128[292]){ | |
(strconv__Uint128){.lo = ((u64)(0x0000000000000001U)),.hi = ((u64)(0x0400000000000000U)),}, (strconv__Uint128){.lo = ((u64)(0x3333333333333334U)),.hi = ((u64)(0x0333333333333333U)),}, (strconv__Uint128){.lo = ((u64)(0x28f5c28f5c28f5c3U)),.hi = ((u64)(0x028f5c28f5c28f5cU)),}, (strconv__Uint128){.lo = ((u64)(0xed916872b020c49cU)),.hi = ((u64)(0x020c49ba5e353f7cU)),}, (strconv__Uint128){.lo = ((u64)(0xaf4f0d844d013a93U)),.hi = ((u64)(0x0346dc5d63886594U)),}, (strconv__Uint128){.lo = ((u64)(0x8c3f3e0370cdc876U)),.hi = ((u64)(0x029f16b11c6d1e10U)),}, (strconv__Uint128){.lo = ((u64)(0xd698fe69270b06c5U)),.hi = ((u64)(0x0218def416bdb1a6U)),}, (strconv__Uint128){.lo = ((u64)(0xf0f4ca41d811a46eU)),.hi = ((u64)(0x035afe535795e90aU)),}, (strconv__Uint128){.lo = ((u64)(0xf3f70834acdae9f1U)),.hi = ((u64)(0x02af31dc4611873bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x5cc5a02a23e254c1U)),.hi = ((u64)(0x0225c17d04dad296U)),}, (strconv__Uint128){.lo = ((u64)(0xfad5cd10396a2135U)),.hi = ((u64)(0x036f9bfb3af7b756U)),}, (strconv__Uint128){.lo = ((u64)(0xfbde3da69454e75eU)),.hi = ((u64)(0x02bfaffc2f2c92abU)),}, (strconv__Uint128){.lo = ((u64)(0x2fe4fe1edd10b918U)),.hi = ((u64)(0x0232f33025bd4223U)),}, (strconv__Uint128){.lo = ((u64)(0x4ca19697c81ac1bfU)),.hi = ((u64)(0x0384b84d092ed038U)),}, (strconv__Uint128){.lo = ((u64)(0x3d4e1213067bce33U)),.hi = ((u64)(0x02d09370d4257360U)),}, (strconv__Uint128){.lo = ((u64)(0x643e74dc052fd829U)),.hi = ((u64)(0x024075f3dceac2b3U)),}, (strconv__Uint128){.lo = ((u64)(0x6d30baf9a1e626a7U)),.hi = ((u64)(0x039a5652fb113785U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x2426fbfae7eb5220U)),.hi = ((u64)(0x02e1dea8c8da92d1U)),}, (strconv__Uint128){.lo = ((u64)(0x1cebfcc8b9890e80U)),.hi = ((u64)(0x024e4bba3a487574U)),}, (strconv__Uint128){.lo = ((u64)(0x94acc7a78f41b0ccU)),.hi = ((u64)(0x03b07929f6da5586U)),}, (strconv__Uint128){.lo = ((u64)(0xaa23d2ec729af3d7U)),.hi = ((u64)(0x02f394219248446bU)),}, (strconv__Uint128){.lo = ((u64)(0xbb4fdbf05baf2979U)),.hi = ((u64)(0x025c768141d369efU)),}, (strconv__Uint128){.lo = ((u64)(0xc54c931a2c4b758dU)),.hi = ((u64)(0x03c7240202ebdcb2U)),}, (strconv__Uint128){.lo = ((u64)(0x9dd6dc14f03c5e0bU)),.hi = ((u64)(0x0305b66802564a28U)),}, (strconv__Uint128){.lo = ((u64)(0x4b1249aa59c9e4d6U)),.hi = ((u64)(0x026af8533511d4edU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x44ea0f76f60fd489U)),.hi = ((u64)(0x03de5a1ebb4fbb15U)),}, (strconv__Uint128){.lo = ((u64)(0x6a54d92bf80caa07U)),.hi = ((u64)(0x0318481895d96277U)),}, (strconv__Uint128){.lo = ((u64)(0x21dd7a89933d54d2U)),.hi = ((u64)(0x0279d346de4781f9U)),}, (strconv__Uint128){.lo = ((u64)(0x362f2a75b8622150U)),.hi = ((u64)(0x03f61ed7ca0c0328U)),}, (strconv__Uint128){.lo = ((u64)(0xf825bb91604e810dU)),.hi = ((u64)(0x032b4bdfd4d668ecU)),}, (strconv__Uint128){.lo = ((u64)(0xc684960de6a5340bU)),.hi = ((u64)(0x0289097fdd7853f0U)),}, (strconv__Uint128){.lo = ((u64)(0xd203ab3e521dc33cU)),.hi = ((u64)(0x02073accb12d0ff3U)),}, (strconv__Uint128){.lo = ((u64)(0xe99f7863b696052cU)),.hi = ((u64)(0x033ec47ab514e652U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x87b2c6b62bab3757U)),.hi = ((u64)(0x02989d2ef743eb75U)),}, (strconv__Uint128){.lo = ((u64)(0xd2f56bc4efbc2c45U)),.hi = ((u64)(0x0213b0f25f69892aU)),}, (strconv__Uint128){.lo = ((u64)(0x1e55793b192d13a2U)),.hi = ((u64)(0x0352b4b6ff0f41deU)),}, (strconv__Uint128){.lo = ((u64)(0x4b77942f475742e8U)),.hi = ((u64)(0x02a8909265a5ce4bU)),}, (strconv__Uint128){.lo = ((u64)(0xd5f9435905df68baU)),.hi = ((u64)(0x022073a8515171d5U)),}, (strconv__Uint128){.lo = ((u64)(0x565b9ef4d6324129U)),.hi = ((u64)(0x03671f73b54f1c89U)),}, (strconv__Uint128){.lo = ((u64)(0xdeafb25d78283421U)),.hi = ((u64)(0x02b8e5f62aa5b06dU)),}, (strconv__Uint128){.lo = ((u64)(0x188c8eb12cecf681U)),.hi = ((u64)(0x022d84c4eeeaf38bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8dadb11b7b14bd9bU)),.hi = ((u64)(0x037c07a17e44b8deU)),}, (strconv__Uint128){.lo = ((u64)(0x7157c0e2c8dd647cU)),.hi = ((u64)(0x02c99fb46503c718U)),}, (strconv__Uint128){.lo = ((u64)(0x8ddfcd823a4ab6caU)),.hi = ((u64)(0x023ae629ea696c13U)),}, (strconv__Uint128){.lo = ((u64)(0x1632e269f6ddf142U)),.hi = ((u64)(0x0391704310a8acecU)),}, (strconv__Uint128){.lo = ((u64)(0x44f581ee5f17f435U)),.hi = ((u64)(0x02dac035a6ed5723U)),}, (strconv__Uint128){.lo = ((u64)(0x372ace584c1329c4U)),.hi = ((u64)(0x024899c4858aac1cU)),}, (strconv__Uint128){.lo = ((u64)(0xbeaae3c079b842d3U)),.hi = ((u64)(0x03a75c6da27779c6U)),}, (strconv__Uint128){.lo = ((u64)(0x6555830061603576U)),.hi = ((u64)(0x02ec49f14ec5fb05U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xb7779c004de6912bU)),.hi = ((u64)(0x0256a18dd89e626aU)),}, (strconv__Uint128){.lo = ((u64)(0xf258f99a163db512U)),.hi = ((u64)(0x03bdcf495a9703ddU)),}, (strconv__Uint128){.lo = ((u64)(0x5b7a614811caf741U)),.hi = ((u64)(0x02fe3f6de212697eU)),}, (strconv__Uint128){.lo = ((u64)(0xaf951aa00e3bf901U)),.hi = ((u64)(0x0264ff8b1b41edfeU)),}, (strconv__Uint128){.lo = ((u64)(0x7f54f7667d2cc19bU)),.hi = ((u64)(0x03d4cc11c5364997U)),}, (strconv__Uint128){.lo = ((u64)(0x32aa5f8530f09ae3U)),.hi = ((u64)(0x0310a3416a91d479U)),}, (strconv__Uint128){.lo = ((u64)(0xf55519375a5a1582U)),.hi = ((u64)(0x0273b5cdeedb1060U)),}, (strconv__Uint128){.lo = ((u64)(0xbbbb5b8bc3c3559dU)),.hi = ((u64)(0x03ec56164af81a34U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x2fc916096969114aU)),.hi = ((u64)(0x03237811d593482aU)),}, (strconv__Uint128){.lo = ((u64)(0x596dab3ababa743cU)),.hi = ((u64)(0x0282c674aadc39bbU)),}, (strconv__Uint128){.lo = ((u64)(0x478aef622efb9030U)),.hi = ((u64)(0x0202385d557cfafcU)),}, (strconv__Uint128){.lo = ((u64)(0xd8de4bd04b2c19e6U)),.hi = ((u64)(0x0336c0955594c4c6U)),}, (strconv__Uint128){.lo = ((u64)(0xad7ea30d08f014b8U)),.hi = ((u64)(0x029233aaaadd6a38U)),}, (strconv__Uint128){.lo = ((u64)(0x24654f3da0c01093U)),.hi = ((u64)(0x020e8fbbbbe454faU)),}, (strconv__Uint128){.lo = ((u64)(0x3a3bb1fc346680ebU)),.hi = ((u64)(0x034a7f92c63a2190U)),}, (strconv__Uint128){.lo = ((u64)(0x94fc8e635d1ecd89U)),.hi = ((u64)(0x02a1ffa89e94e7a6U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xaa63a51c4a7f0ad4U)),.hi = ((u64)(0x021b32ed4baa52ebU)),}, (strconv__Uint128){.lo = ((u64)(0xdd6c3b607731aaedU)),.hi = ((u64)(0x035eb7e212aa1e45U)),}, (strconv__Uint128){.lo = ((u64)(0x1789c919f8f488bdU)),.hi = ((u64)(0x02b22cb4dbbb4b6bU)),}, (strconv__Uint128){.lo = ((u64)(0xac6e3a7b2d906d64U)),.hi = ((u64)(0x022823c3e2fc3c55U)),}, (strconv__Uint128){.lo = ((u64)(0x13e390c515b3e23aU)),.hi = ((u64)(0x03736c6c9e606089U)),}, (strconv__Uint128){.lo = ((u64)(0xdcb60d6a77c31b62U)),.hi = ((u64)(0x02c2bd23b1e6b3a0U)),}, (strconv__Uint128){.lo = ((u64)(0x7d5e7121f968e2b5U)),.hi = ((u64)(0x0235641c8e52294dU)),}, (strconv__Uint128){.lo = ((u64)(0xc8971b698f0e3787U)),.hi = ((u64)(0x0388a02db0837548U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xa078e2bad8d82c6cU)),.hi = ((u64)(0x02d3b357c0692aa0U)),}, (strconv__Uint128){.lo = ((u64)(0xe6c71bc8ad79bd24U)),.hi = ((u64)(0x0242f5dfcd20eee6U)),}, (strconv__Uint128){.lo = ((u64)(0x0ad82c7448c2c839U)),.hi = ((u64)(0x039e5632e1ce4b0bU)),}, (strconv__Uint128){.lo = ((u64)(0x3be023903a356cfaU)),.hi = ((u64)(0x02e511c24e3ea26fU)),}, (strconv__Uint128){.lo = ((u64)(0x2fe682d9c82abd95U)),.hi = ((u64)(0x0250db01d8321b8cU)),}, (strconv__Uint128){.lo = ((u64)(0x4ca4048fa6aac8eeU)),.hi = ((u64)(0x03b4919c8d1cf8e0U)),}, (strconv__Uint128){.lo = ((u64)(0x3d5003a61eef0725U)),.hi = ((u64)(0x02f6dae3a4172d80U)),}, (strconv__Uint128){.lo = ((u64)(0x9773361e7f259f51U)),.hi = ((u64)(0x025f1582e9ac2466U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8beb89ca6508fee8U)),.hi = ((u64)(0x03cb559e42ad070aU)),}, (strconv__Uint128){.lo = ((u64)(0x6fefa16eb73a6586U)),.hi = ((u64)(0x0309114b688a6c08U)),}, (strconv__Uint128){.lo = ((u64)(0xf3261abef8fb846bU)),.hi = ((u64)(0x026da76f86d52339U)),}, (strconv__Uint128){.lo = ((u64)(0x51d691318e5f3a45U)),.hi = ((u64)(0x03e2a57f3e21d1f6U)),}, (strconv__Uint128){.lo = ((u64)(0x0e4540f471e5c837U)),.hi = ((u64)(0x031bb798fe8174c5U)),}, (strconv__Uint128){.lo = ((u64)(0xd8376729f4b7d360U)),.hi = ((u64)(0x027c92e0cb9ac3d0U)),}, (strconv__Uint128){.lo = ((u64)(0xf38bd84321261effU)),.hi = ((u64)(0x03fa849adf5e061aU)),}, (strconv__Uint128){.lo = ((u64)(0x293cad0280eb4bffU)),.hi = ((u64)(0x032ed07be5e4d1afU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xedca240200bc3cccU)),.hi = ((u64)(0x028bd9fcb7ea4158U)),}, (strconv__Uint128){.lo = ((u64)(0xbe3b50019a3030a4U)),.hi = ((u64)(0x02097b309321cde0U)),}, (strconv__Uint128){.lo = ((u64)(0xc9f88002904d1a9fU)),.hi = ((u64)(0x03425eb41e9c7c9aU)),}, (strconv__Uint128){.lo = ((u64)(0x3b2d3335403daee6U)),.hi = ((u64)(0x029b7ef67ee396e2U)),}, (strconv__Uint128){.lo = ((u64)(0x95bdc291003158b8U)),.hi = ((u64)(0x0215ff2b98b6124eU)),}, (strconv__Uint128){.lo = ((u64)(0x892f9db4cd1bc126U)),.hi = ((u64)(0x035665128df01d4aU)),}, (strconv__Uint128){.lo = ((u64)(0x07594af70a7c9a85U)),.hi = ((u64)(0x02ab840ed7f34aa2U)),}, (strconv__Uint128){.lo = ((u64)(0x6c476f2c0863aed1U)),.hi = ((u64)(0x0222d00bdff5d54eU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x13a57eacda3917b4U)),.hi = ((u64)(0x036ae67966562217U)),}, (strconv__Uint128){.lo = ((u64)(0x0fb7988a482dac90U)),.hi = ((u64)(0x02bbeb9451de81acU)),}, (strconv__Uint128){.lo = ((u64)(0xd95fad3b6cf156daU)),.hi = ((u64)(0x022fefa9db1867bcU)),}, (strconv__Uint128){.lo = ((u64)(0xf565e1f8ae4ef15cU)),.hi = ((u64)(0x037fe5dc91c0a5faU)),}, (strconv__Uint128){.lo = ((u64)(0x911e4e608b725ab0U)),.hi = ((u64)(0x02ccb7e3a7cd5195U)),}, (strconv__Uint128){.lo = ((u64)(0xda7ea51a0928488dU)),.hi = ((u64)(0x023d5fe9530aa7aaU)),}, (strconv__Uint128){.lo = ((u64)(0xf7310829a8407415U)),.hi = ((u64)(0x039566421e7772aaU)),}, (strconv__Uint128){.lo = ((u64)(0x2c2739baed005cdeU)),.hi = ((u64)(0x02ddeb68185f8eefU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xbcec2e2f24004a4bU)),.hi = ((u64)(0x024b22b9ad193f25U)),}, (strconv__Uint128){.lo = ((u64)(0x94ad16b1d333aa11U)),.hi = ((u64)(0x03ab6ac2ae8ecb6fU)),}, (strconv__Uint128){.lo = ((u64)(0xaa241227dc2954dbU)),.hi = ((u64)(0x02ef889bbed8a2bfU)),}, (strconv__Uint128){.lo = ((u64)(0x54e9a81fe35443e2U)),.hi = ((u64)(0x02593a163246e899U)),}, (strconv__Uint128){.lo = ((u64)(0x2175d9cc9eed396aU)),.hi = ((u64)(0x03c1f689ea0b0dc2U)),}, (strconv__Uint128){.lo = ((u64)(0xe7917b0a18bdc788U)),.hi = ((u64)(0x03019207ee6f3e34U)),}, (strconv__Uint128){.lo = ((u64)(0xb9412f3b46fe393aU)),.hi = ((u64)(0x0267a8065858fe90U)),}, (strconv__Uint128){.lo = ((u64)(0xf535185ed7fd285cU)),.hi = ((u64)(0x03d90cd6f3c1974dU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xc42a79e57997537dU)),.hi = ((u64)(0x03140a458fce12a4U)),}, (strconv__Uint128){.lo = ((u64)(0x03552e512e12a931U)),.hi = ((u64)(0x02766e9e0ca4dbb7U)),}, (strconv__Uint128){.lo = ((u64)(0x9eeeb081e3510eb4U)),.hi = ((u64)(0x03f0b0fce107c5f1U)),}, (strconv__Uint128){.lo = ((u64)(0x4bf226ce4f740bc3U)),.hi = ((u64)(0x0326f3fd80d304c1U)),}, (strconv__Uint128){.lo = ((u64)(0xa3281f0b72c33c9cU)),.hi = ((u64)(0x02858ffe00a8d09aU)),}, (strconv__Uint128){.lo = ((u64)(0x1c2018d5f568fd4aU)),.hi = ((u64)(0x020473319a20a6e2U)),}, (strconv__Uint128){.lo = ((u64)(0xf9ccf48988a7fba9U)),.hi = ((u64)(0x033a51e8f69aa49cU)),}, (strconv__Uint128){.lo = ((u64)(0xfb0a5d3ad3b99621U)),.hi = ((u64)(0x02950e53f87bb6e3U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x2f3b7dc8a96144e7U)),.hi = ((u64)(0x0210d8432d2fc583U)),}, (strconv__Uint128){.lo = ((u64)(0xe52bfc7442353b0cU)),.hi = ((u64)(0x034e26d1e1e608d1U)),}, (strconv__Uint128){.lo = ((u64)(0xb756639034f76270U)),.hi = ((u64)(0x02a4ebdb1b1e6d74U)),}, (strconv__Uint128){.lo = ((u64)(0x2c451c735d92b526U)),.hi = ((u64)(0x021d897c15b1f12aU)),}, (strconv__Uint128){.lo = ((u64)(0x13a1c71efc1deea3U)),.hi = ((u64)(0x0362759355e981ddU)),}, (strconv__Uint128){.lo = ((u64)(0x761b05b2634b2550U)),.hi = ((u64)(0x02b52adc44bace4aU)),}, (strconv__Uint128){.lo = ((u64)(0x91af37c1e908eaa6U)),.hi = ((u64)(0x022a88b036fbd83bU)),}, (strconv__Uint128){.lo = ((u64)(0x82b1f2cfdb417770U)),.hi = ((u64)(0x03774119f192f392U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xcef4c23fe29ac5f3U)),.hi = ((u64)(0x02c5cdae5adbf60eU)),}, (strconv__Uint128){.lo = ((u64)(0x3f2a34ffe87bd190U)),.hi = ((u64)(0x0237d7beaf165e72U)),}, (strconv__Uint128){.lo = ((u64)(0x984387ffda5fb5b2U)),.hi = ((u64)(0x038c8c644b56fd83U)),}, (strconv__Uint128){.lo = ((u64)(0xe0360666484c915bU)),.hi = ((u64)(0x02d6d6b6a2abfe02U)),}, (strconv__Uint128){.lo = ((u64)(0x802b3851d3707449U)),.hi = ((u64)(0x024578921bbccb35U)),}, (strconv__Uint128){.lo = ((u64)(0x99dec082ebe72075U)),.hi = ((u64)(0x03a25a835f947855U)),}, (strconv__Uint128){.lo = ((u64)(0xae4bcd358985b391U)),.hi = ((u64)(0x02e8486919439377U)),}, (strconv__Uint128){.lo = ((u64)(0xbea30a913ad15c74U)),.hi = ((u64)(0x02536d20e102dc5fU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xfdd1aa81f7b560b9U)),.hi = ((u64)(0x03b8ae9b019e2d65U)),}, (strconv__Uint128){.lo = ((u64)(0x97daeece5fc44d61U)),.hi = ((u64)(0x02fa2548ce182451U)),}, (strconv__Uint128){.lo = ((u64)(0xdfe258a51969d781U)),.hi = ((u64)(0x0261b76d71ace9daU)),}, (strconv__Uint128){.lo = ((u64)(0x996a276e8f0fbf34U)),.hi = ((u64)(0x03cf8be24f7b0fc4U)),}, (strconv__Uint128){.lo = ((u64)(0xe121b9253f3fcc2aU)),.hi = ((u64)(0x030c6fe83f95a636U)),}, (strconv__Uint128){.lo = ((u64)(0xb41afa8432997022U)),.hi = ((u64)(0x02705986994484f8U)),}, (strconv__Uint128){.lo = ((u64)(0xecf7f739ea8f19cfU)),.hi = ((u64)(0x03e6f5a4286da18dU)),}, (strconv__Uint128){.lo = ((u64)(0x23f99294bba5ae40U)),.hi = ((u64)(0x031f2ae9b9f14e0bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x4ffadbaa2fb7be99U)),.hi = ((u64)(0x027f5587c7f43e6fU)),}, (strconv__Uint128){.lo = ((u64)(0x7ff7c5dd1925fdc2U)),.hi = ((u64)(0x03feef3fa6539718U)),}, (strconv__Uint128){.lo = ((u64)(0xccc637e4141e649bU)),.hi = ((u64)(0x033258ffb842df46U)),}, (strconv__Uint128){.lo = ((u64)(0xd704f983434b83afU)),.hi = ((u64)(0x028ead9960357f6bU)),}, (strconv__Uint128){.lo = ((u64)(0x126a6135cf6f9c8cU)),.hi = ((u64)(0x020bbe144cf79923U)),}, (strconv__Uint128){.lo = ((u64)(0x83dd685618b29414U)),.hi = ((u64)(0x0345fced47f28e9eU)),}, (strconv__Uint128){.lo = ((u64)(0x9cb12044e08edcddU)),.hi = ((u64)(0x029e63f1065ba54bU)),}, (strconv__Uint128){.lo = ((u64)(0x16f419d0b3a57d7dU)),.hi = ((u64)(0x02184ff405161dd6U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8b20294dec3bfbfbU)),.hi = ((u64)(0x035a19866e89c956U)),}, (strconv__Uint128){.lo = ((u64)(0x3c19baa4bcfcc996U)),.hi = ((u64)(0x02ae7ad1f207d445U)),}, (strconv__Uint128){.lo = ((u64)(0xc9ae2eea30ca3adfU)),.hi = ((u64)(0x02252f0e5b39769dU)),}, (strconv__Uint128){.lo = ((u64)(0x0f7d17dd1add2afdU)),.hi = ((u64)(0x036eb1b091f58a96U)),}, (strconv__Uint128){.lo = ((u64)(0x3f97464a7be42264U)),.hi = ((u64)(0x02bef48d41913babU)),}, (strconv__Uint128){.lo = ((u64)(0xcc790508631ce850U)),.hi = ((u64)(0x02325d3dce0dc955U)),}, (strconv__Uint128){.lo = ((u64)(0xe0c1a1a704fb0d4dU)),.hi = ((u64)(0x0383c862e3494222U)),}, (strconv__Uint128){.lo = ((u64)(0x4d67b4859d95a43eU)),.hi = ((u64)(0x02cfd3824f6dce82U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x711fc39e17aae9cbU)),.hi = ((u64)(0x023fdc683f8b0b9bU)),}, (strconv__Uint128){.lo = ((u64)(0xe832d2968c44a945U)),.hi = ((u64)(0x039960a6cc11ac2bU)),}, (strconv__Uint128){.lo = ((u64)(0xecf575453d03ba9eU)),.hi = ((u64)(0x02e11a1f09a7bcefU)),}, (strconv__Uint128){.lo = ((u64)(0x572ac4376402fbb1U)),.hi = ((u64)(0x024dae7f3aec9726U)),}, (strconv__Uint128){.lo = ((u64)(0x58446d256cd192b5U)),.hi = ((u64)(0x03af7d985e47583dU)),}, (strconv__Uint128){.lo = ((u64)(0x79d0575123dadbc4U)),.hi = ((u64)(0x02f2cae04b6c4697U)),}, (strconv__Uint128){.lo = ((u64)(0x94a6ac40e97be303U)),.hi = ((u64)(0x025bd5803c569edfU)),}, (strconv__Uint128){.lo = ((u64)(0x8771139b0f2c9e6cU)),.hi = ((u64)(0x03c62266c6f0fe32U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x9f8da948d8f07ebdU)),.hi = ((u64)(0x0304e85238c0cb5bU)),}, (strconv__Uint128){.lo = ((u64)(0xe60aedd3e0c06564U)),.hi = ((u64)(0x026a5374fa33d5e2U)),}, (strconv__Uint128){.lo = ((u64)(0xa344afb9679a3bd2U)),.hi = ((u64)(0x03dd5254c3862304U)),}, (strconv__Uint128){.lo = ((u64)(0xe903bfc78614fca8U)),.hi = ((u64)(0x031775109c6b4f36U)),}, (strconv__Uint128){.lo = ((u64)(0xba6966393810ca20U)),.hi = ((u64)(0x02792a73b055d8f8U)),}, (strconv__Uint128){.lo = ((u64)(0x2a423d2859b4769aU)),.hi = ((u64)(0x03f510b91a22f4c1U)),}, (strconv__Uint128){.lo = ((u64)(0xee9b642047c39215U)),.hi = ((u64)(0x032a73c7481bf700U)),}, (strconv__Uint128){.lo = ((u64)(0xbee2b680396941aaU)),.hi = ((u64)(0x02885c9f6ce32c00U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xff1bc53361210155U)),.hi = ((u64)(0x0206b07f8a4f5666U)),}, (strconv__Uint128){.lo = ((u64)(0x31c6085235019bbbU)),.hi = ((u64)(0x033de73276e5570bU)),}, (strconv__Uint128){.lo = ((u64)(0x27d1a041c4014963U)),.hi = ((u64)(0x0297ec285f1ddf3cU)),}, (strconv__Uint128){.lo = ((u64)(0xeca7b367d0010782U)),.hi = ((u64)(0x021323537f4b18fcU)),}, (strconv__Uint128){.lo = ((u64)(0xadd91f0c8001a59dU)),.hi = ((u64)(0x0351d21f3211c194U)),}, (strconv__Uint128){.lo = ((u64)(0xf17a7f3d3334847eU)),.hi = ((u64)(0x02a7db4c280e3476U)),}, (strconv__Uint128){.lo = ((u64)(0x279532975c2a0398U)),.hi = ((u64)(0x021fe2a3533e905fU)),}, (strconv__Uint128){.lo = ((u64)(0xd8eeb75893766c26U)),.hi = ((u64)(0x0366376bb8641a31U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x7a5892ad42c52352U)),.hi = ((u64)(0x02b82c562d1ce1c1U)),}, (strconv__Uint128){.lo = ((u64)(0xfb7a0ef102374f75U)),.hi = ((u64)(0x022cf044f0e3e7cdU)),}, (strconv__Uint128){.lo = ((u64)(0xc59017e8038bb254U)),.hi = ((u64)(0x037b1a07e7d30c7cU)),}, (strconv__Uint128){.lo = ((u64)(0x37a67986693c8eaaU)),.hi = ((u64)(0x02c8e19feca8d6caU)),}, (strconv__Uint128){.lo = ((u64)(0xf951fad1edca0bbbU)),.hi = ((u64)(0x023a4e198a20abd4U)),}, (strconv__Uint128){.lo = ((u64)(0x28832ae97c76792bU)),.hi = ((u64)(0x03907cf5a9cddfbbU)),}, (strconv__Uint128){.lo = ((u64)(0x2068ef21305ec756U)),.hi = ((u64)(0x02d9fd9154a4b2fcU)),}, (strconv__Uint128){.lo = ((u64)(0x19ed8c1a8d189f78U)),.hi = ((u64)(0x0247fe0ddd508f30U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x5caf4690e1c0ff26U)),.hi = ((u64)(0x03a66349621a7eb3U)),}, (strconv__Uint128){.lo = ((u64)(0x4a25d20d81673285U)),.hi = ((u64)(0x02eb82a11b48655cU)),}, (strconv__Uint128){.lo = ((u64)(0x3b5174d79ab8f537U)),.hi = ((u64)(0x0256021a7c39eab0U)),}, (strconv__Uint128){.lo = ((u64)(0x921bee25c45b21f1U)),.hi = ((u64)(0x03bcd02a605caab3U)),}, (strconv__Uint128){.lo = ((u64)(0xdb498b5169e2818eU)),.hi = ((u64)(0x02fd735519e3bbc2U)),}, (strconv__Uint128){.lo = ((u64)(0x15d46f7454b53472U)),.hi = ((u64)(0x02645c4414b62fcfU)),}, (strconv__Uint128){.lo = ((u64)(0xefba4bed545520b6U)),.hi = ((u64)(0x03d3c6d35456b2e4U)),}, (strconv__Uint128){.lo = ((u64)(0xf2fb6ff110441a2bU)),.hi = ((u64)(0x030fd242a9def583U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8f2f8cc0d9d014efU)),.hi = ((u64)(0x02730e9bbb18c469U)),}, (strconv__Uint128){.lo = ((u64)(0xb1e5ae015c80217fU)),.hi = ((u64)(0x03eb4a92c4f46d75U)),}, (strconv__Uint128){.lo = ((u64)(0xc1848b344a001accU)),.hi = ((u64)(0x0322a20f03f6bdf7U)),}, (strconv__Uint128){.lo = ((u64)(0xce03a2903b3348a3U)),.hi = ((u64)(0x02821b3f365efe5fU)),}, (strconv__Uint128){.lo = ((u64)(0xd802e873628f6d4fU)),.hi = ((u64)(0x0201af65c518cb7fU)),}, (strconv__Uint128){.lo = ((u64)(0x599e40b89db2487fU)),.hi = ((u64)(0x0335e56fa1c14599U)),}, (strconv__Uint128){.lo = ((u64)(0xe14b66fa17c1d399U)),.hi = ((u64)(0x029184594e3437adU)),}, (strconv__Uint128){.lo = ((u64)(0x81091f2e7967dc7aU)),.hi = ((u64)(0x020e037aa4f692f1U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x9b41cb7d8f0c93f6U)),.hi = ((u64)(0x03499f2aa18a84b5U)),}, (strconv__Uint128){.lo = ((u64)(0xaf67d5fe0c0a0ff8U)),.hi = ((u64)(0x02a14c221ad536f7U)),}, (strconv__Uint128){.lo = ((u64)(0xf2b977fe70080cc7U)),.hi = ((u64)(0x021aa34e7bddc592U)),}, (strconv__Uint128){.lo = ((u64)(0x1df58cca4cd9ae0bU)),.hi = ((u64)(0x035dd2172c9608ebU)),}, (strconv__Uint128){.lo = ((u64)(0xe4c470a1d7148b3cU)),.hi = ((u64)(0x02b174df56de6d88U)),}, (strconv__Uint128){.lo = ((u64)(0x83d05a1b1276d5caU)),.hi = ((u64)(0x022790b2abe5246dU)),}, (strconv__Uint128){.lo = ((u64)(0x9fb3c35e83f1560fU)),.hi = ((u64)(0x0372811ddfd50715U)),}, (strconv__Uint128){.lo = ((u64)(0xb2f635e5365aab3fU)),.hi = ((u64)(0x02c200e4b310d277U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xf591c4b75eaeef66U)),.hi = ((u64)(0x0234cd83c273db92U)),}, (strconv__Uint128){.lo = ((u64)(0xef4fa125644b18a3U)),.hi = ((u64)(0x0387af39371fc5b7U)),}, (strconv__Uint128){.lo = ((u64)(0x8c3fb41de9d5ad4fU)),.hi = ((u64)(0x02d2f2942c196af9U)),}, (strconv__Uint128){.lo = ((u64)(0x3cffc34b2177bdd9U)),.hi = ((u64)(0x02425ba9bce12261U)),}, (strconv__Uint128){.lo = ((u64)(0x94cc6bab68bf9628U)),.hi = ((u64)(0x039d5f75fb01d09bU)),}, (strconv__Uint128){.lo = ((u64)(0x10a38955ed6611b9U)),.hi = ((u64)(0x02e44c5e6267da16U)),}, (strconv__Uint128){.lo = ((u64)(0xda1c6dde5784dafbU)),.hi = ((u64)(0x02503d184eb97b44U)),}, (strconv__Uint128){.lo = ((u64)(0xf693e2fd58d49191U)),.hi = ((u64)(0x03b394f3b128c53aU)),}, | |
(strconv__Uint128){.lo = ((u64)(0xc5431bfde0aa0e0eU)),.hi = ((u64)(0x02f610c2f4209dc8U)),}, (strconv__Uint128){.lo = ((u64)(0x6a9c1664b3bb3e72U)),.hi = ((u64)(0x025e73cf29b3b16dU)),}, (strconv__Uint128){.lo = ((u64)(0x10f9bd6dec5eca4fU)),.hi = ((u64)(0x03ca52e50f85e8afU)),}, (strconv__Uint128){.lo = ((u64)(0xda616457f04bd50cU)),.hi = ((u64)(0x03084250d937ed58U)),}, (strconv__Uint128){.lo = ((u64)(0xe1e783798d09773dU)),.hi = ((u64)(0x026d01da475ff113U)),}, (strconv__Uint128){.lo = ((u64)(0x030c058f480f252eU)),.hi = ((u64)(0x03e19c9072331b53U)),}, (strconv__Uint128){.lo = ((u64)(0x68d66ad906728425U)),.hi = ((u64)(0x031ae3a6c1c27c42U)),}, (strconv__Uint128){.lo = ((u64)(0x8711ef14052869b7U)),.hi = ((u64)(0x027be952349b969bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x0b4fe4ecd50d75f2U)),.hi = ((u64)(0x03f97550542c242cU)),}, (strconv__Uint128){.lo = ((u64)(0xa2a650bd773df7f5U)),.hi = ((u64)(0x032df7737689b689U)),}, (strconv__Uint128){.lo = ((u64)(0xb551da312c31932aU)),.hi = ((u64)(0x028b2c5c5ed49207U)),}, (strconv__Uint128){.lo = ((u64)(0x5ddb14f4235adc22U)),.hi = ((u64)(0x0208f049e576db39U)),}, (strconv__Uint128){.lo = ((u64)(0x2fc4ee536bc49369U)),.hi = ((u64)(0x034180763bf15ec2U)),}, (strconv__Uint128){.lo = ((u64)(0xbfd0bea92303a921U)),.hi = ((u64)(0x029acd2b63277f01U)),}, (strconv__Uint128){.lo = ((u64)(0x9973cbba8269541aU)),.hi = ((u64)(0x021570ef8285ff34U)),}, (strconv__Uint128){.lo = ((u64)(0x5bec792a6a42202aU)),.hi = ((u64)(0x0355817f373ccb87U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xe3239421ee9b4cefU)),.hi = ((u64)(0x02aacdff5f63d605U)),}, (strconv__Uint128){.lo = ((u64)(0xb5b6101b25490a59U)),.hi = ((u64)(0x02223e65e5e97804U)),}, (strconv__Uint128){.lo = ((u64)(0x22bce691d541aa27U)),.hi = ((u64)(0x0369fd6fd64259a1U)),}, (strconv__Uint128){.lo = ((u64)(0xb563eba7ddce21b9U)),.hi = ((u64)(0x02bb31264501e14dU)),}, (strconv__Uint128){.lo = ((u64)(0xf78322ecb171b494U)),.hi = ((u64)(0x022f5a850401810aU)),}, (strconv__Uint128){.lo = ((u64)(0x259e9e47824f8753U)),.hi = ((u64)(0x037ef73b399c01abU)),}, (strconv__Uint128){.lo = ((u64)(0x1e187e9f9b72d2a9U)),.hi = ((u64)(0x02cbf8fc2e1667bcU)),}, (strconv__Uint128){.lo = ((u64)(0x4b46cbb2e2c24221U)),.hi = ((u64)(0x023cc73024deb963U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x120adf849e039d01U)),.hi = ((u64)(0x039471e6a1645bd2U)),}, (strconv__Uint128){.lo = ((u64)(0xdb3be603b19c7d9aU)),.hi = ((u64)(0x02dd27ebb4504974U)),}, (strconv__Uint128){.lo = ((u64)(0x7c2feb3627b0647cU)),.hi = ((u64)(0x024a865629d9d45dU)),}, (strconv__Uint128){.lo = ((u64)(0x2d197856a5e7072cU)),.hi = ((u64)(0x03aa7089dc8fba2fU)),}, (strconv__Uint128){.lo = ((u64)(0x8a7ac6abb7ec05bdU)),.hi = ((u64)(0x02eec06e4a0c94f2U)),}, (strconv__Uint128){.lo = ((u64)(0xd52f05562cbcd164U)),.hi = ((u64)(0x025899f1d4d6dd8eU)),}, (strconv__Uint128){.lo = ((u64)(0x21e4d556adfae8a0U)),.hi = ((u64)(0x03c0f64fbaf1627eU)),}, (strconv__Uint128){.lo = ((u64)(0xe7ea444557fbed4dU)),.hi = ((u64)(0x0300c50c958de864U)),}, | |
(strconv__Uint128){.lo = ((u64)(0xecbb69d1132ff10aU)),.hi = ((u64)(0x0267040a113e5383U)),}, (strconv__Uint128){.lo = ((u64)(0xadf8a94e851981aaU)),.hi = ((u64)(0x03d8067681fd526cU)),}, (strconv__Uint128){.lo = ((u64)(0x8b2d543ed0e13488U)),.hi = ((u64)(0x0313385ece6441f0U)),}, (strconv__Uint128){.lo = ((u64)(0xd5bddcff0d80f6d3U)),.hi = ((u64)(0x0275c6b23eb69b26U)),}, (strconv__Uint128){.lo = ((u64)(0x892fc7fe7c018aebU)),.hi = ((u64)(0x03efa45064575ea4U)),}, (strconv__Uint128){.lo = ((u64)(0x3a8c9ffec99ad589U)),.hi = ((u64)(0x03261d0d1d12b21dU)),}, (strconv__Uint128){.lo = ((u64)(0xc8707fff07af113bU)),.hi = ((u64)(0x0284e40a7da88e7dU)),}, (strconv__Uint128){.lo = ((u64)(0x39f39998d2f2742fU)),.hi = ((u64)(0x0203e9a1fe2071feU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x8fec28f484b7204bU)),.hi = ((u64)(0x033975cffd00b663U)),}, (strconv__Uint128){.lo = ((u64)(0xd989ba5d36f8e6a2U)),.hi = ((u64)(0x02945e3ffd9a2b82U)),}, (strconv__Uint128){.lo = ((u64)(0x47a161e42bfa521cU)),.hi = ((u64)(0x02104b66647b5602U)),}, (strconv__Uint128){.lo = ((u64)(0x0c35696d132a1cf9U)),.hi = ((u64)(0x034d4570a0c5566aU)),}, (strconv__Uint128){.lo = ((u64)(0x09c454574288172dU)),.hi = ((u64)(0x02a4378d4d6aab88U)),}, (strconv__Uint128){.lo = ((u64)(0xa169dd129ba0128bU)),.hi = ((u64)(0x021cf93dd7888939U)),}, (strconv__Uint128){.lo = ((u64)(0x0242fb50f9001dabU)),.hi = ((u64)(0x03618ec958da7529U)),}, (strconv__Uint128){.lo = ((u64)(0x9b68c90d940017bcU)),.hi = ((u64)(0x02b4723aad7b90edU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x4920a0d7a999ac96U)),.hi = ((u64)(0x0229f4fbbdfc73f1U)),}, (strconv__Uint128){.lo = ((u64)(0x750101590f5c4757U)),.hi = ((u64)(0x037654c5fcc71fe8U)),}, (strconv__Uint128){.lo = ((u64)(0x2a6734473f7d05dfU)),.hi = ((u64)(0x02c5109e63d27fedU)),}, (strconv__Uint128){.lo = ((u64)(0xeeb8f69f65fd9e4cU)),.hi = ((u64)(0x0237407eb641fff0U)),}, (strconv__Uint128){.lo = ((u64)(0xe45b24323cc8fd46U)),.hi = ((u64)(0x038b9a6456cfffe7U)),}, (strconv__Uint128){.lo = ((u64)(0xb6af502830a0ca9fU)),.hi = ((u64)(0x02d6151d123fffecU)),}, (strconv__Uint128){.lo = ((u64)(0xf88c402026e7087fU)),.hi = ((u64)(0x0244ddb0db666656U)),}, (strconv__Uint128){.lo = ((u64)(0x2746cd003e3e73feU)),.hi = ((u64)(0x03a162b4923d708bU)),}, | |
(strconv__Uint128){.lo = ((u64)(0x1f6bd73364fec332U)),.hi = ((u64)(0x02e7822a0e978d3cU)),}, (strconv__Uint128){.lo = ((u64)(0xe5efdf5c50cbcf5bU)),.hi = ((u64)(0x0252ce880bac70fcU)),}, (strconv__Uint128){.lo = ((u64)(0x3cb2fefa1adfb22bU)),.hi = ((u64)(0x03b7b0d9ac471b2eU)),}, (strconv__Uint128){.lo = ((u64)(0x308f3261af195b56U)),.hi = ((u64)(0x02f95a47bd05af58U)),}, (strconv__Uint128){.lo = ((u64)(0x5a0c284e25ade2abU)),.hi = ((u64)(0x0261150630d15913U)),}, (strconv__Uint128){.lo = ((u64)(0x29ad0d49d5e30445U)),.hi = ((u64)(0x03ce8809e7b55b52U)),}, (strconv__Uint128){.lo = ((u64)(0x548a7107de4f369dU)),.hi = ((u64)(0x030ba007ec9115dbU)),}, (strconv__Uint128){.lo = ((u64)(0xdd3b8d9fe50c2bb1U)),.hi = ((u64)(0x026fb3398a0dab15U)),}, | |
(strconv__Uint128){.lo = ((u64)(0x952c15cca1ad12b5U)),.hi = ((u64)(0x03e5eb8f434911bcU)),}, (strconv__Uint128){.lo = ((u64)(0x775677d6e7bda891U)),.hi = ((u64)(0x031e560c35d40e30U)),}, (strconv__Uint128){.lo = ((u64)(0xc5dec645863153a7U)),.hi = ((u64)(0x027eab3cf7dcd826U)),}})); | |
// Initializations for module builtin : | |
_const_none__ = I_None___to_Interface_IError((None__*)memdup(&(None__){.msg = (string){.str=(byteptr)"", .is_lit=1},.code = 0,}, sizeof(None__))); | |
// Initializations for module main : | |
} | |
void _vcleanup() { | |
} | |
int wmain(int ___argc, wchar_t* ___argv[], wchar_t* ___envp[]){ | |
_vinit(___argc, (voidptr)___argv); | |
main__main(); | |
_vcleanup(); | |
return 0; | |
} | |
// THE END. | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn main() { | |
println('hello world') | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment