Update to the latest quickjs-ng, so we dont need to ship custom patches ##r2js

This commit is contained in:
Adam Satko 2024-10-22 20:07:33 +00:00 committed by GitHub
parent 4bfc474729
commit eeebe83420
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 512 additions and 280 deletions

View File

@ -499,7 +499,7 @@ jobs:
# cmd '/c call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" "x86_64"' # cmd '/c call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" "x86_64"'
bash sys/source_bat.bash 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat' "x86_64" bash sys/source_bat.bash 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat' "x86_64"
# meson_options: --default-library=shared|static -Dstatic_runtime=true --backend vs2019 # meson_options: --default-library=shared|static -Dstatic_runtime=true --backend vs2019
meson --buildtype=release --prefix=$PWD\radare2-${{ steps.r2v.outputs.branch }}-w64 build meson --buildtype=release --prefix=$PWD\radare2-${{ steps.r2v.outputs.branch }}-w64 -Dc_std=c11 build
ninja -C build -j 1 ninja -C build -j 1
ninja -C build install ninja -C build install
- name: Create zip artifact - name: Create zip artifact

View File

@ -1,7 +1,7 @@
@echo off @echo off
REM call preconfigure.bat REM call preconfigure.bat
set MESON_FLAGS=-Dsdb_cgen=false set MESON_FLAGS=-Dsdb_cgen=false -Dc_std=c11
if "%*" == "asan" ( if "%*" == "asan" (
set MESON_FLAGS=%MESON_FLAGS% -Dwasan=true set MESON_FLAGS=%MESON_FLAGS% -Dwasan=true

View File

@ -1,5 +1,6 @@
include deps.mk include deps.mk
QJS_BRANCH?=quickjs-ng
USE_MINIFY=0 USE_MINIFY=0
USE_UGLIFY=0 USE_UGLIFY=0

View File

@ -44,6 +44,10 @@ endif
all: $(QJS) all: $(QJS)
fuzz:
clang -g -O1 -fsanitize=address,undefined,fuzzer -o fuzz fuzz.c
./fuzz
$(BUILD_DIR): $(BUILD_DIR):
cmake -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) cmake -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE)
@ -80,15 +84,7 @@ stats: $(QJS)
$(QJS) -qd $(QJS) -qd
test: $(QJS) test: $(QJS)
$(QJS) tests/test_bigint.js $(RUN262) -c tests.conf
$(QJS) tests/test_closure.js
$(QJS) tests/test_language.js
$(QJS) tests/test_builtin.js
$(QJS) tests/test_loop.js
$(QJS) tests/test_std.js
$(QJS) tests/test_worker.js
$(QJS) tests/test_queue_microtask.js
$(QJS) tests/test_module_detect.js
testconv: $(BUILD_DIR)/test_conv testconv: $(BUILD_DIR)/test_conv
$(BUILD_DIR)/test_conv $(BUILD_DIR)/test_conv
@ -100,7 +96,7 @@ test262-fast: $(QJS)
$(RUN262) -m -c test262.conf -c test262-fast.conf -a $(RUN262) -m -c test262.conf -c test262-fast.conf -a
test262-update: $(QJS) test262-update: $(QJS)
$(RUN262) -u -c test262.conf -a $(RUN262) -u -c test262.conf -a -t 1
test262-check: $(QJS) test262-check: $(QJS)
$(RUN262) -m -c test262.conf -E -a $(RUN262) -m -c test262.conf -E -a
@ -114,4 +110,4 @@ unicode_gen: $(BUILD_DIR)
libunicode-table.h: unicode_gen libunicode-table.h: unicode_gen
$(BUILD_DIR)/unicode_gen unicode $@ $(BUILD_DIR)/unicode_gen unicode $@
.PHONY: all debug install clean codegen distclean stats test test262 test262-update test262-check microbench unicode_gen $(QJS) $(QJSC) .PHONY: all debug fuzz install clean codegen distclean stats test test262 test262-update test262-check microbench unicode_gen $(QJS) $(QJSC)

View File

@ -246,7 +246,7 @@ size_t utf8_encode_len(uint32_t c)
No null byte is stored after the encoded bytes. No null byte is stored after the encoded bytes.
Return value is in range 1..4 Return value is in range 1..4
*/ */
size_t utf8_encode(uint8_t *buf, uint32_t c) size_t utf8_encode(uint8_t buf[minimum_length(UTF8_CHAR_LEN_MAX)], uint32_t c)
{ {
if (c < 0x80) { if (c < 0x80) {
buf[0] = c; buf[0] = c;
@ -1129,7 +1129,7 @@ void rqsort(void *base, size_t nmemb, size_t size, cmp_f cmp, void *opaque)
/*---- Portable time functions ----*/ /*---- Portable time functions ----*/
#if __MINGW32__ || defined(_MSC_VER) #ifdef _WIN32
// From: https://stackoverflow.com/a/26085827 // From: https://stackoverflow.com/a/26085827
static int gettimeofday_msvc(struct timeval *tp, struct timezone *tzp) static int gettimeofday_msvc(struct timeval *tp, struct timezone *tzp)
{ {
@ -1184,7 +1184,7 @@ uint64_t js__hrtime_ns(void) {
int64_t js__gettimeofday_us(void) { int64_t js__gettimeofday_us(void) {
struct timeval tv; struct timeval tv;
#if defined(_MSC_VER) #ifdef _WIN32
gettimeofday_msvc(&tv, NULL); gettimeofday_msvc(&tv, NULL);
#else #else
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);

View File

@ -96,11 +96,6 @@ static void *__builtin_frame_address(unsigned int level) {
#define NEG_INF (-1.0/0.0) #define NEG_INF (-1.0/0.0)
#endif #endif
#define xglue(x, y) x ## y
#define glue(x, y) xglue(x, y)
#define stringify(s) tostring(s)
#define tostring(s) #s
#ifndef offsetof #ifndef offsetof
#define offsetof(type, field) ((size_t) &((type *)0)->field) #define offsetof(type, field) ((size_t) &((type *)0)->field)
#endif #endif
@ -115,10 +110,10 @@ static void *__builtin_frame_address(unsigned int level) {
#define container_of(ptr, type, member) ((type *)((uint8_t *)(ptr) - offsetof(type, member))) #define container_of(ptr, type, member) ((type *)((uint8_t *)(ptr) - offsetof(type, member)))
#endif #endif
#if !defined(_MSC_VER) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #if defined(_MSC_VER)
#define minimum_length(n) static n #define minimum_length(n) n
#else #else
#define minimum_length(n) n #define minimum_length(n) static n
#endif #endif
typedef int BOOL; typedef int BOOL;
@ -486,7 +481,7 @@ enum {
}; };
int utf8_scan(const char *buf, size_t len, size_t *plen); int utf8_scan(const char *buf, size_t len, size_t *plen);
size_t utf8_encode_len(uint32_t c); size_t utf8_encode_len(uint32_t c);
size_t utf8_encode(uint8_t *buf, uint32_t c); size_t utf8_encode(uint8_t buf[minimum_length(UTF8_CHAR_LEN_MAX)], uint32_t c);
uint32_t utf8_decode_len(const uint8_t *p, size_t max_len, const uint8_t **pp); uint32_t utf8_decode_len(const uint8_t *p, size_t max_len, const uint8_t **pp);
uint32_t utf8_decode(const uint8_t *p, const uint8_t **pp); uint32_t utf8_decode(const uint8_t *p, const uint8_t **pp);
size_t utf8_decode_buf8(uint8_t *dest, size_t dest_len, const char *src, size_t src_len); size_t utf8_decode_buf8(uint8_t *dest, size_t dest_len, const char *src, size_t src_len);

View File

@ -1710,6 +1710,13 @@ static int __bf_div(bf_t *r, const bf_t *a, const bf_t *b, limb_t prec,
slimb_t d; slimb_t d;
na = n + nb; na = n + nb;
#if LIMB_LOG2_BITS == 6
if (na >= (SIZE_MAX / sizeof(limb_t)) - 1) {
return BF_ST_MEM_ERROR; /* Return memory error status */
}
#endif
taba = bf_malloc(s, (na + 1) * sizeof(limb_t)); taba = bf_malloc(s, (na + 1) * sizeof(limb_t));
if (!taba) if (!taba)
goto fail; goto fail;

File diff suppressed because it is too large Load Diff

View File

@ -87,10 +87,6 @@ enum {
/* any larger tag is FLOAT64 if JS_NAN_BOXING */ /* any larger tag is FLOAT64 if JS_NAN_BOXING */
}; };
typedef struct JSRefCountHeader {
int ref_count;
} JSRefCountHeader;
#define JS_FLOAT64_NAN NAN #define JS_FLOAT64_NAN NAN
#define JSValueConst JSValue /* For backwards compatibility. */ #define JSValueConst JSValue /* For backwards compatibility. */
@ -291,6 +287,11 @@ typedef struct JSMallocFunctions {
size_t (*js_malloc_usable_size)(const void *ptr); size_t (*js_malloc_usable_size)(const void *ptr);
} JSMallocFunctions; } JSMallocFunctions;
// Finalizers run in LIFO order at the very end of JS_FreeRuntime.
// Intended for cleanup of associated resources; the runtime itself
// is no longer usable.
typedef void JSRuntimeFinalizer(JSRuntime *rt, void *arg);
typedef struct JSGCObjectHeader JSGCObjectHeader; typedef struct JSGCObjectHeader JSGCObjectHeader;
JS_EXTERN JSRuntime *JS_NewRuntime(void); JS_EXTERN JSRuntime *JS_NewRuntime(void);
@ -310,6 +311,8 @@ JS_EXTERN JSRuntime *JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque);
JS_EXTERN void JS_FreeRuntime(JSRuntime *rt); JS_EXTERN void JS_FreeRuntime(JSRuntime *rt);
JS_EXTERN void *JS_GetRuntimeOpaque(JSRuntime *rt); JS_EXTERN void *JS_GetRuntimeOpaque(JSRuntime *rt);
JS_EXTERN void JS_SetRuntimeOpaque(JSRuntime *rt, void *opaque); JS_EXTERN void JS_SetRuntimeOpaque(JSRuntime *rt, void *opaque);
JS_EXTERN int JS_AddRuntimeFinalizer(JSRuntime *rt,
JSRuntimeFinalizer *finalizer, void *arg);
typedef void JS_MarkFunc(JSRuntime *rt, JSGCObjectHeader *gp); typedef void JS_MarkFunc(JSRuntime *rt, JSGCObjectHeader *gp);
JS_EXTERN void JS_MarkValue(JSRuntime *rt, JSValue val, JS_MarkFunc *mark_func); JS_EXTERN void JS_MarkValue(JSRuntime *rt, JSValue val, JS_MarkFunc *mark_func);
JS_EXTERN void JS_RunGC(JSRuntime *rt); JS_EXTERN void JS_RunGC(JSRuntime *rt);
@ -323,6 +326,7 @@ JS_EXTERN void JS_SetContextOpaque(JSContext *ctx, void *opaque);
JS_EXTERN JSRuntime *JS_GetRuntime(JSContext *ctx); JS_EXTERN JSRuntime *JS_GetRuntime(JSContext *ctx);
JS_EXTERN void JS_SetClassProto(JSContext *ctx, JSClassID class_id, JSValue obj); JS_EXTERN void JS_SetClassProto(JSContext *ctx, JSClassID class_id, JSValue obj);
JS_EXTERN JSValue JS_GetClassProto(JSContext *ctx, JSClassID class_id); JS_EXTERN JSValue JS_GetClassProto(JSContext *ctx, JSClassID class_id);
JS_EXTERN JSValue JS_GetFunctionProto(JSContext *ctx);
/* the following functions are used to select the intrinsic object to /* the following functions are used to select the intrinsic object to
save memory */ save memory */
@ -589,46 +593,10 @@ JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowReferenceError(JSContext *ctx,
JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowRangeError(JSContext *ctx, const char *fmt, ...); JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowRangeError(JSContext *ctx, const char *fmt, ...);
JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowInternalError(JSContext *ctx, const char *fmt, ...); JS_EXTERN JSValue __js_printf_like(2, 3) JS_ThrowInternalError(JSContext *ctx, const char *fmt, ...);
JS_EXTERN JSValue JS_ThrowOutOfMemory(JSContext *ctx); JS_EXTERN JSValue JS_ThrowOutOfMemory(JSContext *ctx);
JS_EXTERN void JS_FreeValue(JSContext *ctx, JSValue v);
JS_EXTERN void __JS_FreeValue(JSContext *ctx, JSValue v); JS_EXTERN void JS_FreeValueRT(JSRuntime *rt, JSValue v);
static inline void JS_FreeValue(JSContext *ctx, JSValue v) JS_EXTERN JSValue JS_DupValue(JSContext *ctx, JSValue v);
{ JS_EXTERN JSValue JS_DupValueRT(JSRuntime *rt, JSValue v);
if (JS_VALUE_HAS_REF_COUNT(v)) {
JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v);
if (--p->ref_count <= 0) {
__JS_FreeValue(ctx, v);
}
}
}
JS_EXTERN void __JS_FreeValueRT(JSRuntime *rt, JSValue v);
static inline void JS_FreeValueRT(JSRuntime *rt, JSValue v)
{
if (JS_VALUE_HAS_REF_COUNT(v)) {
JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v);
if (--p->ref_count <= 0) {
__JS_FreeValueRT(rt, v);
}
}
}
static inline JSValue JS_DupValue(JSContext *ctx, JSValue v)
{
if (JS_VALUE_HAS_REF_COUNT(v)) {
JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v);
p->ref_count++;
}
return v;
}
static inline JSValue JS_DupValueRT(JSRuntime *rt, JSValue v)
{
if (JS_VALUE_HAS_REF_COUNT(v)) {
JSRefCountHeader *p = (JSRefCountHeader *)JS_VALUE_GET_PTR(v);
p->ref_count++;
}
return v;
}
JS_EXTERN int JS_ToBool(JSContext *ctx, JSValue val); /* return -1 for JS_EXCEPTION */ JS_EXTERN int JS_ToBool(JSContext *ctx, JSValue val); /* return -1 for JS_EXCEPTION */
JS_EXTERN int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValue val); JS_EXTERN int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValue val);
static inline int JS_ToUint32(JSContext *ctx, uint32_t *pres, JSValue val) static inline int JS_ToUint32(JSContext *ctx, uint32_t *pres, JSValue val)
@ -725,6 +693,12 @@ JS_EXTERN JSValue JS_CallConstructor(JSContext *ctx, JSValue func_obj,
JS_EXTERN JSValue JS_CallConstructor2(JSContext *ctx, JSValue func_obj, JS_EXTERN JSValue JS_CallConstructor2(JSContext *ctx, JSValue func_obj,
JSValue new_target, JSValue new_target,
int argc, JSValue *argv); int argc, JSValue *argv);
/* Try to detect if the input is a module. Returns TRUE if parsing the input
* as a module produces no syntax errors. It's a naive approach that is not
* wholly infallible: non-strict classic scripts may _parse_ okay as a module
* but not _execute_ as one (different runtime semantics.) Use with caution.
* |input| can be either ASCII or UTF-8 encoded source code.
*/
JS_EXTERN JS_BOOL JS_DetectModule(const char *input, size_t input_len); JS_EXTERN JS_BOOL JS_DetectModule(const char *input, size_t input_len);
/* 'input' must be zero terminated i.e. input[input_len] = '\0'. */ /* 'input' must be zero terminated i.e. input[input_len] = '\0'. */
JS_EXTERN JSValue JS_Eval(JSContext *ctx, const char *input, size_t input_len, JS_EXTERN JSValue JS_Eval(JSContext *ctx, const char *input, size_t input_len,