mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
Get Fabrice Bellard's JavaScript engine to build
$ m=tiny $ make -j12 MODE=$m o/$m/third_party/quickjs/qjs.com $ o/$m/third_party/quickjs/qjs.com -e 'console.log(2 + 2)' 4 $ ls -hal o/$m/third_party/quickjs/qjs.com 631.5K See #97
This commit is contained in:
parent
1fbfbb3192
commit
8f52c0d773
73 changed files with 954 additions and 1299 deletions
1
Makefile
1
Makefile
|
@ -136,6 +136,7 @@ include third_party/third_party.mk
|
||||||
include libc/testlib/testlib.mk
|
include libc/testlib/testlib.mk
|
||||||
include tool/viz/lib/vizlib.mk
|
include tool/viz/lib/vizlib.mk
|
||||||
include third_party/lua/lua.mk
|
include third_party/lua/lua.mk
|
||||||
|
include third_party/quickjs/quickjs.mk
|
||||||
include examples/examples.mk
|
include examples/examples.mk
|
||||||
include third_party/lz4cli/lz4cli.mk
|
include third_party/lz4cli/lz4cli.mk
|
||||||
include tool/build/lib/buildlib.mk
|
include tool/build/lib/buildlib.mk
|
||||||
|
|
23
libc/runtime/dlfcn.h
Normal file
23
libc/runtime/dlfcn.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef COSMOPOLITAN_LIBC_RUNTIME_DLFCN_H_
|
||||||
|
#define COSMOPOLITAN_LIBC_RUNTIME_DLFCN_H_
|
||||||
|
|
||||||
|
#define RTLD_LOCAL 0
|
||||||
|
#define RTLD_LAZY 1
|
||||||
|
#define RTLD_NOW 2
|
||||||
|
#define RTLD_GLOBAL 256
|
||||||
|
|
||||||
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
|
COSMOPOLITAN_C_START_
|
||||||
|
|
||||||
|
#define RTLD_NEXT ((void *)-1)
|
||||||
|
#define RTLD_DEFAULT ((void *)0)
|
||||||
|
|
||||||
|
char *dlerror(void);
|
||||||
|
void *dlopen(const char *, int);
|
||||||
|
void *dlsym(void *, const char *);
|
||||||
|
int dlclose(void *);
|
||||||
|
int dl_iterate_phdr(int (*)(void *, size_t, void *), void *);
|
||||||
|
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_LIBC_RUNTIME_DLFCN_H_ */
|
32
libc/runtime/fegetround.c
Normal file
32
libc/runtime/fegetround.c
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||||
|
│ │
|
||||||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "libc/runtime/fenv.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns rounding mode.
|
||||||
|
*
|
||||||
|
* This implementation retrieves it from the x87 FPU control word.
|
||||||
|
*
|
||||||
|
* @see fesetround() for changing this
|
||||||
|
*/
|
||||||
|
int fegetround(void) {
|
||||||
|
uint16_t x87cw;
|
||||||
|
asm("fnstcw\t%0" : "=m"(x87cw));
|
||||||
|
return x87cw & 0x0c00;
|
||||||
|
}
|
41
libc/runtime/fenv.c
Normal file
41
libc/runtime/fenv.c
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||||
|
│ │
|
||||||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "libc/runtime/fenv.h"
|
||||||
|
|
||||||
|
/* TODO: implement these functions */
|
||||||
|
|
||||||
|
int feclearexcept(int mask) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fegetenv(fenv_t *envp) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int feraiseexcept(int mask) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fetestexcept(int mask) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fesetenv(const fenv_t *envp) {
|
||||||
|
return 0;
|
||||||
|
}
|
39
libc/runtime/fenv.h
Normal file
39
libc/runtime/fenv.h
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#ifndef COSMOPOLITAN_LIBC_RUNTIME_FENV_H_
|
||||||
|
#define COSMOPOLITAN_LIBC_RUNTIME_FENV_H_
|
||||||
|
|
||||||
|
#define FE_TONEAREST 0x0000
|
||||||
|
#define FE_DOWNWARD 0x0400
|
||||||
|
#define FE_UPWARD 0x0800
|
||||||
|
#define FE_TOWARDZERO 0x0c00
|
||||||
|
|
||||||
|
#define FE_INVALID 1
|
||||||
|
#define FE_DIVBYZERO 4
|
||||||
|
#define FE_OVERFLOW 8
|
||||||
|
#define FE_UNDERFLOW 16
|
||||||
|
#define FE_INEXACT 32
|
||||||
|
#define FE_ALL_EXCEPT 61
|
||||||
|
|
||||||
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
|
COSMOPOLITAN_C_START_
|
||||||
|
|
||||||
|
#define FLT_ROUNDS (__flt_rounds())
|
||||||
|
|
||||||
|
typedef void *fenv_t;
|
||||||
|
typedef uint16_t fexcept_t;
|
||||||
|
|
||||||
|
int feclearexcept(int);
|
||||||
|
int fegetenv(fenv_t *);
|
||||||
|
int fegetexceptflag(fexcept_t *, int);
|
||||||
|
int fegetround(void);
|
||||||
|
int feholdexcept(fenv_t *);
|
||||||
|
int feraiseexcept(int);
|
||||||
|
int fesetenv(const fenv_t *);
|
||||||
|
int fesetexceptflag(const fexcept_t *, int);
|
||||||
|
int fesetround(int);
|
||||||
|
int fetestexcept(int);
|
||||||
|
int feupdateenv(const fenv_t *);
|
||||||
|
int __flt_rounds(void);
|
||||||
|
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_LIBC_RUNTIME_FENV_H_ */
|
51
libc/runtime/fesetround.c
Normal file
51
libc/runtime/fesetround.c
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||||
|
│ │
|
||||||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "libc/runtime/fenv.h"
|
||||||
|
|
||||||
|
/* TODO(jart): This needs tests. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets rounding mode.
|
||||||
|
*
|
||||||
|
* This configures the x87 FPU as well as SSE.
|
||||||
|
*
|
||||||
|
* @param mode may be FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, or FE_TOWARDZERO
|
||||||
|
* @return 0 on success, or -1 on error
|
||||||
|
*/
|
||||||
|
int fesetround(int mode) {
|
||||||
|
uint16_t x87cw;
|
||||||
|
uint32_t ssecw;
|
||||||
|
switch (mode) {
|
||||||
|
case FE_TONEAREST:
|
||||||
|
case FE_DOWNWARD:
|
||||||
|
case FE_UPWARD:
|
||||||
|
case FE_TOWARDZERO:
|
||||||
|
asm("fnstcw\t%0" : "=m"(x87cw));
|
||||||
|
x87cw &= ~0x0c00;
|
||||||
|
x87cw |= mode;
|
||||||
|
asm volatile("fldcw\t%0" : /* no outputs */ : "m"(x87cw));
|
||||||
|
asm("stmxcsr\t%0" : "=m"(ssecw));
|
||||||
|
ssecw &= ~(0x0c00 << 3);
|
||||||
|
ssecw |= (mode << 3);
|
||||||
|
asm volatile("ldmxcsr\t%0" : /* no outputs */ : "m"(ssecw));
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
34
libc/runtime/fltrounds.c
Normal file
34
libc/runtime/fltrounds.c
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||||
|
│ │
|
||||||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "libc/runtime/fenv.h"
|
||||||
|
|
||||||
|
int __flt_rounds(void) {
|
||||||
|
switch (fegetround()) {
|
||||||
|
case FE_TOWARDZERO:
|
||||||
|
return 0;
|
||||||
|
case FE_TONEAREST:
|
||||||
|
return 1;
|
||||||
|
case FE_UPWARD:
|
||||||
|
return 2;
|
||||||
|
case FE_DOWNWARD:
|
||||||
|
return 3;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,7 +16,7 @@
|
||||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
#include "libc/runtime/runtime.h"
|
#include "libc/runtime/dlfcn.h"
|
||||||
|
|
||||||
char *dlerror(void) {
|
char *dlerror(void) {
|
||||||
return "cosmopolitan doesn't support dsos";
|
return "cosmopolitan doesn't support dsos";
|
||||||
|
|
|
@ -1573,17 +1573,6 @@ syscon misc TCOFLUSH 1 2 2 2 2 0 # bsd consensus
|
||||||
syscon misc TCOOFF 0 1 1 1 1 0 # bsd consensus
|
syscon misc TCOOFF 0 1 1 1 1 0 # bsd consensus
|
||||||
syscon misc TCOON 1 2 2 2 2 0 # bsd consensus
|
syscon misc TCOON 1 2 2 2 2 0 # bsd consensus
|
||||||
|
|
||||||
syscon misc FE_TONEAREST 0 0 0 0 0 0 # consensus
|
|
||||||
syscon misc FE_DIVBYZERO 4 4 4 4 4 0 # unix consensus
|
|
||||||
syscon misc FE_DOWNWARD 0x0400 0x0400 0x0400 0x0400 0x0400 0 # unix consensus
|
|
||||||
syscon misc FE_INEXACT 0x20 0x20 0x20 0x20 0x20 0 # unix consensus
|
|
||||||
syscon misc FE_INVALID 1 1 1 1 1 0 # unix consensus
|
|
||||||
syscon misc FE_OVERFLOW 8 8 8 8 8 0 # unix consensus
|
|
||||||
syscon misc FE_TOWARDZERO 0x0c00 0x0c00 0x0c00 0x0c00 0x0c00 0 # unix consensus
|
|
||||||
syscon misc FE_UNDERFLOW 0x10 0x10 0x10 0x10 0x10 0 # unix consensus
|
|
||||||
syscon misc FE_UPWARD 0x0800 0x0800 0x0800 0x0800 0x0800 0 # unix consensus
|
|
||||||
syscon misc FE_ALL_EXCEPT 61 63 63 63 63 0 # bsd consensus
|
|
||||||
|
|
||||||
syscon misc TYPE_DISK 0 0 0 0 0 0 # consensus
|
syscon misc TYPE_DISK 0 0 0 0 0 0 # consensus
|
||||||
syscon misc TYPE_A 1 1 1 1 1 0 # unix consensus
|
syscon misc TYPE_A 1 1 1 1 1 0 # unix consensus
|
||||||
syscon misc TYPE_E 2 2 2 2 2 0 # unix consensus
|
syscon misc TYPE_E 2 2 2 2 2 0 # unix consensus
|
||||||
|
@ -1637,18 +1626,6 @@ syscon misc PTHREAD_MUTEX_NORMAL 0 0 0 3 3 0
|
||||||
syscon misc PTHREAD_MUTEX_ROBUST 0 0 1 0 0 0
|
syscon misc PTHREAD_MUTEX_ROBUST 0 0 1 0 0 0
|
||||||
syscon misc PTHREAD_PROCESS_PRIVATE 0 2 0 0 0 0
|
syscon misc PTHREAD_PROCESS_PRIVATE 0 2 0 0 0 0
|
||||||
|
|
||||||
syscon misc FTW_F 0 0 0 0 0 0 # consensus
|
|
||||||
syscon misc FTW_D 1 1 1 1 1 0 # unix consensus
|
|
||||||
syscon misc FTW_DNR 2 2 2 2 2 0 # unix consensus
|
|
||||||
syscon misc FTW_MOUNT 2 2 2 2 2 0 # unix consensus
|
|
||||||
syscon misc FTW_PHYS 1 1 1 1 1 0 # unix consensus
|
|
||||||
syscon misc FTW_SLN 6 6 6 6 6 0 # unix consensus
|
|
||||||
syscon misc FTW_CHDIR 4 8 8 8 8 0 # bsd consensus
|
|
||||||
syscon misc FTW_DEPTH 8 4 4 4 4 0 # bsd consensus
|
|
||||||
syscon misc FTW_DP 5 3 3 3 3 0 # bsd consensus
|
|
||||||
syscon misc FTW_NS 3 4 4 4 4 0 # bsd consensus
|
|
||||||
syscon misc FTW_SL 4 5 5 5 5 0 # bsd consensus
|
|
||||||
|
|
||||||
syscon misc N_TTY 0 0 0 0 0 0 # consensus
|
syscon misc N_TTY 0 0 0 0 0 0 # consensus
|
||||||
syscon misc N_6PACK 7 0 0 0 0 0
|
syscon misc N_6PACK 7 0 0 0 0 0
|
||||||
syscon misc N_AX25 5 0 0 0 0 0
|
syscon misc N_AX25 5 0 0 0 0 0
|
||||||
|
@ -2009,14 +1986,6 @@ syscon misc NL_TEXTMAX 0x7fffffff 0x0800 0x0800 255 255 0
|
||||||
syscon misc NL_NMAX 0x7fffffff 1 1 0 0 0
|
syscon misc NL_NMAX 0x7fffffff 1 1 0 0 0
|
||||||
syscon misc NL_SETD 1 1 0 1 1 0
|
syscon misc NL_SETD 1 1 0 1 1 0
|
||||||
|
|
||||||
syscon misc RTLD_LAZY 1 1 1 1 1 0 # unix consensus
|
|
||||||
syscon misc RTLD_NOW 2 2 2 2 2 0 # unix consensus
|
|
||||||
syscon misc RTLD_GLOBAL 0x0100 8 0x0100 0x0100 0x0100 0
|
|
||||||
syscon misc RTLD_NODELETE 0x1000 0x80 0x1000 0 0 0
|
|
||||||
syscon misc RTLD_NOLOAD 4 0x10 0x2000 0 0 0
|
|
||||||
syscon misc RTLD_DI_LINKMAP 0 0 2 0 0 0
|
|
||||||
syscon misc RTLD_LOCAL 0 4 0 0 0 0
|
|
||||||
|
|
||||||
syscon rusage RUSAGE_SELF 0 0 0 0 0 0 # unix consensus & faked nt
|
syscon rusage RUSAGE_SELF 0 0 0 0 0 0 # unix consensus & faked nt
|
||||||
syscon rusage RUSAGE_CHILDREN -1 -1 -1 -1 -1 99 # unix consensus & unavailable on nt
|
syscon rusage RUSAGE_CHILDREN -1 -1 -1 -1 -1 99 # unix consensus & unavailable on nt
|
||||||
syscon rusage RUSAGE_THREAD 1 99 1 1 1 1 # faked nt & unavailable on xnu
|
syscon rusage RUSAGE_THREAD 1 99 1 1 1 1 # faked nt & unavailable on xnu
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_ALL_EXCEPT,61,63,63,63,63,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_DIVBYZERO,4,4,4,4,4,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_DOWNWARD,0x0400,0x0400,0x0400,0x0400,0x0400,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_INEXACT,0x20,0x20,0x20,0x20,0x20,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_INVALID,1,1,1,1,1,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_OVERFLOW,8,8,8,8,8,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_TONEAREST,0,0,0,0,0,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_TOWARDZERO,0x0c00,0x0c00,0x0c00,0x0c00,0x0c00,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_UNDERFLOW,0x10,0x10,0x10,0x10,0x10,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FE_UPWARD,0x0800,0x0800,0x0800,0x0800,0x0800,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_CHDIR,4,8,8,8,8,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_D,1,1,1,1,1,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_DEPTH,8,4,4,4,4,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_DNR,2,2,2,2,2,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_DP,5,3,3,3,3,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_F,0,0,0,0,0,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_MOUNT,2,2,2,2,2,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_NS,3,4,4,4,4,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_PHYS,1,1,1,1,1,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_SL,4,5,5,5,5,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,FTW_SLN,6,6,6,6,6,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,RTLD_DI_LINKMAP,0,0,2,0,0,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,RTLD_GLOBAL,0x0100,8,0x0100,0x0100,0x0100,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,RTLD_LAZY,1,1,1,1,1,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,RTLD_LOCAL,0,4,0,0,0,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,RTLD_NODELETE,0x1000,0x80,0x1000,0,0,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,RTLD_NOLOAD,4,0x10,0x2000,0,0,0
|
|
|
@ -1,2 +0,0 @@
|
||||||
#include "libc/sysv/consts/syscon.internal.h"
|
|
||||||
.syscon misc,RTLD_NOW,2,2,2,2,2,0
|
|
|
@ -1,32 +0,0 @@
|
||||||
#ifndef COSMOPOLITAN_LIBC_SYSV_CONSTS_FE_H_
|
|
||||||
#define COSMOPOLITAN_LIBC_SYSV_CONSTS_FE_H_
|
|
||||||
#include "libc/runtime/symbolic.h"
|
|
||||||
|
|
||||||
#define FE_ALL_EXCEPT SYMBOLIC(FE_ALL_EXCEPT)
|
|
||||||
#define FE_DIVBYZERO SYMBOLIC(FE_DIVBYZERO)
|
|
||||||
#define FE_DOWNWARD SYMBOLIC(FE_DOWNWARD)
|
|
||||||
#define FE_INEXACT SYMBOLIC(FE_INEXACT)
|
|
||||||
#define FE_INVALID SYMBOLIC(FE_INVALID)
|
|
||||||
#define FE_OVERFLOW SYMBOLIC(FE_OVERFLOW)
|
|
||||||
#define FE_TONEAREST SYMBOLIC(FE_TONEAREST)
|
|
||||||
#define FE_TOWARDZERO SYMBOLIC(FE_TOWARDZERO)
|
|
||||||
#define FE_UNDERFLOW SYMBOLIC(FE_UNDERFLOW)
|
|
||||||
#define FE_UPWARD SYMBOLIC(FE_UPWARD)
|
|
||||||
|
|
||||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
||||||
COSMOPOLITAN_C_START_
|
|
||||||
|
|
||||||
extern const long FE_ALL_EXCEPT;
|
|
||||||
extern const long FE_DIVBYZERO;
|
|
||||||
extern const long FE_DOWNWARD;
|
|
||||||
extern const long FE_INEXACT;
|
|
||||||
extern const long FE_INVALID;
|
|
||||||
extern const long FE_OVERFLOW;
|
|
||||||
extern const long FE_TONEAREST;
|
|
||||||
extern const long FE_TOWARDZERO;
|
|
||||||
extern const long FE_UNDERFLOW;
|
|
||||||
extern const long FE_UPWARD;
|
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
|
||||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
||||||
#endif /* COSMOPOLITAN_LIBC_SYSV_CONSTS_FE_H_ */
|
|
|
@ -1,34 +0,0 @@
|
||||||
#ifndef COSMOPOLITAN_LIBC_SYSV_CONSTS_FTW_H_
|
|
||||||
#define COSMOPOLITAN_LIBC_SYSV_CONSTS_FTW_H_
|
|
||||||
#include "libc/runtime/symbolic.h"
|
|
||||||
|
|
||||||
#define FTW_CHDIR SYMBOLIC(FTW_CHDIR)
|
|
||||||
#define FTW_D SYMBOLIC(FTW_D)
|
|
||||||
#define FTW_DEPTH SYMBOLIC(FTW_DEPTH)
|
|
||||||
#define FTW_DNR SYMBOLIC(FTW_DNR)
|
|
||||||
#define FTW_DP SYMBOLIC(FTW_DP)
|
|
||||||
#define FTW_F SYMBOLIC(FTW_F)
|
|
||||||
#define FTW_MOUNT SYMBOLIC(FTW_MOUNT)
|
|
||||||
#define FTW_NS SYMBOLIC(FTW_NS)
|
|
||||||
#define FTW_PHYS SYMBOLIC(FTW_PHYS)
|
|
||||||
#define FTW_SL SYMBOLIC(FTW_SL)
|
|
||||||
#define FTW_SLN SYMBOLIC(FTW_SLN)
|
|
||||||
|
|
||||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
||||||
COSMOPOLITAN_C_START_
|
|
||||||
|
|
||||||
extern const long FTW_CHDIR;
|
|
||||||
extern const long FTW_D;
|
|
||||||
extern const long FTW_DEPTH;
|
|
||||||
extern const long FTW_DNR;
|
|
||||||
extern const long FTW_DP;
|
|
||||||
extern const long FTW_F;
|
|
||||||
extern const long FTW_MOUNT;
|
|
||||||
extern const long FTW_NS;
|
|
||||||
extern const long FTW_PHYS;
|
|
||||||
extern const long FTW_SL;
|
|
||||||
extern const long FTW_SLN;
|
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
|
||||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
||||||
#endif /* COSMOPOLITAN_LIBC_SYSV_CONSTS_FTW_H_ */
|
|
|
@ -1,26 +0,0 @@
|
||||||
#ifndef COSMOPOLITAN_LIBC_SYSV_CONSTS_RTLD_H_
|
|
||||||
#define COSMOPOLITAN_LIBC_SYSV_CONSTS_RTLD_H_
|
|
||||||
#include "libc/runtime/symbolic.h"
|
|
||||||
|
|
||||||
#define RTLD_DI_LINKMAP SYMBOLIC(RTLD_DI_LINKMAP)
|
|
||||||
#define RTLD_GLOBAL SYMBOLIC(RTLD_GLOBAL)
|
|
||||||
#define RTLD_LAZY SYMBOLIC(RTLD_LAZY)
|
|
||||||
#define RTLD_LOCAL SYMBOLIC(RTLD_LOCAL)
|
|
||||||
#define RTLD_NODELETE SYMBOLIC(RTLD_NODELETE)
|
|
||||||
#define RTLD_NOLOAD SYMBOLIC(RTLD_NOLOAD)
|
|
||||||
#define RTLD_NOW SYMBOLIC(RTLD_NOW)
|
|
||||||
|
|
||||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
||||||
COSMOPOLITAN_C_START_
|
|
||||||
|
|
||||||
extern const long RTLD_DI_LINKMAP;
|
|
||||||
extern const long RTLD_GLOBAL;
|
|
||||||
extern const long RTLD_LAZY;
|
|
||||||
extern const long RTLD_LOCAL;
|
|
||||||
extern const long RTLD_NODELETE;
|
|
||||||
extern const long RTLD_NOLOAD;
|
|
||||||
extern const long RTLD_NOW;
|
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
|
||||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
||||||
#endif /* COSMOPOLITAN_LIBC_SYSV_CONSTS_RTLD_H_ */
|
|
2
third_party/gdtoa/gdtoa.internal.h
vendored
2
third_party/gdtoa/gdtoa.internal.h
vendored
|
@ -1,5 +1,6 @@
|
||||||
#include "libc/math.h"
|
#include "libc/math.h"
|
||||||
#include "libc/mem/mem.h"
|
#include "libc/mem/mem.h"
|
||||||
|
#include "libc/runtime/fenv.h"
|
||||||
#include "libc/str/str.h"
|
#include "libc/str/str.h"
|
||||||
#include "third_party/gdtoa/gdtoa.h"
|
#include "third_party/gdtoa/gdtoa.h"
|
||||||
|
|
||||||
|
@ -12,6 +13,7 @@ asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
#define IEEE_Arith 1
|
#define IEEE_Arith 1
|
||||||
#define IEEE_8087 1
|
#define IEEE_8087 1
|
||||||
|
#define Honor_FLT_ROUNDS 1
|
||||||
#define f_QNAN 0x7fc00000
|
#define f_QNAN 0x7fc00000
|
||||||
#define d_QNAN0 0x7ff80000
|
#define d_QNAN0 0x7ff80000
|
||||||
#define d_QNAN1 0x0
|
#define d_QNAN1 0x0
|
||||||
|
|
1
third_party/gdtoa/gdtoa.mk
vendored
1
third_party/gdtoa/gdtoa.mk
vendored
|
@ -28,6 +28,7 @@ THIRD_PARTY_GDTOA_A_DIRECTDEPS = \
|
||||||
LIBC_INTRIN \
|
LIBC_INTRIN \
|
||||||
LIBC_MEM \
|
LIBC_MEM \
|
||||||
LIBC_NEXGEN32E \
|
LIBC_NEXGEN32E \
|
||||||
|
LIBC_RUNTIME \
|
||||||
LIBC_STR \
|
LIBC_STR \
|
||||||
LIBC_STUBS \
|
LIBC_STUBS \
|
||||||
LIBC_SYSV \
|
LIBC_SYSV \
|
||||||
|
|
43
third_party/musl/ftw.c
vendored
Normal file
43
third_party/musl/ftw.c
vendored
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╚──────────────────────────────────────────────────────────────────────────────╝
|
||||||
|
│ │
|
||||||
|
│ Musl Libc │
|
||||||
|
│ Copyright © 2005-2014 Rich Felker, et al. │
|
||||||
|
│ │
|
||||||
|
│ Permission is hereby granted, free of charge, to any person obtaining │
|
||||||
|
│ a copy of this software and associated documentation files (the │
|
||||||
|
│ "Software"), to deal in the Software without restriction, including │
|
||||||
|
│ without limitation the rights to use, copy, modify, merge, publish, │
|
||||||
|
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
||||||
|
│ permit persons to whom the Software is furnished to do so, subject to │
|
||||||
|
│ the following conditions: │
|
||||||
|
│ │
|
||||||
|
│ The above copyright notice and this permission notice shall be │
|
||||||
|
│ included in all copies or substantial portions of the Software. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
||||||
|
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
||||||
|
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
||||||
|
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
||||||
|
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
||||||
|
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
||||||
|
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
||||||
|
│ │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "third_party/musl/ftw.h"
|
||||||
|
|
||||||
|
asm(".ident\t\"\\n\\n\
|
||||||
|
Musl libc (MIT License)\\n\
|
||||||
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
|
int ftw(const char *path, int (*fn)(const char *, const struct stat *, int), int fd_limit)
|
||||||
|
{
|
||||||
|
/* The following cast assumes that calling a function with one
|
||||||
|
* argument more than it needs behaves as expected. This is
|
||||||
|
* actually undefined, but works on all real-world machines. */
|
||||||
|
return nftw(path, (int (*)())fn, fd_limit, FTW_PHYS);
|
||||||
|
}
|
32
third_party/musl/ftw.h
vendored
Normal file
32
third_party/musl/ftw.h
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef COSMOPOLITAN_THIRD_PARTY_MUSL_FTW_H_
|
||||||
|
#define COSMOPOLITAN_THIRD_PARTY_MUSL_FTW_H_
|
||||||
|
#include "libc/calls/struct/stat.h"
|
||||||
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
|
COSMOPOLITAN_C_START_
|
||||||
|
|
||||||
|
#define FTW_F 1
|
||||||
|
#define FTW_D 2
|
||||||
|
#define FTW_DNR 3
|
||||||
|
#define FTW_NS 4
|
||||||
|
#define FTW_SL 5
|
||||||
|
#define FTW_DP 6
|
||||||
|
#define FTW_SLN 7
|
||||||
|
|
||||||
|
#define FTW_PHYS 1
|
||||||
|
#define FTW_MOUNT 2
|
||||||
|
#define FTW_CHDIR 4
|
||||||
|
#define FTW_DEPTH 8
|
||||||
|
|
||||||
|
struct FTW {
|
||||||
|
int base;
|
||||||
|
int level;
|
||||||
|
};
|
||||||
|
|
||||||
|
int ftw(const char *, int (*)(const char *, const struct stat *, int), int);
|
||||||
|
int nftw(const char *,
|
||||||
|
int (*)(const char *, const struct stat *, int, struct FTW *), int,
|
||||||
|
int);
|
||||||
|
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_MUSL_FTW_H_ */
|
171
third_party/musl/nftw.c
vendored
Normal file
171
third_party/musl/nftw.c
vendored
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:t;c-basic-offset:4;tab-width:4;coding:utf-8 -*-│
|
||||||
|
│vi: set et ft=c ts=4 sw=4 fenc=utf-8 :vi│
|
||||||
|
╚──────────────────────────────────────────────────────────────────────────────╝
|
||||||
|
│ │
|
||||||
|
│ Musl Libc │
|
||||||
|
│ Copyright © 2005-2014 Rich Felker, et al. │
|
||||||
|
│ │
|
||||||
|
│ Permission is hereby granted, free of charge, to any person obtaining │
|
||||||
|
│ a copy of this software and associated documentation files (the │
|
||||||
|
│ "Software"), to deal in the Software without restriction, including │
|
||||||
|
│ without limitation the rights to use, copy, modify, merge, publish, │
|
||||||
|
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
||||||
|
│ permit persons to whom the Software is furnished to do so, subject to │
|
||||||
|
│ the following conditions: │
|
||||||
|
│ │
|
||||||
|
│ The above copyright notice and this permission notice shall be │
|
||||||
|
│ included in all copies or substantial portions of the Software. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
||||||
|
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
||||||
|
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
||||||
|
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
||||||
|
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
||||||
|
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
||||||
|
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
||||||
|
│ │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "libc/calls/calls.h"
|
||||||
|
#include "libc/calls/struct/dirent.h"
|
||||||
|
#include "libc/calls/weirdtypes.h"
|
||||||
|
#include "libc/errno.h"
|
||||||
|
#include "libc/str/str.h"
|
||||||
|
#include "libc/sysv/consts/o.h"
|
||||||
|
#include "third_party/musl/ftw.h"
|
||||||
|
|
||||||
|
asm(".ident\t\"\\n\\n\
|
||||||
|
Musl libc (MIT License)\\n\
|
||||||
|
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
#define pthread_setcancelstate(...) /* no cosmo pthreads support atm */
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
|
struct history
|
||||||
|
{
|
||||||
|
struct history *chain;
|
||||||
|
dev_t dev;
|
||||||
|
ino_t ino;
|
||||||
|
int level;
|
||||||
|
int base;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, struct FTW *), int fd_limit, int flags, struct history *h)
|
||||||
|
{
|
||||||
|
size_t l = strlen(path), j = l && path[l-1]=='/' ? l-1 : l;
|
||||||
|
struct stat st;
|
||||||
|
struct history new;
|
||||||
|
int type;
|
||||||
|
int r;
|
||||||
|
int dfd=-1;
|
||||||
|
int err=0;
|
||||||
|
struct FTW lev;
|
||||||
|
|
||||||
|
if ((flags & FTW_PHYS) ? lstat(path, &st) : stat(path, &st) < 0) {
|
||||||
|
if (!(flags & FTW_PHYS) && errno==ENOENT && !lstat(path, &st))
|
||||||
|
type = FTW_SLN;
|
||||||
|
else if (errno != EACCES) return -1;
|
||||||
|
else type = FTW_NS;
|
||||||
|
} else if (S_ISDIR(st.st_mode)) {
|
||||||
|
if (flags & FTW_DEPTH) type = FTW_DP;
|
||||||
|
else type = FTW_D;
|
||||||
|
} else if (S_ISLNK(st.st_mode)) {
|
||||||
|
if (flags & FTW_PHYS) type = FTW_SL;
|
||||||
|
else type = FTW_SLN;
|
||||||
|
} else {
|
||||||
|
type = FTW_F;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((flags & FTW_MOUNT) && h && st.st_dev != h->dev)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
new.chain = h;
|
||||||
|
new.dev = st.st_dev;
|
||||||
|
new.ino = st.st_ino;
|
||||||
|
new.level = h ? h->level+1 : 0;
|
||||||
|
new.base = j+1;
|
||||||
|
|
||||||
|
lev.level = new.level;
|
||||||
|
if (h) {
|
||||||
|
lev.base = h->base;
|
||||||
|
} else {
|
||||||
|
size_t k;
|
||||||
|
for (k=j; k && path[k]=='/'; k--);
|
||||||
|
for (; k && path[k-1]!='/'; k--);
|
||||||
|
lev.base = k;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == FTW_D || type == FTW_DP) {
|
||||||
|
dfd = open(path, O_RDONLY);
|
||||||
|
err = errno;
|
||||||
|
if (dfd < 0 && err == EACCES) type = FTW_DNR;
|
||||||
|
if (!fd_limit) close(dfd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(flags & FTW_DEPTH) && (r=fn(path, &st, type, &lev)))
|
||||||
|
return r;
|
||||||
|
|
||||||
|
for (; h; h = h->chain)
|
||||||
|
if (h->dev == st.st_dev && h->ino == st.st_ino)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if ((type == FTW_D || type == FTW_DP) && fd_limit) {
|
||||||
|
if (dfd < 0) {
|
||||||
|
errno = err;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
DIR *d = fdopendir(dfd);
|
||||||
|
if (d) {
|
||||||
|
struct dirent *de;
|
||||||
|
while ((de = readdir(d))) {
|
||||||
|
if (de->d_name[0] == '.'
|
||||||
|
&& (!de->d_name[1]
|
||||||
|
|| (de->d_name[1]=='.'
|
||||||
|
&& !de->d_name[2]))) continue;
|
||||||
|
if (strlen(de->d_name) >= PATH_MAX-l) {
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
|
closedir(d);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
path[j]='/';
|
||||||
|
strcpy(path+j+1, de->d_name);
|
||||||
|
if ((r=do_nftw(path, fn, fd_limit-1, flags, &new))) {
|
||||||
|
closedir(d);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir(d);
|
||||||
|
} else {
|
||||||
|
close(dfd);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
path[l] = 0;
|
||||||
|
if ((flags & FTW_DEPTH) && (r=fn(path, &st, type, &lev)))
|
||||||
|
return r;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nftw(const char *path, int (*fn)(const char *, const struct stat *, int, struct FTW *), int fd_limit, int flags)
|
||||||
|
{
|
||||||
|
int r, cs;
|
||||||
|
size_t l;
|
||||||
|
char pathbuf[PATH_MAX+1];
|
||||||
|
|
||||||
|
if (fd_limit <= 0) return 0;
|
||||||
|
|
||||||
|
l = strlen(path);
|
||||||
|
if (l > PATH_MAX) {
|
||||||
|
errno = ENAMETOOLONG;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
memcpy(pathbuf, path, l+1);
|
||||||
|
|
||||||
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
|
||||||
|
r = do_nftw(pathbuf, fn, fd_limit, flags, NULL);
|
||||||
|
pthread_setcancelstate(cs, 0);
|
||||||
|
return r;
|
||||||
|
}
|
470
third_party/quickjs/Makefile
vendored
470
third_party/quickjs/Makefile
vendored
|
@ -1,470 +0,0 @@
|
||||||
#
|
|
||||||
# QuickJS Javascript Engine
|
|
||||||
#
|
|
||||||
# Copyright (c) 2017-2021 Fabrice Bellard
|
|
||||||
# Copyright (c) 2017-2021 Charlie Gordon
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to deal
|
|
||||||
# in the Software without restriction, including without limitation the rights
|
|
||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
# copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
# THE SOFTWARE.
|
|
||||||
|
|
||||||
ifeq ($(shell uname -s),Darwin)
|
|
||||||
CONFIG_DARWIN=y
|
|
||||||
endif
|
|
||||||
# Windows cross compilation from Linux
|
|
||||||
#CONFIG_WIN32=y
|
|
||||||
# use link time optimization (smaller and faster executables but slower build)
|
|
||||||
CONFIG_LTO=y
|
|
||||||
# consider warnings as errors (for development)
|
|
||||||
#CONFIG_WERROR=y
|
|
||||||
# force 32 bit build for some utilities
|
|
||||||
#CONFIG_M32=y
|
|
||||||
|
|
||||||
ifdef CONFIG_DARWIN
|
|
||||||
# use clang instead of gcc
|
|
||||||
CONFIG_CLANG=y
|
|
||||||
CONFIG_DEFAULT_AR=y
|
|
||||||
endif
|
|
||||||
|
|
||||||
# installation directory
|
|
||||||
prefix=/usr/local
|
|
||||||
|
|
||||||
# use the gprof profiler
|
|
||||||
#CONFIG_PROFILE=y
|
|
||||||
# use address sanitizer
|
|
||||||
#CONFIG_ASAN=y
|
|
||||||
# include the code for BigInt/BigFloat/BigDecimal and math mode
|
|
||||||
CONFIG_BIGNUM=y
|
|
||||||
|
|
||||||
OBJDIR=.obj
|
|
||||||
|
|
||||||
ifdef CONFIG_WIN32
|
|
||||||
ifdef CONFIG_M32
|
|
||||||
CROSS_PREFIX=i686-w64-mingw32-
|
|
||||||
else
|
|
||||||
CROSS_PREFIX=x86_64-w64-mingw32-
|
|
||||||
endif
|
|
||||||
EXE=.exe
|
|
||||||
else
|
|
||||||
CROSS_PREFIX=
|
|
||||||
EXE=
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_CLANG
|
|
||||||
HOST_CC=clang
|
|
||||||
CC=$(CROSS_PREFIX)clang
|
|
||||||
CFLAGS=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d
|
|
||||||
CFLAGS += -Wextra
|
|
||||||
CFLAGS += -Wno-sign-compare
|
|
||||||
CFLAGS += -Wno-missing-field-initializers
|
|
||||||
CFLAGS += -Wundef -Wuninitialized
|
|
||||||
CFLAGS += -Wunused -Wno-unused-parameter
|
|
||||||
CFLAGS += -Wwrite-strings
|
|
||||||
CFLAGS += -Wchar-subscripts -funsigned-char
|
|
||||||
CFLAGS += -MMD -MF $(OBJDIR)/$(@F).d
|
|
||||||
ifdef CONFIG_DEFAULT_AR
|
|
||||||
AR=$(CROSS_PREFIX)ar
|
|
||||||
else
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
AR=$(CROSS_PREFIX)llvm-ar
|
|
||||||
else
|
|
||||||
AR=$(CROSS_PREFIX)ar
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
HOST_CC=gcc
|
|
||||||
CC=$(CROSS_PREFIX)gcc
|
|
||||||
CFLAGS=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d
|
|
||||||
CFLAGS += -Wno-array-bounds -Wno-format-truncation
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
AR=$(CROSS_PREFIX)gcc-ar
|
|
||||||
else
|
|
||||||
AR=$(CROSS_PREFIX)ar
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
STRIP=$(CROSS_PREFIX)strip
|
|
||||||
ifdef CONFIG_WERROR
|
|
||||||
CFLAGS+=-Werror
|
|
||||||
endif
|
|
||||||
DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(shell cat VERSION)\"
|
|
||||||
ifdef CONFIG_BIGNUM
|
|
||||||
DEFINES+=-DCONFIG_BIGNUM
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_WIN32
|
|
||||||
DEFINES+=-D__USE_MINGW_ANSI_STDIO # for standard snprintf behavior
|
|
||||||
endif
|
|
||||||
|
|
||||||
CFLAGS+=$(DEFINES)
|
|
||||||
CFLAGS_DEBUG=$(CFLAGS) -O0
|
|
||||||
CFLAGS_SMALL=$(CFLAGS) -Os
|
|
||||||
CFLAGS_OPT=$(CFLAGS) -O2
|
|
||||||
CFLAGS_NOLTO:=$(CFLAGS_OPT)
|
|
||||||
LDFLAGS=-g
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
CFLAGS_SMALL+=-flto
|
|
||||||
CFLAGS_OPT+=-flto
|
|
||||||
LDFLAGS+=-flto
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_PROFILE
|
|
||||||
CFLAGS+=-p
|
|
||||||
LDFLAGS+=-p
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_ASAN
|
|
||||||
CFLAGS+=-fsanitize=address -fno-omit-frame-pointer
|
|
||||||
LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_WIN32
|
|
||||||
LDEXPORT=
|
|
||||||
else
|
|
||||||
LDEXPORT=-rdynamic
|
|
||||||
endif
|
|
||||||
|
|
||||||
PROGS=qjs$(EXE) qjsc$(EXE) run-test262
|
|
||||||
ifneq ($(CROSS_PREFIX),)
|
|
||||||
QJSC_CC=gcc
|
|
||||||
QJSC=./host-qjsc
|
|
||||||
PROGS+=$(QJSC)
|
|
||||||
else
|
|
||||||
QJSC_CC=$(CC)
|
|
||||||
QJSC=./qjsc$(EXE)
|
|
||||||
endif
|
|
||||||
ifndef CONFIG_WIN32
|
|
||||||
PROGS+=qjscalc
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_M32
|
|
||||||
PROGS+=qjs32 qjs32_s
|
|
||||||
endif
|
|
||||||
PROGS+=libquickjs.a
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
PROGS+=libquickjs.lto.a
|
|
||||||
endif
|
|
||||||
|
|
||||||
# examples
|
|
||||||
ifeq ($(CROSS_PREFIX),)
|
|
||||||
ifdef CONFIG_ASAN
|
|
||||||
PROGS+=
|
|
||||||
else
|
|
||||||
PROGS+=examples/hello examples/hello_module examples/test_fib
|
|
||||||
ifndef CONFIG_DARWIN
|
|
||||||
PROGS+=examples/fib.so examples/point.so
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
all: $(OBJDIR) $(OBJDIR)/quickjs.check.o $(OBJDIR)/qjs.check.o $(PROGS)
|
|
||||||
|
|
||||||
QJS_LIB_OBJS=$(OBJDIR)/quickjs.o $(OBJDIR)/libregexp.o $(OBJDIR)/libunicode.o $(OBJDIR)/cutils.o $(OBJDIR)/quickjs-libc.o
|
|
||||||
|
|
||||||
QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(QJS_LIB_OBJS)
|
|
||||||
ifdef CONFIG_BIGNUM
|
|
||||||
QJS_LIB_OBJS+=$(OBJDIR)/libbf.o
|
|
||||||
QJS_OBJS+=$(OBJDIR)/qjscalc.o
|
|
||||||
endif
|
|
||||||
|
|
||||||
HOST_LIBS=-lm -ldl -lpthread
|
|
||||||
LIBS=-lm
|
|
||||||
ifndef CONFIG_WIN32
|
|
||||||
LIBS+=-ldl -lpthread
|
|
||||||
endif
|
|
||||||
LIBS+=$(EXTRA_LIBS)
|
|
||||||
|
|
||||||
$(OBJDIR):
|
|
||||||
mkdir -p $(OBJDIR) $(OBJDIR)/examples $(OBJDIR)/tests
|
|
||||||
|
|
||||||
qjs$(EXE): $(QJS_OBJS)
|
|
||||||
$(CC) $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
qjs-debug$(EXE): $(patsubst %.o, %.debug.o, $(QJS_OBJS))
|
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
qjsc$(EXE): $(OBJDIR)/qjsc.o $(QJS_LIB_OBJS)
|
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
ifneq ($(CROSS_PREFIX),)
|
|
||||||
|
|
||||||
$(QJSC): $(OBJDIR)/qjsc.host.o \
|
|
||||||
$(patsubst %.o, %.host.o, $(QJS_LIB_OBJS))
|
|
||||||
$(HOST_CC) $(LDFLAGS) -o $@ $^ $(HOST_LIBS)
|
|
||||||
|
|
||||||
endif #CROSS_PREFIX
|
|
||||||
|
|
||||||
QJSC_DEFINES:=-DCONFIG_CC=\"$(QJSC_CC)\" -DCONFIG_PREFIX=\"$(prefix)\"
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
QJSC_DEFINES+=-DCONFIG_LTO
|
|
||||||
endif
|
|
||||||
QJSC_HOST_DEFINES:=-DCONFIG_CC=\"$(HOST_CC)\" -DCONFIG_PREFIX=\"$(prefix)\"
|
|
||||||
|
|
||||||
$(OBJDIR)/qjsc.o: CFLAGS+=$(QJSC_DEFINES)
|
|
||||||
$(OBJDIR)/qjsc.host.o: CFLAGS+=$(QJSC_HOST_DEFINES)
|
|
||||||
|
|
||||||
qjs32: $(patsubst %.o, %.m32.o, $(QJS_OBJS))
|
|
||||||
$(CC) -m32 $(LDFLAGS) $(LDEXPORT) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
qjs32_s: $(patsubst %.o, %.m32s.o, $(QJS_OBJS))
|
|
||||||
$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
@size $@
|
|
||||||
|
|
||||||
qjscalc: qjs
|
|
||||||
ln -sf $< $@
|
|
||||||
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
LTOEXT=.lto
|
|
||||||
else
|
|
||||||
LTOEXT=
|
|
||||||
endif
|
|
||||||
|
|
||||||
libquickjs$(LTOEXT).a: $(QJS_LIB_OBJS)
|
|
||||||
$(AR) rcs $@ $^
|
|
||||||
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
libquickjs.a: $(patsubst %.o, %.nolto.o, $(QJS_LIB_OBJS))
|
|
||||||
$(AR) rcs $@ $^
|
|
||||||
endif # CONFIG_LTO
|
|
||||||
|
|
||||||
repl.c: $(QJSC) repl.js
|
|
||||||
$(QJSC) -c -o $@ -m repl.js
|
|
||||||
|
|
||||||
qjscalc.c: $(QJSC) qjscalc.js
|
|
||||||
$(QJSC) -fbignum -c -o $@ qjscalc.js
|
|
||||||
|
|
||||||
ifneq ($(wildcard unicode/UnicodeData.txt),)
|
|
||||||
$(OBJDIR)/libunicode.o $(OBJDIR)/libunicode.m32.o $(OBJDIR)/libunicode.m32s.o \
|
|
||||||
$(OBJDIR)/libunicode.nolto.o: libunicode-table.h
|
|
||||||
|
|
||||||
libunicode-table.h: unicode_gen
|
|
||||||
./unicode_gen unicode $@
|
|
||||||
endif
|
|
||||||
|
|
||||||
run-test262: $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS)
|
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
run-test262-debug: $(patsubst %.o, %.debug.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS))
|
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
run-test262-32: $(patsubst %.o, %.m32.o, $(OBJDIR)/run-test262.o $(QJS_LIB_OBJS))
|
|
||||||
$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
# object suffix order: nolto, [m32|m32s]
|
|
||||||
|
|
||||||
$(OBJDIR)/%.o: %.c | $(OBJDIR)
|
|
||||||
$(CC) $(CFLAGS_OPT) -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJDIR)/%.host.o: %.c | $(OBJDIR)
|
|
||||||
$(HOST_CC) $(CFLAGS_OPT) -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJDIR)/%.pic.o: %.c | $(OBJDIR)
|
|
||||||
$(CC) $(CFLAGS_OPT) -fPIC -DJS_SHARED_LIBRARY -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJDIR)/%.nolto.o: %.c | $(OBJDIR)
|
|
||||||
$(CC) $(CFLAGS_NOLTO) -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJDIR)/%.m32.o: %.c | $(OBJDIR)
|
|
||||||
$(CC) -m32 $(CFLAGS_OPT) -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJDIR)/%.m32s.o: %.c | $(OBJDIR)
|
|
||||||
$(CC) -m32 $(CFLAGS_SMALL) -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJDIR)/%.debug.o: %.c | $(OBJDIR)
|
|
||||||
$(CC) $(CFLAGS_DEBUG) -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJDIR)/%.check.o: %.c | $(OBJDIR)
|
|
||||||
$(CC) $(CFLAGS) -DCONFIG_CHECK_JSVALUE -c -o $@ $<
|
|
||||||
|
|
||||||
regexp_test: libregexp.c libunicode.c cutils.c
|
|
||||||
$(CC) $(LDFLAGS) $(CFLAGS) -DTEST -o $@ libregexp.c libunicode.c cutils.c $(LIBS)
|
|
||||||
|
|
||||||
unicode_gen: $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o libunicode.c unicode_gen_def.h
|
|
||||||
$(HOST_CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJDIR)/unicode_gen.host.o $(OBJDIR)/cutils.host.o
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f repl.c qjscalc.c out.c
|
|
||||||
rm -f *.a *.o *.d *~ unicode_gen regexp_test $(PROGS)
|
|
||||||
rm -f hello.c test_fib.c
|
|
||||||
rm -f examples/*.so tests/*.so
|
|
||||||
rm -rf $(OBJDIR)/ *.dSYM/ qjs-debug
|
|
||||||
rm -rf run-test262-debug run-test262-32
|
|
||||||
|
|
||||||
install: all
|
|
||||||
mkdir -p "$(DESTDIR)$(prefix)/bin"
|
|
||||||
$(STRIP) qjs qjsc
|
|
||||||
install -m755 qjs qjsc "$(DESTDIR)$(prefix)/bin"
|
|
||||||
ln -sf qjs "$(DESTDIR)$(prefix)/bin/qjscalc"
|
|
||||||
mkdir -p "$(DESTDIR)$(prefix)/lib/quickjs"
|
|
||||||
install -m644 libquickjs.a "$(DESTDIR)$(prefix)/lib/quickjs"
|
|
||||||
ifdef CONFIG_LTO
|
|
||||||
install -m644 libquickjs.lto.a "$(DESTDIR)$(prefix)/lib/quickjs"
|
|
||||||
endif
|
|
||||||
mkdir -p "$(DESTDIR)$(prefix)/include/quickjs"
|
|
||||||
install -m644 quickjs.h quickjs-libc.h "$(DESTDIR)$(prefix)/include/quickjs"
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# examples
|
|
||||||
|
|
||||||
# example of static JS compilation
|
|
||||||
HELLO_SRCS=examples/hello.js
|
|
||||||
HELLO_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
|
|
||||||
-fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
|
|
||||||
-fno-date -fno-module-loader
|
|
||||||
ifdef CONFIG_BIGNUM
|
|
||||||
HELLO_OPTS+=-fno-bigint
|
|
||||||
endif
|
|
||||||
|
|
||||||
hello.c: $(QJSC) $(HELLO_SRCS)
|
|
||||||
$(QJSC) -e $(HELLO_OPTS) -o $@ $(HELLO_SRCS)
|
|
||||||
|
|
||||||
ifdef CONFIG_M32
|
|
||||||
examples/hello: $(OBJDIR)/hello.m32s.o $(patsubst %.o, %.m32s.o, $(QJS_LIB_OBJS))
|
|
||||||
$(CC) -m32 $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
else
|
|
||||||
examples/hello: $(OBJDIR)/hello.o $(QJS_LIB_OBJS)
|
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# example of static JS compilation with modules
|
|
||||||
HELLO_MODULE_SRCS=examples/hello_module.js
|
|
||||||
HELLO_MODULE_OPTS=-fno-string-normalize -fno-map -fno-promise -fno-typedarray \
|
|
||||||
-fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
|
|
||||||
-fno-date -m
|
|
||||||
examples/hello_module: $(QJSC) libquickjs$(LTOEXT).a $(HELLO_MODULE_SRCS)
|
|
||||||
$(QJSC) $(HELLO_MODULE_OPTS) -o $@ $(HELLO_MODULE_SRCS)
|
|
||||||
|
|
||||||
# use of an external C module (static compilation)
|
|
||||||
|
|
||||||
test_fib.c: $(QJSC) examples/test_fib.js
|
|
||||||
$(QJSC) -e -M examples/fib.so,fib -m -o $@ examples/test_fib.js
|
|
||||||
|
|
||||||
examples/test_fib: $(OBJDIR)/test_fib.o $(OBJDIR)/examples/fib.o libquickjs$(LTOEXT).a
|
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
examples/fib.so: $(OBJDIR)/examples/fib.pic.o
|
|
||||||
$(CC) $(LDFLAGS) -shared -o $@ $^
|
|
||||||
|
|
||||||
examples/point.so: $(OBJDIR)/examples/point.pic.o
|
|
||||||
$(CC) $(LDFLAGS) -shared -o $@ $^
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# documentation
|
|
||||||
|
|
||||||
DOCS=doc/quickjs.pdf doc/quickjs.html doc/jsbignum.pdf doc/jsbignum.html
|
|
||||||
|
|
||||||
build_doc: $(DOCS)
|
|
||||||
|
|
||||||
clean_doc:
|
|
||||||
rm -f $(DOCS)
|
|
||||||
|
|
||||||
doc/%.pdf: doc/%.texi
|
|
||||||
texi2pdf --clean -o $@ -q $<
|
|
||||||
|
|
||||||
doc/%.html.pre: doc/%.texi
|
|
||||||
makeinfo --html --no-headers --no-split --number-sections -o $@ $<
|
|
||||||
|
|
||||||
doc/%.html: doc/%.html.pre
|
|
||||||
sed -e 's|</style>|</style>\n<meta name="viewport" content="width=device-width, initial-scale=1.0">|' < $< > $@
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# tests
|
|
||||||
|
|
||||||
ifndef CONFIG_DARWIN
|
|
||||||
test: tests/bjson.so examples/point.so
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_M32
|
|
||||||
test: qjs32
|
|
||||||
endif
|
|
||||||
|
|
||||||
test: qjs
|
|
||||||
./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
|
|
||||||
ifndef CONFIG_DARWIN
|
|
||||||
ifdef CONFIG_BIGNUM
|
|
||||||
./qjs --bignum tests/test_bjson.js
|
|
||||||
else
|
|
||||||
./qjs tests/test_bjson.js
|
|
||||||
endif
|
|
||||||
./qjs examples/test_point.js
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_BIGNUM
|
|
||||||
./qjs --bignum tests/test_op_overloading.js
|
|
||||||
./qjs --bignum tests/test_bignum.js
|
|
||||||
./qjs --qjscalc tests/test_qjscalc.js
|
|
||||||
endif
|
|
||||||
ifdef CONFIG_M32
|
|
||||||
./qjs32 tests/test_closure.js
|
|
||||||
./qjs32 tests/test_language.js
|
|
||||||
./qjs32 tests/test_builtin.js
|
|
||||||
./qjs32 tests/test_loop.js
|
|
||||||
./qjs32 tests/test_std.js
|
|
||||||
./qjs32 tests/test_worker.js
|
|
||||||
ifdef CONFIG_BIGNUM
|
|
||||||
./qjs32 --bignum tests/test_op_overloading.js
|
|
||||||
./qjs32 --bignum tests/test_bignum.js
|
|
||||||
./qjs32 --qjscalc tests/test_qjscalc.js
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
stats: qjs qjs32
|
|
||||||
./qjs -qd
|
|
||||||
./qjs32 -qd
|
|
||||||
|
|
||||||
microbench: qjs
|
|
||||||
./qjs tests/microbench.js
|
|
||||||
|
|
||||||
microbench-32: qjs32
|
|
||||||
./qjs32 tests/microbench.js
|
|
||||||
|
|
||||||
# ES5 tests (obsolete)
|
|
||||||
test2o: run-test262
|
|
||||||
time ./run-test262 -m -c test262o.conf
|
|
||||||
|
|
||||||
test2o-32: run-test262-32
|
|
||||||
time ./run-test262-32 -m -c test262o.conf
|
|
||||||
|
|
||||||
test2o-update: run-test262
|
|
||||||
./run-test262 -u -c test262o.conf
|
|
||||||
|
|
||||||
# Test262 tests
|
|
||||||
test2-default: run-test262
|
|
||||||
time ./run-test262 -m -c test262.conf
|
|
||||||
|
|
||||||
test2: run-test262
|
|
||||||
time ./run-test262 -m -c test262.conf -a
|
|
||||||
|
|
||||||
test2-32: run-test262-32
|
|
||||||
time ./run-test262-32 -m -c test262.conf -a
|
|
||||||
|
|
||||||
test2-update: run-test262
|
|
||||||
./run-test262 -u -c test262.conf -a
|
|
||||||
|
|
||||||
test2-check: run-test262
|
|
||||||
time ./run-test262 -m -c test262.conf -E -a
|
|
||||||
|
|
||||||
testall: all test microbench test2o test2
|
|
||||||
|
|
||||||
testall-32: all test-32 microbench-32 test2o-32 test2-32
|
|
||||||
|
|
||||||
testall-complete: testall testall-32
|
|
||||||
|
|
||||||
bench-v8: qjs
|
|
||||||
make -C tests/bench-v8
|
|
||||||
./qjs -d tests/bench-v8/combined.js
|
|
||||||
|
|
||||||
tests/bjson.so: $(OBJDIR)/tests/bjson.pic.o
|
|
||||||
$(CC) $(LDFLAGS) -shared -o $@ $^ $(LIBS)
|
|
||||||
|
|
||||||
-include $(wildcard $(OBJDIR)/*.d)
|
|
16
third_party/quickjs/cutils.c
vendored
16
third_party/quickjs/cutils.c
vendored
|
@ -22,12 +22,18 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <stdio.h>
|
#include "libc/mem/mem.h"
|
||||||
#include <stdarg.h>
|
#include "libc/str/str.h"
|
||||||
#include <string.h>
|
#include "third_party/quickjs/cutils.h"
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
|
QuickJS (MIT License)\\n\
|
||||||
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
void pstrcpy(char *buf, int buf_size, const char *str)
|
void pstrcpy(char *buf, int buf_size, const char *str)
|
||||||
{
|
{
|
||||||
|
|
59
third_party/quickjs/cutils.h
vendored
59
third_party/quickjs/cutils.h
vendored
|
@ -1,41 +1,17 @@
|
||||||
/*
|
#ifndef COSMOPOLITAN_THIRD_PARTY_QUICKJS_CUTILS_H_
|
||||||
* C utilities
|
#define COSMOPOLITAN_THIRD_PARTY_QUICKJS_CUTILS_H_
|
||||||
*
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
* Copyright (c) 2017 Fabrice Bellard
|
COSMOPOLITAN_C_START_
|
||||||
* Copyright (c) 2018 Charlie Gordon
|
/* clang-format off */
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef CUTILS_H
|
|
||||||
#define CUTILS_H
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
|
|
||||||
/* set if CPU is big endian */
|
/* set if CPU is big endian */
|
||||||
#undef WORDS_BIGENDIAN
|
#undef WORDS_BIGENDIAN
|
||||||
|
|
||||||
#define likely(x) __builtin_expect(!!(x), 1)
|
#define likely(x) __builtin_expect(!!(x), 1)
|
||||||
#define unlikely(x) __builtin_expect(!!(x), 0)
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||||||
#define force_inline inline __attribute__((always_inline))
|
#define force_inline forceinline
|
||||||
#define no_inline __attribute__((noinline))
|
#define no_inline noinline
|
||||||
#define __maybe_unused __attribute__((unused))
|
#define __maybe_unused __attribute__((__unused__))
|
||||||
|
|
||||||
#define xglue(x, y) x ## y
|
#define xglue(x, y) x ## y
|
||||||
#define glue(x, y) xglue(x, y)
|
#define glue(x, y) xglue(x, y)
|
||||||
|
@ -112,25 +88,25 @@ static inline int64_t min_int64(int64_t a, int64_t b)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WARNING: undefined if a = 0 */
|
/* WARNING: undefined if a = 0 */
|
||||||
static inline int clz32(unsigned int a)
|
forceinline int clz32(unsigned int a)
|
||||||
{
|
{
|
||||||
return __builtin_clz(a);
|
return __builtin_clz(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WARNING: undefined if a = 0 */
|
/* WARNING: undefined if a = 0 */
|
||||||
static inline int clz64(uint64_t a)
|
forceinline int clz64(uint64_t a)
|
||||||
{
|
{
|
||||||
return __builtin_clzll(a);
|
return __builtin_clzll(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WARNING: undefined if a = 0 */
|
/* WARNING: undefined if a = 0 */
|
||||||
static inline int ctz32(unsigned int a)
|
forceinline int ctz32(unsigned int a)
|
||||||
{
|
{
|
||||||
return __builtin_ctz(a);
|
return __builtin_ctz(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WARNING: undefined if a = 0 */
|
/* WARNING: undefined if a = 0 */
|
||||||
static inline int ctz64(uint64_t a)
|
forceinline int ctz64(uint64_t a)
|
||||||
{
|
{
|
||||||
return __builtin_ctzll(a);
|
return __builtin_ctzll(a);
|
||||||
}
|
}
|
||||||
|
@ -207,18 +183,18 @@ static inline void put_u8(uint8_t *tab, uint8_t val)
|
||||||
*tab = val;
|
*tab = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint16_t bswap16(uint16_t x)
|
forceinline uint16_t bswap16(uint16_t x)
|
||||||
{
|
{
|
||||||
return (x >> 8) | (x << 8);
|
return (x >> 8) | (x << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint32_t bswap32(uint32_t v)
|
forceinline uint32_t bswap32(uint32_t v)
|
||||||
{
|
{
|
||||||
return ((v & 0xff000000) >> 24) | ((v & 0x00ff0000) >> 8) |
|
return ((v & 0xff000000) >> 24) | ((v & 0x00ff0000) >> 8) |
|
||||||
((v & 0x0000ff00) << 8) | ((v & 0x000000ff) << 24);
|
((v & 0x0000ff00) << 8) | ((v & 0x000000ff) << 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint64_t bswap64(uint64_t v)
|
forceinline uint64_t bswap64(uint64_t v)
|
||||||
{
|
{
|
||||||
return ((v & ((uint64_t)0xff << (7 * 8))) >> (7 * 8)) |
|
return ((v & ((uint64_t)0xff << (7 * 8))) >> (7 * 8)) |
|
||||||
((v & ((uint64_t)0xff << (6 * 8))) >> (5 * 8)) |
|
((v & ((uint64_t)0xff << (6 * 8))) >> (5 * 8)) |
|
||||||
|
@ -294,4 +270,7 @@ void rqsort(void *base, size_t nmemb, size_t size,
|
||||||
int (*cmp)(const void *, const void *, void *),
|
int (*cmp)(const void *, const void *, void *),
|
||||||
void *arg);
|
void *arg);
|
||||||
|
|
||||||
#endif /* CUTILS_H */
|
/* clang-format on */
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_QUICKJS_CUTILS_H_ */
|
||||||
|
|
24
third_party/quickjs/libbf.c
vendored
24
third_party/quickjs/libbf.c
vendored
|
@ -21,19 +21,25 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/assert.h"
|
||||||
#include <stdio.h>
|
#include "libc/inttypes.h"
|
||||||
#include <inttypes.h>
|
#include "libc/stdio/stdio.h"
|
||||||
#include <math.h>
|
#include "libc/str/str.h"
|
||||||
#include <string.h>
|
#include "third_party/quickjs/cutils.h"
|
||||||
#include <assert.h>
|
#include "third_party/quickjs/libbf.h"
|
||||||
|
|
||||||
|
asm(".ident\t\"\\n\\n\
|
||||||
|
QuickJS (MIT License)\\n\
|
||||||
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* TODO(jart): let's use asm() instead of intel's strange and unusual veneer */
|
||||||
#ifdef __AVX2__
|
#ifdef __AVX2__
|
||||||
#include <immintrin.h>
|
#undef __AVX2__
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cutils.h"
|
/* clang-format off */
|
||||||
#include "libbf.h"
|
|
||||||
|
|
||||||
/* enable it to check the multiplication result */
|
/* enable it to check the multiplication result */
|
||||||
//#define USE_MUL_CHECK
|
//#define USE_MUL_CHECK
|
||||||
|
|
40
third_party/quickjs/libbf.h
vendored
40
third_party/quickjs/libbf.h
vendored
|
@ -1,31 +1,10 @@
|
||||||
/*
|
#ifndef COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBBF_H_
|
||||||
* Tiny arbitrary precision floating point library
|
#define COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBBF_H_
|
||||||
*
|
#include "libc/limits.h"
|
||||||
* Copyright (c) 2017-2021 Fabrice Bellard
|
#include "libc/literal.h"
|
||||||
*
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
COSMOPOLITAN_C_START_
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
/* clang-format off */
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef LIBBF_H
|
|
||||||
#define LIBBF_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#if INTPTR_MAX >= INT64_MAX
|
#if INTPTR_MAX >= INT64_MAX
|
||||||
#define LIMB_LOG2_BITS 6
|
#define LIMB_LOG2_BITS 6
|
||||||
|
@ -532,4 +511,7 @@ static inline int bfdec_resize(bfdec_t *r, limb_t len)
|
||||||
}
|
}
|
||||||
int bfdec_normalize_and_round(bfdec_t *r, limb_t prec1, bf_flags_t flags);
|
int bfdec_normalize_and_round(bfdec_t *r, limb_t prec1, bf_flags_t flags);
|
||||||
|
|
||||||
#endif /* LIBBF_H */
|
/* clang-format on */
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBBF_H_ */
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
#ifdef DEF
|
#ifdef DEF
|
||||||
|
|
||||||
DEF(invalid, 1) /* never used */
|
DEF(invalid, 1) /* never used */
|
27
third_party/quickjs/libregexp.c
vendored
27
third_party/quickjs/libregexp.c
vendored
|
@ -21,15 +21,22 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/assert.h"
|
||||||
#include <stdio.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <stdarg.h>
|
#include "libc/limits.h"
|
||||||
#include <inttypes.h>
|
#include "libc/mem/alloca.h"
|
||||||
#include <string.h>
|
#include "libc/stdio/stdio.h"
|
||||||
#include <assert.h>
|
#include "libc/str/str.h"
|
||||||
|
#include "third_party/quickjs/cutils.h"
|
||||||
|
#include "third_party/quickjs/libregexp.h"
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
#include "libregexp.h"
|
QuickJS (MIT License)\\n\
|
||||||
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TODO:
|
TODO:
|
||||||
|
@ -49,7 +56,7 @@
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
#define DEF(id, size) REOP_ ## id,
|
#define DEF(id, size) REOP_ ## id,
|
||||||
#include "libregexp-opcode.h"
|
#include "third_party/quickjs/libregexp-opcode.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
REOP_COUNT,
|
REOP_COUNT,
|
||||||
} REOPCodeEnum;
|
} REOPCodeEnum;
|
||||||
|
@ -96,7 +103,7 @@ static const REOpCode reopcode_info[REOP_COUNT] = {
|
||||||
#else
|
#else
|
||||||
#define DEF(id, size) { size },
|
#define DEF(id, size) { size },
|
||||||
#endif
|
#endif
|
||||||
#include "libregexp-opcode.h"
|
#include "third_party/quickjs/libregexp-opcode.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
40
third_party/quickjs/libregexp.h
vendored
40
third_party/quickjs/libregexp.h
vendored
|
@ -1,32 +1,9 @@
|
||||||
/*
|
#ifndef COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBREGEXP_H_
|
||||||
* Regular Expression Engine
|
#define COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBREGEXP_H_
|
||||||
*
|
#include "third_party/quickjs/libunicode.h"
|
||||||
* Copyright (c) 2017-2018 Fabrice Bellard
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
*
|
COSMOPOLITAN_C_START_
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
/* clang-format off */
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef LIBREGEXP_H
|
|
||||||
#define LIBREGEXP_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#include "libunicode.h"
|
|
||||||
|
|
||||||
#define LRE_BOOL int /* for documentation purposes */
|
#define LRE_BOOL int /* for documentation purposes */
|
||||||
|
|
||||||
|
@ -89,4 +66,7 @@ static inline int lre_js_is_ident_next(int c)
|
||||||
|
|
||||||
#undef LRE_BOOL
|
#undef LRE_BOOL
|
||||||
|
|
||||||
#endif /* LIBREGEXP_H */
|
/* clang-format on */
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBREGEXP_H_ */
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
|
/* clang-format off */
|
||||||
/* Compressed unicode tables */
|
/* Compressed unicode tables */
|
||||||
/* Automatically generated file - do not edit */
|
/* Automatically generated file - do not edit */
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
static const uint32_t case_conv_table1[361] = {
|
static const uint32_t case_conv_table1[361] = {
|
||||||
0x00209a30, 0x00309a00, 0x005a8173, 0x00601730,
|
0x00209a30, 0x00309a00, 0x005a8173, 0x00601730,
|
||||||
0x006c0730, 0x006f81b3, 0x00701700, 0x007c0700,
|
0x006c0730, 0x006f81b3, 0x00701700, 0x007c0700,
|
23
third_party/quickjs/libunicode.c
vendored
23
third_party/quickjs/libunicode.c
vendored
|
@ -21,15 +21,22 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/assert.h"
|
||||||
#include <stdio.h>
|
#include "libc/limits.h"
|
||||||
#include <stdarg.h>
|
#include "libc/stdio/stdio.h"
|
||||||
#include <string.h>
|
#include "libc/str/str.h"
|
||||||
#include <assert.h>
|
#include "third_party/quickjs/cutils.h"
|
||||||
|
#include "third_party/quickjs/libunicode.h"
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
#include "libunicode.h"
|
QuickJS (MIT License)\\n\
|
||||||
#include "libunicode-table.h"
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
|
#include "third_party/quickjs/libunicode-table.inc"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
RUN_TYPE_U,
|
RUN_TYPE_U,
|
||||||
|
|
38
third_party/quickjs/libunicode.h
vendored
38
third_party/quickjs/libunicode.h
vendored
|
@ -1,30 +1,9 @@
|
||||||
/*
|
#ifndef COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBUNICODE_H_
|
||||||
* Unicode utilities
|
#define COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBUNICODE_H_
|
||||||
*
|
#include "third_party/quickjs/libunicode.h"
|
||||||
* Copyright (c) 2017-2018 Fabrice Bellard
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
*
|
COSMOPOLITAN_C_START_
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
/* clang-format off */
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef LIBUNICODE_H
|
|
||||||
#define LIBUNICODE_H
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
|
|
||||||
#define LRE_BOOL int /* for documentation purposes */
|
#define LRE_BOOL int /* for documentation purposes */
|
||||||
|
|
||||||
|
@ -121,4 +100,7 @@ int unicode_prop(CharRange *cr, const char *prop_name);
|
||||||
|
|
||||||
#undef LRE_BOOL
|
#undef LRE_BOOL
|
||||||
|
|
||||||
#endif /* LIBUNICODE_H */
|
/* clang-format on */
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBUNICODE_H_ */
|
||||||
|
|
39
third_party/quickjs/list.h
vendored
39
third_party/quickjs/list.h
vendored
|
@ -1,32 +1,8 @@
|
||||||
/*
|
#ifndef COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIST_H_
|
||||||
* Linux klist like system
|
#define COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIST_H_
|
||||||
*
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
* Copyright (c) 2016-2017 Fabrice Bellard
|
COSMOPOLITAN_C_START_
|
||||||
*
|
/* clang-format off */
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef LIST_H
|
|
||||||
#define LIST_H
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
#include <stddef.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct list_head {
|
struct list_head {
|
||||||
struct list_head *prev;
|
struct list_head *prev;
|
||||||
|
@ -97,4 +73,7 @@ static inline int list_empty(struct list_head *el)
|
||||||
for(el = (head)->prev, el1 = el->prev; el != (head); \
|
for(el = (head)->prev, el1 = el->prev; el != (head); \
|
||||||
el = el1, el1 = el->prev)
|
el = el1, el1 = el->prev)
|
||||||
|
|
||||||
#endif /* LIST_H */
|
/* clang-format on */
|
||||||
|
COSMOPOLITAN_C_END_
|
||||||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIST_H_ */
|
||||||
|
|
39
third_party/quickjs/qjs.c
vendored
39
third_party/quickjs/qjs.c
vendored
|
@ -22,24 +22,25 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/assert.h"
|
||||||
#include <stdio.h>
|
#include "libc/calls/weirdtypes.h"
|
||||||
#include <stdarg.h>
|
#include "libc/log/log.h"
|
||||||
#include <inttypes.h>
|
#include "libc/mem/mem.h"
|
||||||
#include <string.h>
|
#include "libc/runtime/runtime.h"
|
||||||
#include <assert.h>
|
#include "libc/stdio/stdio.h"
|
||||||
#include <unistd.h>
|
#include "libc/str/str.h"
|
||||||
#include <errno.h>
|
#include "libc/time/time.h"
|
||||||
#include <fcntl.h>
|
#include "third_party/gdtoa/gdtoa.h"
|
||||||
#include <time.h>
|
#include "third_party/quickjs/cutils.h"
|
||||||
#if defined(__APPLE__)
|
#include "third_party/quickjs/quickjs-libc.h"
|
||||||
#include <malloc/malloc.h>
|
|
||||||
#elif defined(__linux__)
|
|
||||||
#include <malloc.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
#include "quickjs-libc.h"
|
QuickJS (MIT License)\\n\
|
||||||
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
extern const uint8_t qjsc_repl[];
|
extern const uint8_t qjsc_repl[];
|
||||||
extern const uint32_t qjsc_repl_size;
|
extern const uint32_t qjsc_repl_size;
|
||||||
|
@ -454,8 +455,10 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BIGNUM
|
||||||
if (load_jscalc)
|
if (load_jscalc)
|
||||||
bignum_ext = 1;
|
bignum_ext = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (trace_memory) {
|
if (trace_memory) {
|
||||||
js_trace_malloc_init(&trace_data);
|
js_trace_malloc_init(&trace_data);
|
||||||
|
@ -539,7 +542,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
if (empty_run && dump_memory) {
|
if (empty_run && dump_memory) {
|
||||||
clock_t t[5];
|
clock_t t[5];
|
||||||
double best[5];
|
double best[5] = {0};
|
||||||
int i, j;
|
int i, j;
|
||||||
for (i = 0; i < 100; i++) {
|
for (i = 0; i < 100; i++) {
|
||||||
t[0] = clock();
|
t[0] = clock();
|
||||||
|
|
39
third_party/quickjs/qjsc.c
vendored
39
third_party/quickjs/qjsc.c
vendored
|
@ -21,20 +21,26 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/assert.h"
|
||||||
#include <stdio.h>
|
#include "libc/calls/calls.h"
|
||||||
#include <stdarg.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <inttypes.h>
|
#include "libc/log/log.h"
|
||||||
#include <string.h>
|
#include "libc/mem/mem.h"
|
||||||
#include <assert.h>
|
#include "libc/stdio/stdio.h"
|
||||||
#include <unistd.h>
|
#include "libc/str/str.h"
|
||||||
#include <errno.h>
|
#include "libc/x/x.h"
|
||||||
#if !defined(_WIN32)
|
#include "third_party/gdtoa/gdtoa.h"
|
||||||
#include <sys/wait.h>
|
#include "third_party/getopt/getopt.h"
|
||||||
#endif
|
#include "third_party/quickjs/cutils.h"
|
||||||
|
#include "third_party/quickjs/quickjs-libc.h"
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
#include "quickjs-libc.h"
|
QuickJS (MIT License)\\n\
|
||||||
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *name;
|
char *name;
|
||||||
|
@ -208,7 +214,7 @@ static int js_module_dummy_init(JSContext *ctx, JSModuleDef *m)
|
||||||
|
|
||||||
static void find_unique_cname(char *cname, size_t cname_size)
|
static void find_unique_cname(char *cname, size_t cname_size)
|
||||||
{
|
{
|
||||||
char cname1[1024];
|
char *cname1;
|
||||||
int suffix_num;
|
int suffix_num;
|
||||||
size_t len, max_len;
|
size_t len, max_len;
|
||||||
assert(cname_size >= 32);
|
assert(cname_size >= 32);
|
||||||
|
@ -219,13 +225,16 @@ static void find_unique_cname(char *cname, size_t cname_size)
|
||||||
if (len > max_len)
|
if (len > max_len)
|
||||||
cname[max_len] = '\0';
|
cname[max_len] = '\0';
|
||||||
suffix_num = 1;
|
suffix_num = 1;
|
||||||
|
cname1 = NULL;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
snprintf(cname1, sizeof(cname1), "%s_%d", cname, suffix_num);
|
free(cname1);
|
||||||
|
cname1 = xasprintf("%s_%d", cname, suffix_num);
|
||||||
if (!namelist_find(&cname_list, cname1))
|
if (!namelist_find(&cname_list, cname1))
|
||||||
break;
|
break;
|
||||||
suffix_num++;
|
suffix_num++;
|
||||||
}
|
}
|
||||||
pstrcpy(cname, cname_size, cname1);
|
pstrcpy(cname, cname_size, cname1);
|
||||||
|
free(cname1);
|
||||||
}
|
}
|
||||||
|
|
||||||
JSModuleDef *jsc_module_loader(JSContext *ctx,
|
JSModuleDef *jsc_module_loader(JSContext *ctx,
|
||||||
|
|
105
third_party/quickjs/quickjs-libc.c
vendored
105
third_party/quickjs/quickjs-libc.c
vendored
|
@ -22,54 +22,36 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/assert.h"
|
||||||
#include <stdio.h>
|
#include "libc/calls/calls.h"
|
||||||
#include <stdarg.h>
|
#include "libc/calls/ioctl.h"
|
||||||
#include <inttypes.h>
|
#include "libc/calls/struct/winsize.h"
|
||||||
#include <string.h>
|
#include "libc/calls/termios.h"
|
||||||
#include <assert.h>
|
#include "libc/errno.h"
|
||||||
#include <unistd.h>
|
#include "libc/fmt/conv.h"
|
||||||
#include <errno.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <fcntl.h>
|
#include "libc/limits.h"
|
||||||
#include <sys/time.h>
|
#include "libc/runtime/dlfcn.h"
|
||||||
#include <time.h>
|
#include "libc/runtime/sysconf.h"
|
||||||
#include <signal.h>
|
#include "libc/sock/select.h"
|
||||||
#include <limits.h>
|
#include "libc/stdio/temp.h"
|
||||||
#include <sys/stat.h>
|
#include "libc/str/str.h"
|
||||||
#include <dirent.h>
|
#include "libc/sysv/consts/clock.h"
|
||||||
#if defined(_WIN32)
|
#include "libc/sysv/consts/o.h"
|
||||||
#include <windows.h>
|
#include "libc/sysv/consts/termios.h"
|
||||||
#include <conio.h>
|
#include "libc/sysv/consts/w.h"
|
||||||
#include <utime.h>
|
#include "libc/time/time.h"
|
||||||
#else
|
#include "third_party/quickjs/cutils.h"
|
||||||
#include <dlfcn.h>
|
#include "third_party/quickjs/list.h"
|
||||||
#include <termios.h>
|
#include "third_party/quickjs/quickjs-libc.h"
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
asm(".ident\t\"\\n\\n\
|
||||||
typedef sig_t sighandler_t;
|
QuickJS (MIT License)\\n\
|
||||||
#if !defined(environ)
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
#include <crt_externs.h>
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
#define environ (*_NSGetEnviron())
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
#endif
|
|
||||||
#endif /* __APPLE__ */
|
|
||||||
|
|
||||||
#endif
|
/* clang-format off */
|
||||||
|
|
||||||
#if !defined(_WIN32)
|
|
||||||
/* enable the os.Worker API. IT relies on POSIX threads */
|
|
||||||
#define USE_WORKER
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_WORKER
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <stdatomic.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "cutils.h"
|
|
||||||
#include "list.h"
|
|
||||||
#include "quickjs-libc.h"
|
|
||||||
|
|
||||||
/* TODO:
|
/* TODO:
|
||||||
- add socket calls
|
- add socket calls
|
||||||
|
@ -1463,7 +1445,9 @@ static JSClassDef js_std_file_class = {
|
||||||
.finalizer = js_std_file_finalizer,
|
.finalizer = js_std_file_finalizer,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const JSCFunctionListEntry js_std_error_props[] = {
|
static JSCFunctionListEntry js_std_error_props[11];
|
||||||
|
static textstartup void js_std_error_props_init() {
|
||||||
|
JSCFunctionListEntry props[] = {
|
||||||
/* various errno values */
|
/* various errno values */
|
||||||
#define DEF(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE )
|
#define DEF(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE )
|
||||||
DEF(EINVAL),
|
DEF(EINVAL),
|
||||||
|
@ -1479,6 +1463,10 @@ static const JSCFunctionListEntry js_std_error_props[] = {
|
||||||
DEF(EBADF),
|
DEF(EBADF),
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
_Static_assert(sizeof(js_std_error_props) == sizeof(props));
|
||||||
|
memcpy(js_std_error_props, props, sizeof(props));
|
||||||
|
}
|
||||||
|
const void *const js_std_error_props_ctor[] initarray = {js_std_error_props_init};
|
||||||
|
|
||||||
static const JSCFunctionListEntry js_std_funcs[] = {
|
static const JSCFunctionListEntry js_std_funcs[] = {
|
||||||
JS_CFUNC_DEF("exit", 1, js_std_exit ),
|
JS_CFUNC_DEF("exit", 1, js_std_exit ),
|
||||||
|
@ -2816,14 +2804,13 @@ static int my_execvpe(const char *filename, char **argv, char **envp)
|
||||||
|
|
||||||
execve(buf, argv, envp);
|
execve(buf, argv, envp);
|
||||||
|
|
||||||
switch(errno) {
|
if (errno == EACCES) {
|
||||||
case EACCES:
|
|
||||||
eacces_error = TRUE;
|
eacces_error = TRUE;
|
||||||
break;
|
} else if (errno == ENOENT) {
|
||||||
case ENOENT:
|
/* do nothing */
|
||||||
case ENOTDIR:
|
} else if (errno == ENOTDIR) {
|
||||||
break;
|
/* do nothing */
|
||||||
default:
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2958,7 +2945,7 @@ static JSValue js_os_exec(JSContext *ctx, JSValueConst this_val,
|
||||||
}
|
}
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
/* child */
|
/* child */
|
||||||
int fd_max = sysconf(_SC_OPEN_MAX);
|
int fd_max = 128 /* sysconf(_SC_OPEN_MAX) */;
|
||||||
|
|
||||||
/* remap the stdin/stdout/stderr handles if necessary */
|
/* remap the stdin/stdout/stderr handles if necessary */
|
||||||
for(i = 0; i < 3; i++) {
|
for(i = 0; i < 3; i++) {
|
||||||
|
@ -3577,7 +3564,9 @@ void js_std_set_worker_new_context_func(JSContext *(*func)(JSRuntime *rt))
|
||||||
|
|
||||||
#define OS_FLAG(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE )
|
#define OS_FLAG(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE )
|
||||||
|
|
||||||
static const JSCFunctionListEntry js_os_funcs[] = {
|
static JSCFunctionListEntry js_os_funcs[68];
|
||||||
|
static textstartup void js_os_funcs_init() {
|
||||||
|
JSCFunctionListEntry funcs[] = {
|
||||||
JS_CFUNC_DEF("open", 2, js_os_open ),
|
JS_CFUNC_DEF("open", 2, js_os_open ),
|
||||||
OS_FLAG(O_RDONLY),
|
OS_FLAG(O_RDONLY),
|
||||||
OS_FLAG(O_WRONLY),
|
OS_FLAG(O_WRONLY),
|
||||||
|
@ -3658,6 +3647,10 @@ static const JSCFunctionListEntry js_os_funcs[] = {
|
||||||
JS_CFUNC_DEF("dup2", 2, js_os_dup2 ),
|
JS_CFUNC_DEF("dup2", 2, js_os_dup2 ),
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
_Static_assert(sizeof(js_os_funcs) == sizeof(funcs));
|
||||||
|
memcpy(js_os_funcs, funcs, sizeof(funcs));
|
||||||
|
}
|
||||||
|
const void *const js_os_funcs_ctor[] initarray = {js_os_funcs_init};
|
||||||
|
|
||||||
static int js_os_init(JSContext *ctx, JSModuleDef *m)
|
static int js_os_init(JSContext *ctx, JSModuleDef *m)
|
||||||
{
|
{
|
||||||
|
|
49
third_party/quickjs/quickjs-libc.h
vendored
49
third_party/quickjs/quickjs-libc.h
vendored
|
@ -1,37 +1,9 @@
|
||||||
/*
|
#ifndef COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBC_H_
|
||||||
* QuickJS C library
|
#define COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBC_H_
|
||||||
*
|
#include "third_party/quickjs/quickjs.h"
|
||||||
* Copyright (c) 2017-2018 Fabrice Bellard
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
*
|
COSMOPOLITAN_C_START_
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
/* clang-format off */
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef QUICKJS_LIBC_H
|
|
||||||
#define QUICKJS_LIBC_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "quickjs.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
JSModuleDef *js_init_module_std(JSContext *ctx, const char *module_name);
|
JSModuleDef *js_init_module_std(JSContext *ctx, const char *module_name);
|
||||||
JSModuleDef *js_init_module_os(JSContext *ctx, const char *module_name);
|
JSModuleDef *js_init_module_os(JSContext *ctx, const char *module_name);
|
||||||
|
@ -52,8 +24,7 @@ void js_std_promise_rejection_tracker(JSContext *ctx, JSValueConst promise,
|
||||||
JS_BOOL is_handled, void *opaque);
|
JS_BOOL is_handled, void *opaque);
|
||||||
void js_std_set_worker_new_context_func(JSContext *(*func)(JSRuntime *rt));
|
void js_std_set_worker_new_context_func(JSContext *(*func)(JSRuntime *rt));
|
||||||
|
|
||||||
#ifdef __cplusplus
|
/* clang-format on */
|
||||||
} /* extern "C" { */
|
COSMOPOLITAN_C_END_
|
||||||
#endif
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_QUICKJS_LIBC_H_ */
|
||||||
#endif /* QUICKJS_LIBC_H */
|
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
#ifdef FMT
|
#ifdef FMT
|
||||||
FMT(none)
|
FMT(none)
|
||||||
FMT(none_int)
|
FMT(none_int)
|
97
third_party/quickjs/quickjs.c
vendored
97
third_party/quickjs/quickjs.c
vendored
|
@ -22,31 +22,32 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "third_party/quickjs/cutils.h"
|
||||||
#include <stdio.h>
|
#include "third_party/quickjs/libregexp.h"
|
||||||
#include <stdarg.h>
|
#include "third_party/quickjs/list.h"
|
||||||
#include <inttypes.h>
|
#include "third_party/quickjs/quickjs.h"
|
||||||
#include <string.h>
|
#include "libc/assert.h"
|
||||||
#include <assert.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <sys/time.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <time.h>
|
#include "libc/inttypes.h"
|
||||||
#include <fenv.h>
|
#include "libc/mem/alloca.h"
|
||||||
#include <math.h>
|
#include "third_party/gdtoa/gdtoa.h"
|
||||||
#if defined(__APPLE__)
|
#include "libc/fmt/conv.h"
|
||||||
#include <malloc/malloc.h>
|
#include "libc/runtime/fenv.h"
|
||||||
#elif defined(__linux__)
|
#include "libc/time/time.h"
|
||||||
#include <malloc.h>
|
#include "libc/time/time.h"
|
||||||
#elif defined(__FreeBSD__)
|
#include "libc/calls/weirdtypes.h"
|
||||||
#include <malloc_np.h>
|
#include "libc/time/struct/tm.h"
|
||||||
#endif
|
#include "libc/log/log.h"
|
||||||
|
#include "third_party/quickjs/libbf.h"
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
#include "list.h"
|
QuickJS (MIT License)\\n\
|
||||||
#include "quickjs.h"
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
#include "libregexp.h"
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
#ifdef CONFIG_BIGNUM
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
#include "libbf.h"
|
|
||||||
#endif
|
/* clang-format off */
|
||||||
|
|
||||||
#define OPTIMIZE 1
|
#define OPTIMIZE 1
|
||||||
#define SHORT_OPCODES 1
|
#define SHORT_OPCODES 1
|
||||||
|
@ -69,7 +70,7 @@
|
||||||
|
|
||||||
/* define to include Atomics.* operations which depend on the OS
|
/* define to include Atomics.* operations which depend on the OS
|
||||||
threads */
|
threads */
|
||||||
#if !defined(EMSCRIPTEN)
|
#if !defined(EMSCRIPTEN) && defined(USE_WORKER)
|
||||||
#define CONFIG_ATOMICS
|
#define CONFIG_ATOMICS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -109,12 +110,6 @@
|
||||||
/* test the GC by forcing it before each object allocation */
|
/* test the GC by forcing it before each object allocation */
|
||||||
//#define FORCE_GC_AT_MALLOC
|
//#define FORCE_GC_AT_MALLOC
|
||||||
|
|
||||||
#ifdef CONFIG_ATOMICS
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <stdatomic.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
/* classid tag */ /* union usage | properties */
|
/* classid tag */ /* union usage | properties */
|
||||||
JS_CLASS_OBJECT = 1, /* must be first */
|
JS_CLASS_OBJECT = 1, /* must be first */
|
||||||
|
@ -952,7 +947,7 @@ struct JSObject {
|
||||||
enum {
|
enum {
|
||||||
__JS_ATOM_NULL = JS_ATOM_NULL,
|
__JS_ATOM_NULL = JS_ATOM_NULL,
|
||||||
#define DEF(name, str) JS_ATOM_ ## name,
|
#define DEF(name, str) JS_ATOM_ ## name,
|
||||||
#include "quickjs-atom.h"
|
#include "third_party/quickjs/quickjs-atom.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
JS_ATOM_END,
|
JS_ATOM_END,
|
||||||
};
|
};
|
||||||
|
@ -961,14 +956,14 @@ enum {
|
||||||
|
|
||||||
static const char js_atom_init[] =
|
static const char js_atom_init[] =
|
||||||
#define DEF(name, str) str "\0"
|
#define DEF(name, str) str "\0"
|
||||||
#include "quickjs-atom.h"
|
#include "third_party/quickjs/quickjs-atom.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
;
|
;
|
||||||
|
|
||||||
typedef enum OPCodeFormat {
|
typedef enum OPCodeFormat {
|
||||||
#define FMT(f) OP_FMT_ ## f,
|
#define FMT(f) OP_FMT_ ## f,
|
||||||
#define DEF(id, size, n_pop, n_push, f)
|
#define DEF(id, size, n_pop, n_push, f)
|
||||||
#include "quickjs-opcode.h"
|
#include "third_party/quickjs/quickjs-opcode.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
#undef FMT
|
#undef FMT
|
||||||
} OPCodeFormat;
|
} OPCodeFormat;
|
||||||
|
@ -977,7 +972,7 @@ enum OPCodeEnum {
|
||||||
#define FMT(f)
|
#define FMT(f)
|
||||||
#define DEF(id, size, n_pop, n_push, f) OP_ ## id,
|
#define DEF(id, size, n_pop, n_push, f) OP_ ## id,
|
||||||
#define def(id, size, n_pop, n_push, f)
|
#define def(id, size, n_pop, n_push, f)
|
||||||
#include "quickjs-opcode.h"
|
#include "third_party/quickjs/quickjs-opcode.inc"
|
||||||
#undef def
|
#undef def
|
||||||
#undef DEF
|
#undef DEF
|
||||||
#undef FMT
|
#undef FMT
|
||||||
|
@ -988,7 +983,7 @@ enum OPCodeEnum {
|
||||||
#define FMT(f)
|
#define FMT(f)
|
||||||
#define DEF(id, size, n_pop, n_push, f)
|
#define DEF(id, size, n_pop, n_push, f)
|
||||||
#define def(id, size, n_pop, n_push, f) OP_ ## id,
|
#define def(id, size, n_pop, n_push, f) OP_ ## id,
|
||||||
#include "quickjs-opcode.h"
|
#include "third_party/quickjs/quickjs-opcode.inc"
|
||||||
#undef def
|
#undef def
|
||||||
#undef DEF
|
#undef DEF
|
||||||
#undef FMT
|
#undef FMT
|
||||||
|
@ -1021,7 +1016,6 @@ static __exception int JS_ToArrayLengthFree(JSContext *ctx, uint32_t *plen,
|
||||||
JSValue val, BOOL is_array_ctor);
|
JSValue val, BOOL is_array_ctor);
|
||||||
static JSValue JS_EvalObject(JSContext *ctx, JSValueConst this_obj,
|
static JSValue JS_EvalObject(JSContext *ctx, JSValueConst this_obj,
|
||||||
JSValueConst val, int flags, int scope_idx);
|
JSValueConst val, int flags, int scope_idx);
|
||||||
JSValue __attribute__((format(printf, 2, 3))) JS_ThrowInternalError(JSContext *ctx, const char *fmt, ...);
|
|
||||||
static __maybe_unused void JS_DumpAtoms(JSRuntime *rt);
|
static __maybe_unused void JS_DumpAtoms(JSRuntime *rt);
|
||||||
static __maybe_unused void JS_DumpString(JSRuntime *rt,
|
static __maybe_unused void JS_DumpString(JSRuntime *rt,
|
||||||
const JSString *p);
|
const JSString *p);
|
||||||
|
@ -1148,7 +1142,6 @@ static JSValue JS_ToBigDecimalFree(JSContext *ctx, JSValue val,
|
||||||
BOOL allow_null_or_undefined);
|
BOOL allow_null_or_undefined);
|
||||||
static bfdec_t *JS_ToBigDecimal(JSContext *ctx, JSValueConst val);
|
static bfdec_t *JS_ToBigDecimal(JSContext *ctx, JSValueConst val);
|
||||||
#endif
|
#endif
|
||||||
JSValue JS_ThrowOutOfMemory(JSContext *ctx);
|
|
||||||
static JSValue JS_ThrowTypeErrorRevokedProxy(JSContext *ctx);
|
static JSValue JS_ThrowTypeErrorRevokedProxy(JSContext *ctx);
|
||||||
static JSValue js_proxy_getPrototypeOf(JSContext *ctx, JSValueConst obj);
|
static JSValue js_proxy_getPrototypeOf(JSContext *ctx, JSValueConst obj);
|
||||||
static int js_proxy_setPrototypeOf(JSContext *ctx, JSValueConst obj,
|
static int js_proxy_setPrototypeOf(JSContext *ctx, JSValueConst obj,
|
||||||
|
@ -5181,7 +5174,7 @@ static void free_property(JSRuntime *rt, JSProperty *pr, int prop_flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static force_inline JSShapeProperty *find_own_property1(JSObject *p,
|
force_inline JSShapeProperty *find_own_property1(JSObject *p,
|
||||||
JSAtom atom)
|
JSAtom atom)
|
||||||
{
|
{
|
||||||
JSShape *sh;
|
JSShape *sh;
|
||||||
|
@ -5201,7 +5194,7 @@ static force_inline JSShapeProperty *find_own_property1(JSObject *p,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static force_inline JSShapeProperty *find_own_property(JSProperty **ppr,
|
force_inline JSShapeProperty *find_own_property(JSProperty **ppr,
|
||||||
JSObject *p,
|
JSObject *p,
|
||||||
JSAtom atom)
|
JSAtom atom)
|
||||||
{
|
{
|
||||||
|
@ -11303,11 +11296,11 @@ static char *i64toa(char *buf_end, int64_t n, unsigned int base)
|
||||||
static void js_ecvt1(double d, int n_digits, int *decpt, int *sign, char *buf,
|
static void js_ecvt1(double d, int n_digits, int *decpt, int *sign, char *buf,
|
||||||
int rounding_mode, char *buf1, int buf1_size)
|
int rounding_mode, char *buf1, int buf1_size)
|
||||||
{
|
{
|
||||||
if (rounding_mode != FE_TONEAREST)
|
/* if (rounding_mode != FE_TONEAREST) */
|
||||||
fesetround(rounding_mode);
|
/* fesetround(rounding_mode); */
|
||||||
snprintf(buf1, buf1_size, "%+.*e", n_digits - 1, d);
|
snprintf(buf1, buf1_size, "%+.*e", n_digits - 1, d);
|
||||||
if (rounding_mode != FE_TONEAREST)
|
/* if (rounding_mode != FE_TONEAREST) */
|
||||||
fesetround(FE_TONEAREST);
|
/* fesetround(FE_TONEAREST); */
|
||||||
*sign = (buf1[0] == '-');
|
*sign = (buf1[0] == '-');
|
||||||
/* mantissa */
|
/* mantissa */
|
||||||
buf[0] = buf1[1];
|
buf[0] = buf1[1];
|
||||||
|
@ -16223,7 +16216,7 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
|
||||||
#else
|
#else
|
||||||
#define def(id, size, n_pop, n_push, f) && case_default,
|
#define def(id, size, n_pop, n_push, f) && case_default,
|
||||||
#endif
|
#endif
|
||||||
#include "quickjs-opcode.h"
|
#include "third_party/quickjs/quickjs-opcode.inc"
|
||||||
[ OP_COUNT ... 255 ] = &&case_default
|
[ OP_COUNT ... 255 ] = &&case_default
|
||||||
};
|
};
|
||||||
#define SWITCH(pc) goto *dispatch_table[opcode = *pc++];
|
#define SWITCH(pc) goto *dispatch_table[opcode = *pc++];
|
||||||
|
@ -20121,7 +20114,7 @@ static const JSOpCode opcode_info[OP_COUNT + (OP_TEMP_END - OP_TEMP_START)] = {
|
||||||
#else
|
#else
|
||||||
#define DEF(id, size, n_pop, n_push, f) { size, n_pop, n_push, OP_FMT_ ## f },
|
#define DEF(id, size, n_pop, n_push, f) { size, n_pop, n_push, OP_FMT_ ## f },
|
||||||
#endif
|
#endif
|
||||||
#include "quickjs-opcode.h"
|
#include "third_party/quickjs/quickjs-opcode.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
#undef FMT
|
#undef FMT
|
||||||
};
|
};
|
||||||
|
@ -53615,12 +53608,12 @@ static JSValue js_atomics_op(JSContext *ctx,
|
||||||
a = func_name((_Atomic(uint32_t) *)ptr, v); \
|
a = func_name((_Atomic(uint32_t) *)ptr, v); \
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
OP(ADD, atomic_fetch_add)
|
/* OP(ADD, atomic_fetch_add) */
|
||||||
OP(AND, atomic_fetch_and)
|
/* OP(AND, atomic_fetch_and) */
|
||||||
OP(OR, atomic_fetch_or)
|
/* OP(OR, atomic_fetch_or) */
|
||||||
OP(SUB, atomic_fetch_sub)
|
/* OP(SUB, atomic_fetch_sub) */
|
||||||
OP(XOR, atomic_fetch_xor)
|
/* OP(XOR, atomic_fetch_xor) */
|
||||||
OP(EXCHANGE, atomic_exchange)
|
/* OP(EXCHANGE, atomic_exchange) */
|
||||||
#undef OP
|
#undef OP
|
||||||
|
|
||||||
case ATOMICS_OP_LOAD | (0 << 3):
|
case ATOMICS_OP_LOAD | (0 << 3):
|
||||||
|
|
69
third_party/quickjs/quickjs.h
vendored
69
third_party/quickjs/quickjs.h
vendored
|
@ -1,42 +1,16 @@
|
||||||
/*
|
#ifndef COSMOPOLITAN_THIRD_PARTY_QUICKJS_QUICKJS_H_
|
||||||
* QuickJS Javascript Engine
|
#define COSMOPOLITAN_THIRD_PARTY_QUICKJS_QUICKJS_H_
|
||||||
*
|
#include "libc/math.h"
|
||||||
* Copyright (c) 2017-2021 Fabrice Bellard
|
#include "libc/stdio/stdio.h"
|
||||||
* Copyright (c) 2017-2021 Charlie Gordon
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||||
*
|
COSMOPOLITAN_C_START_
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
/* clang-format off */
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef QUICKJS_H
|
|
||||||
#define QUICKJS_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__STRICT_ANSI__)
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__GNUC__) || defined(__clang__)
|
|
||||||
#define js_likely(x) __builtin_expect(!!(x), 1)
|
#define js_likely(x) __builtin_expect(!!(x), 1)
|
||||||
#define js_unlikely(x) __builtin_expect(!!(x), 0)
|
#define js_unlikely(x) __builtin_expect(!!(x), 0)
|
||||||
#define js_force_inline inline __attribute__((always_inline))
|
#define js_force_inline forceinline
|
||||||
#define __js_printf_like(f, a) __attribute__((format(printf, f, a)))
|
#define __js_printf_like(f, a) __attribute__((__format__(__printf__, f, a)))
|
||||||
#else
|
#else
|
||||||
#define js_likely(x) (x)
|
#define js_likely(x) (x)
|
||||||
#define js_unlikely(x) (x)
|
#define js_unlikely(x) (x)
|
||||||
|
@ -502,22 +476,22 @@ int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id);
|
||||||
|
|
||||||
/* value handling */
|
/* value handling */
|
||||||
|
|
||||||
static js_force_inline JSValue JS_NewBool(JSContext *ctx, JS_BOOL val)
|
js_force_inline JSValue JS_NewBool(JSContext *ctx, JS_BOOL val)
|
||||||
{
|
{
|
||||||
return JS_MKVAL(JS_TAG_BOOL, (val != 0));
|
return JS_MKVAL(JS_TAG_BOOL, (val != 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
static js_force_inline JSValue JS_NewInt32(JSContext *ctx, int32_t val)
|
js_force_inline JSValue JS_NewInt32(JSContext *ctx, int32_t val)
|
||||||
{
|
{
|
||||||
return JS_MKVAL(JS_TAG_INT, val);
|
return JS_MKVAL(JS_TAG_INT, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static js_force_inline JSValue JS_NewCatchOffset(JSContext *ctx, int32_t val)
|
js_force_inline JSValue JS_NewCatchOffset(JSContext *ctx, int32_t val)
|
||||||
{
|
{
|
||||||
return JS_MKVAL(JS_TAG_CATCH_OFFSET, val);
|
return JS_MKVAL(JS_TAG_CATCH_OFFSET, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static js_force_inline JSValue JS_NewInt64(JSContext *ctx, int64_t val)
|
js_force_inline JSValue JS_NewInt64(JSContext *ctx, int64_t val)
|
||||||
{
|
{
|
||||||
JSValue v;
|
JSValue v;
|
||||||
if (val == (int32_t)val) {
|
if (val == (int32_t)val) {
|
||||||
|
@ -528,7 +502,7 @@ static js_force_inline JSValue JS_NewInt64(JSContext *ctx, int64_t val)
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static js_force_inline JSValue JS_NewUint32(JSContext *ctx, uint32_t val)
|
js_force_inline JSValue JS_NewUint32(JSContext *ctx, uint32_t val)
|
||||||
{
|
{
|
||||||
JSValue v;
|
JSValue v;
|
||||||
if (val <= 0x7fffffff) {
|
if (val <= 0x7fffffff) {
|
||||||
|
@ -542,7 +516,7 @@ static js_force_inline JSValue JS_NewUint32(JSContext *ctx, uint32_t val)
|
||||||
JSValue JS_NewBigInt64(JSContext *ctx, int64_t v);
|
JSValue JS_NewBigInt64(JSContext *ctx, int64_t v);
|
||||||
JSValue JS_NewBigUint64(JSContext *ctx, uint64_t v);
|
JSValue JS_NewBigUint64(JSContext *ctx, uint64_t v);
|
||||||
|
|
||||||
static js_force_inline JSValue JS_NewFloat64(JSContext *ctx, double d)
|
js_force_inline JSValue JS_NewFloat64(JSContext *ctx, double d)
|
||||||
{
|
{
|
||||||
JSValue v;
|
JSValue v;
|
||||||
int32_t val;
|
int32_t val;
|
||||||
|
@ -723,7 +697,7 @@ int JS_IsArray(JSContext *ctx, JSValueConst val);
|
||||||
JSValue JS_GetPropertyInternal(JSContext *ctx, JSValueConst obj,
|
JSValue JS_GetPropertyInternal(JSContext *ctx, JSValueConst obj,
|
||||||
JSAtom prop, JSValueConst receiver,
|
JSAtom prop, JSValueConst receiver,
|
||||||
JS_BOOL throw_ref_error);
|
JS_BOOL throw_ref_error);
|
||||||
static js_force_inline JSValue JS_GetProperty(JSContext *ctx, JSValueConst this_obj,
|
js_force_inline JSValue JS_GetProperty(JSContext *ctx, JSValueConst this_obj,
|
||||||
JSAtom prop)
|
JSAtom prop)
|
||||||
{
|
{
|
||||||
return JS_GetPropertyInternal(ctx, this_obj, prop, this_obj, 0);
|
return JS_GetPropertyInternal(ctx, this_obj, prop, this_obj, 0);
|
||||||
|
@ -1042,8 +1016,7 @@ int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m,
|
||||||
#undef js_unlikely
|
#undef js_unlikely
|
||||||
#undef js_force_inline
|
#undef js_force_inline
|
||||||
|
|
||||||
#ifdef __cplusplus
|
/* clang-format on */
|
||||||
} /* extern "C" { */
|
COSMOPOLITAN_C_END_
|
||||||
#endif
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
|
#endif /* COSMOPOLITAN_THIRD_PARTY_QUICKJS_QUICKJS_H_ */
|
||||||
#endif /* QUICKJS_H */
|
|
||||||
|
|
85
third_party/quickjs/quickjs.mk
vendored
Normal file
85
third_party/quickjs/quickjs.mk
vendored
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
|
||||||
|
#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
|
||||||
|
|
||||||
|
PKGS += THIRD_PARTY_QUICKJS
|
||||||
|
|
||||||
|
THIRD_PARTY_QUICKJS_FILES := $(wildcard third_party/quickjs/*)
|
||||||
|
THIRD_PARTY_QUICKJS_SRCS = $(filter %.c,$(THIRD_PARTY_QUICKJS_FILES))
|
||||||
|
THIRD_PARTY_QUICKJS_HDRS = $(filter %.h,$(THIRD_PARTY_QUICKJS_FILES))
|
||||||
|
THIRD_PARTY_QUICKJS_BINS = $(THIRD_PARTY_QUICKJS_COMS) $(THIRD_PARTY_QUICKJS_COMS:%=%.dbg)
|
||||||
|
THIRD_PARTY_QUICKJS = $(THIRD_PARTY_QUICKJS_DEPS) $(THIRD_PARTY_QUICKJS_A)
|
||||||
|
THIRD_PARTY_QUICKJS_A = o/$(MODE)/third_party/quickjs/quickjs.a
|
||||||
|
|
||||||
|
THIRD_PARTY_QUICKJS_OBJS = \
|
||||||
|
$(THIRD_PARTY_QUICKJS_SRCS:%.c=o/$(MODE)/%.o)
|
||||||
|
|
||||||
|
THIRD_PARTY_QUICKJS_COMS = \
|
||||||
|
o/$(MODE)/third_party/quickjs/qjs.com
|
||||||
|
|
||||||
|
THIRD_PARTY_QUICKJS_CHECKS = \
|
||||||
|
$(THIRD_PARTY_QUICKJS_A).pkg \
|
||||||
|
$(THIRD_PARTY_QUICKJS_HDRS:%=o/$(MODE)/%.ok)
|
||||||
|
|
||||||
|
THIRD_PARTY_QUICKJS_DIRECTDEPS = \
|
||||||
|
LIBC_ALG \
|
||||||
|
LIBC_CALLS \
|
||||||
|
LIBC_FMT \
|
||||||
|
LIBC_INTRIN \
|
||||||
|
LIBC_LOG \
|
||||||
|
LIBC_MEM \
|
||||||
|
LIBC_NEXGEN32E \
|
||||||
|
LIBC_RUNTIME \
|
||||||
|
LIBC_SOCK \
|
||||||
|
LIBC_STDIO \
|
||||||
|
LIBC_STR \
|
||||||
|
LIBC_SYSV \
|
||||||
|
LIBC_SYSV_CALLS \
|
||||||
|
LIBC_TIME \
|
||||||
|
LIBC_TINYMATH \
|
||||||
|
LIBC_UNICODE \
|
||||||
|
LIBC_X \
|
||||||
|
THIRD_PARTY_COMPILER_RT \
|
||||||
|
THIRD_PARTY_GDTOA \
|
||||||
|
THIRD_PARTY_GETOPT \
|
||||||
|
THIRD_PARTY_MUSL
|
||||||
|
|
||||||
|
THIRD_PARTY_QUICKJS_DEPS := \
|
||||||
|
$(call uniq,$(foreach x,$(THIRD_PARTY_QUICKJS_DIRECTDEPS),$($(x))))
|
||||||
|
|
||||||
|
$(THIRD_PARTY_QUICKJS_A): \
|
||||||
|
third_party/quickjs/ \
|
||||||
|
$(THIRD_PARTY_QUICKJS_A).pkg \
|
||||||
|
$(filter-out %/quickjs.c,$(THIRD_PARTY_QUICKJS_OBJS))
|
||||||
|
|
||||||
|
$(THIRD_PARTY_QUICKJS_A).pkg: \
|
||||||
|
$(THIRD_PARTY_QUICKJS_OBJS) \
|
||||||
|
$(foreach x,$(THIRD_PARTY_QUICKJS_DIRECTDEPS),$($(x)_A).pkg)
|
||||||
|
|
||||||
|
o/$(MODE)/third_party/quickjs/qjs.com.dbg: \
|
||||||
|
$(THIRD_PARTY_QUICKJS_DEPS) \
|
||||||
|
$(THIRD_PARTY_QUICKJS_A) \
|
||||||
|
$(THIRD_PARTY_QUICKJS_A).pkg \
|
||||||
|
o/$(MODE)/third_party/quickjs/qjs.o \
|
||||||
|
$(CRT) \
|
||||||
|
$(APE)
|
||||||
|
-@$(APELINK)
|
||||||
|
|
||||||
|
$(THIRD_PARTY_QUICKJS_OBJS): \
|
||||||
|
OVERRIDE_CPPFLAGS += \
|
||||||
|
-DCONFIG_BIGNUM \
|
||||||
|
-DCONFIG_VERSION=\"$(shell cat third_party/quickjs/VERSION)\"
|
||||||
|
|
||||||
|
o/$(MODE)/third_party/quickjs/unicode_gen.o: \
|
||||||
|
OVERRIDE_CPPFLAGS += \
|
||||||
|
-DSTACK_FRAME_UNLIMITED
|
||||||
|
|
||||||
|
# TODO(jart): Replace alloca() calls with malloc().
|
||||||
|
o/$(MODE)/third_party/quickjs/libregexp.o \
|
||||||
|
o/$(MODE)/third_party/quickjs/quickjs.o: \
|
||||||
|
OVERRIDE_CPPFLAGS += \
|
||||||
|
-DSTACK_FRAME_UNLIMITED
|
||||||
|
|
||||||
|
.PHONY: o/$(MODE)/third_party/quickjs
|
||||||
|
o/$(MODE)/third_party/quickjs: \
|
||||||
|
$(THIRD_PARTY_QUICKJS_BINS) \
|
||||||
|
$(THIRD_PARTY_QUICKJS_CHECKS)
|
158
third_party/quickjs/release.sh
vendored
158
third_party/quickjs/release.sh
vendored
|
@ -1,158 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# Release the QuickJS source code
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
version=`cat VERSION`
|
|
||||||
|
|
||||||
if [ "$1" = "-h" ] ; then
|
|
||||||
echo "release.sh [release_list]"
|
|
||||||
echo ""
|
|
||||||
echo "release_list: extras binary win_binary quickjs"
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
release_list="extras binary win_binary quickjs"
|
|
||||||
|
|
||||||
if [ "$1" != "" ] ; then
|
|
||||||
release_list="$1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#################################################"
|
|
||||||
# extras
|
|
||||||
|
|
||||||
if echo $release_list | grep -w -q extras ; then
|
|
||||||
|
|
||||||
d="quickjs-${version}"
|
|
||||||
name="quickjs-extras-${version}"
|
|
||||||
outdir="/tmp/${d}"
|
|
||||||
|
|
||||||
rm -rf $outdir
|
|
||||||
mkdir -p $outdir $outdir/unicode $outdir/tests
|
|
||||||
|
|
||||||
cp unicode/* $outdir/unicode
|
|
||||||
cp -a tests/bench-v8 $outdir/tests
|
|
||||||
|
|
||||||
( cd /tmp && tar Jcvf /tmp/${name}.tar.xz ${d} )
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
#################################################"
|
|
||||||
# Windows binary release
|
|
||||||
|
|
||||||
if echo $release_list | grep -w -q win_binary ; then
|
|
||||||
|
|
||||||
# win64
|
|
||||||
|
|
||||||
dlldir=/usr/x86_64-w64-mingw32/sys-root/mingw/bin
|
|
||||||
cross_prefix="x86_64-w64-mingw32-"
|
|
||||||
d="quickjs-win-x86_64-${version}"
|
|
||||||
outdir="/tmp/${d}"
|
|
||||||
|
|
||||||
rm -rf $outdir
|
|
||||||
mkdir -p $outdir
|
|
||||||
|
|
||||||
make CONFIG_WIN32=y qjs.exe
|
|
||||||
cp qjs.exe $outdir
|
|
||||||
${cross_prefix}strip $outdir/qjs.exe
|
|
||||||
cp $dlldir/libwinpthread-1.dll $outdir
|
|
||||||
|
|
||||||
( cd /tmp/$d && rm -f ../${d}.zip && zip -r ../${d}.zip . )
|
|
||||||
|
|
||||||
make CONFIG_WIN32=y clean
|
|
||||||
|
|
||||||
# win32
|
|
||||||
|
|
||||||
dlldir=/usr/i686-w64-mingw32/sys-root/mingw/bin
|
|
||||||
cross_prefix="i686-w64-mingw32-"
|
|
||||||
d="quickjs-win-i686-${version}"
|
|
||||||
outdir="/tmp/${d}"
|
|
||||||
|
|
||||||
rm -rf $outdir
|
|
||||||
mkdir -p $outdir
|
|
||||||
|
|
||||||
make clean
|
|
||||||
make CONFIG_WIN32=y clean
|
|
||||||
|
|
||||||
make CONFIG_WIN32=y CONFIG_M32=y qjs.exe
|
|
||||||
cp qjs.exe $outdir
|
|
||||||
${cross_prefix}strip $outdir/qjs.exe
|
|
||||||
cp $dlldir/libwinpthread-1.dll $outdir
|
|
||||||
|
|
||||||
( cd /tmp/$d && rm -f ../${d}.zip && zip -r ../${d}.zip . )
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
#################################################"
|
|
||||||
# Linux binary release
|
|
||||||
|
|
||||||
if echo $release_list | grep -w -q binary ; then
|
|
||||||
|
|
||||||
make clean
|
|
||||||
make CONFIG_WIN32=y clean
|
|
||||||
make -j4 qjs run-test262
|
|
||||||
make -j4 CONFIG_M32=y qjs32 run-test262-32
|
|
||||||
strip qjs run-test262 qjs32 run-test262-32
|
|
||||||
|
|
||||||
d="quickjs-linux-x86_64-${version}"
|
|
||||||
outdir="/tmp/${d}"
|
|
||||||
|
|
||||||
rm -rf $outdir
|
|
||||||
mkdir -p $outdir
|
|
||||||
|
|
||||||
cp qjs run-test262 $outdir
|
|
||||||
|
|
||||||
( cd /tmp/$d && rm -f ../${d}.zip && zip -r ../${d}.zip . )
|
|
||||||
|
|
||||||
d="quickjs-linux-i686-${version}"
|
|
||||||
outdir="/tmp/${d}"
|
|
||||||
|
|
||||||
rm -rf $outdir
|
|
||||||
mkdir -p $outdir
|
|
||||||
|
|
||||||
cp qjs32 $outdir/qjs
|
|
||||||
cp run-test262-32 $outdir/run-test262
|
|
||||||
|
|
||||||
( cd /tmp/$d && rm -f ../${d}.zip && zip -r ../${d}.zip . )
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
#################################################"
|
|
||||||
# quickjs
|
|
||||||
|
|
||||||
if echo $release_list | grep -w -q quickjs ; then
|
|
||||||
|
|
||||||
make build_doc
|
|
||||||
|
|
||||||
d="quickjs-${version}"
|
|
||||||
outdir="/tmp/${d}"
|
|
||||||
|
|
||||||
rm -rf $outdir
|
|
||||||
mkdir -p $outdir $outdir/doc $outdir/tests $outdir/examples
|
|
||||||
|
|
||||||
cp Makefile VERSION TODO Changelog readme.txt LICENSE \
|
|
||||||
release.sh unicode_download.sh \
|
|
||||||
qjs.c qjsc.c qjscalc.js repl.js \
|
|
||||||
quickjs.c quickjs.h quickjs-atom.h \
|
|
||||||
quickjs-libc.c quickjs-libc.h quickjs-opcode.h \
|
|
||||||
cutils.c cutils.h list.h \
|
|
||||||
libregexp.c libregexp.h libregexp-opcode.h \
|
|
||||||
libunicode.c libunicode.h libunicode-table.h \
|
|
||||||
libbf.c libbf.h \
|
|
||||||
unicode_gen.c unicode_gen_def.h \
|
|
||||||
run-test262.c test262o.conf test262.conf \
|
|
||||||
test262o_errors.txt test262_errors.txt \
|
|
||||||
$outdir
|
|
||||||
|
|
||||||
cp tests/*.js tests/*.patch tests/bjson.c $outdir/tests
|
|
||||||
|
|
||||||
cp examples/*.js examples/*.c $outdir/examples
|
|
||||||
|
|
||||||
cp doc/quickjs.texi doc/quickjs.pdf doc/quickjs.html \
|
|
||||||
doc/jsbignum.texi doc/jsbignum.html doc/jsbignum.pdf \
|
|
||||||
$outdir/doc
|
|
||||||
|
|
||||||
( cd /tmp && tar Jcvf /tmp/${d}.tar.xz ${d} )
|
|
||||||
|
|
||||||
fi
|
|
55
third_party/quickjs/run-test262.c
vendored
55
third_party/quickjs/run-test262.c
vendored
|
@ -22,25 +22,29 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/alg/alg.h"
|
||||||
#include <stdio.h>
|
#include "libc/calls/struct/stat.h"
|
||||||
#include <stdarg.h>
|
#include "libc/calls/weirdtypes.h"
|
||||||
#include <inttypes.h>
|
#include "libc/fmt/conv.h"
|
||||||
#include <string.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <assert.h>
|
#include "libc/log/log.h"
|
||||||
#include <ctype.h>
|
#include "libc/sysv/consts/clock.h"
|
||||||
#include <unistd.h>
|
#include "libc/time/time.h"
|
||||||
#include <errno.h>
|
#include "third_party/musl/ftw.h"
|
||||||
#include <time.h>
|
#include "third_party/quickjs/cutils.h"
|
||||||
#include <dirent.h>
|
#include "third_party/quickjs/list.h"
|
||||||
#include <ftw.h>
|
#include "third_party/quickjs/quickjs-libc.h"
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
#include "list.h"
|
QuickJS (MIT License)\\n\
|
||||||
#include "quickjs-libc.h"
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
/* enable test262 thread support to test SharedArrayBuffer and Atomics */
|
/* enable test262 thread support to test SharedArrayBuffer and Atomics */
|
||||||
#define CONFIG_AGENT
|
/* #define CONFIG_AGENT */
|
||||||
|
|
||||||
#define CMD_NAME "run-test262"
|
#define CMD_NAME "run-test262"
|
||||||
|
|
||||||
|
@ -417,9 +421,16 @@ static JSValue js_evalScript(JSContext *ctx, JSValue this_val,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_AGENT
|
static JSValue add_helpers1(JSContext *ctx);
|
||||||
|
|
||||||
#include <pthread.h>
|
static int64_t get_clock_ms(void)
|
||||||
|
{
|
||||||
|
struct timespec ts;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
return (uint64_t)ts.tv_sec * 1000 + (ts.tv_nsec / 1000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_AGENT
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
struct list_head link;
|
struct list_head link;
|
||||||
|
@ -438,7 +449,6 @@ typedef struct {
|
||||||
char *str;
|
char *str;
|
||||||
} AgentReport;
|
} AgentReport;
|
||||||
|
|
||||||
static JSValue add_helpers1(JSContext *ctx);
|
|
||||||
static void add_helpers(JSContext *ctx);
|
static void add_helpers(JSContext *ctx);
|
||||||
|
|
||||||
static pthread_mutex_t agent_mutex = PTHREAD_MUTEX_INITIALIZER;
|
static pthread_mutex_t agent_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
@ -648,13 +658,6 @@ static JSValue js_agent_sleep(JSContext *ctx, JSValue this_val,
|
||||||
return JS_UNDEFINED;
|
return JS_UNDEFINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t get_clock_ms(void)
|
|
||||||
{
|
|
||||||
struct timespec ts;
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
|
||||||
return (uint64_t)ts.tv_sec * 1000 + (ts.tv_nsec / 1000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
static JSValue js_agent_monotonicNow(JSContext *ctx, JSValue this_val,
|
static JSValue js_agent_monotonicNow(JSContext *ctx, JSValue this_val,
|
||||||
int argc, JSValue *argv)
|
int argc, JSValue *argv)
|
||||||
{
|
{
|
||||||
|
|
48
third_party/quickjs/unicode_gen.c
vendored
48
third_party/quickjs/unicode_gen.c
vendored
|
@ -22,16 +22,24 @@
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include "libc/alg/alg.h"
|
||||||
#include <stdio.h>
|
#include "libc/assert.h"
|
||||||
#include <stdarg.h>
|
#include "libc/fmt/conv.h"
|
||||||
#include <inttypes.h>
|
#include "libc/fmt/fmt.h"
|
||||||
#include <string.h>
|
#include "libc/log/log.h"
|
||||||
#include <assert.h>
|
#include "libc/mem/mem.h"
|
||||||
#include <ctype.h>
|
#include "libc/runtime/runtime.h"
|
||||||
#include <time.h>
|
#include "libc/stdio/stdio.h"
|
||||||
|
#include "libc/str/str.h"
|
||||||
|
#include "third_party/quickjs/cutils.h"
|
||||||
|
|
||||||
#include "cutils.h"
|
asm(".ident\t\"\\n\\n\
|
||||||
|
QuickJS (MIT License)\\n\
|
||||||
|
Copyright (c) 2017-2021 Fabrice Bellard\\n\
|
||||||
|
Copyright (c) 2017-2021 Charlie Gordon\"");
|
||||||
|
asm(".include \"libc/disclaimer.inc\"");
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
|
||||||
/* define it to be able to test unicode.c */
|
/* define it to be able to test unicode.c */
|
||||||
//#define USE_TEST
|
//#define USE_TEST
|
||||||
|
@ -58,7 +66,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef USE_TEST
|
#ifdef USE_TEST
|
||||||
#include "libunicode.c"
|
#include "third_party/quickjs/libunicode.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CHARCODE_MAX 0x10ffff
|
#define CHARCODE_MAX 0x10ffff
|
||||||
|
@ -154,20 +162,20 @@ char *get_line(char *buf, int buf_size, FILE *f)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
#define DEF(id, str) GCAT_ ## id,
|
#define DEF(id, str) GCAT_ ## id,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
GCAT_COUNT,
|
GCAT_COUNT,
|
||||||
} UnicodeGCEnum1;
|
} UnicodeGCEnum1;
|
||||||
|
|
||||||
static const char *unicode_gc_name[] = {
|
static const char *unicode_gc_name[] = {
|
||||||
#define DEF(id, str) #id,
|
#define DEF(id, str) #id,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *unicode_gc_short_name[] = {
|
static const char *unicode_gc_short_name[] = {
|
||||||
#define DEF(id, str) str,
|
#define DEF(id, str) str,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -177,20 +185,20 @@ static const char *unicode_gc_short_name[] = {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
#define DEF(id, str) SCRIPT_ ## id,
|
#define DEF(id, str) SCRIPT_ ## id,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
SCRIPT_COUNT,
|
SCRIPT_COUNT,
|
||||||
} UnicodeScriptEnum1;
|
} UnicodeScriptEnum1;
|
||||||
|
|
||||||
static const char *unicode_script_name[] = {
|
static const char *unicode_script_name[] = {
|
||||||
#define DEF(id, str) #id,
|
#define DEF(id, str) #id,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *unicode_script_short_name[] = {
|
const char *unicode_script_short_name[] = {
|
||||||
#define DEF(id, str) str,
|
#define DEF(id, str) str,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -200,20 +208,20 @@ const char *unicode_script_short_name[] = {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
#define DEF(id, str) PROP_ ## id,
|
#define DEF(id, str) PROP_ ## id,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
PROP_COUNT,
|
PROP_COUNT,
|
||||||
} UnicodePropEnum1;
|
} UnicodePropEnum1;
|
||||||
|
|
||||||
static const char *unicode_prop_name[] = {
|
static const char *unicode_prop_name[] = {
|
||||||
#define DEF(id, str) #id,
|
#define DEF(id, str) #id,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *unicode_prop_short_name[] = {
|
static const char *unicode_prop_short_name[] = {
|
||||||
#define DEF(id, str) str,
|
#define DEF(id, str) str,
|
||||||
#include "unicode_gen_def.h"
|
#include "third_party/quickjs/unicode_gen_def.inc"
|
||||||
#undef DEF
|
#undef DEF
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3037,8 +3045,6 @@ int main(int argc, char **argv)
|
||||||
fprintf(fo,
|
fprintf(fo,
|
||||||
"/* Compressed unicode tables */\n"
|
"/* Compressed unicode tables */\n"
|
||||||
"/* Automatically generated file - do not edit */\n"
|
"/* Automatically generated file - do not edit */\n"
|
||||||
"\n"
|
|
||||||
"#include <stdint.h>\n"
|
|
||||||
"\n");
|
"\n");
|
||||||
dump_case_conv_table(fo);
|
dump_case_conv_table(fo);
|
||||||
compute_internal_props();
|
compute_internal_props();
|
||||||
|
|
24
third_party/quickjs/wut.c
vendored
Normal file
24
third_party/quickjs/wut.c
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||||
|
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||||
|
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||||
|
│ │
|
||||||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||||||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||||||
|
│ │
|
||||||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||||
|
#include "third_party/quickjs/quickjs.h"
|
||||||
|
|
||||||
|
uint8_t qjsc_repl[FRAMESIZE];
|
||||||
|
uint32_t qjsc_repl_size = FRAMESIZE;
|
||||||
|
uint8_t qjsc_qjscalc[FRAMESIZE];
|
||||||
|
uint32_t qjsc_qjscalc_size = FRAMESIZE;
|
1
third_party/third_party.mk
vendored
1
third_party/third_party.mk
vendored
|
@ -11,6 +11,7 @@ o/$(MODE)/third_party: \
|
||||||
o/$(MODE)/third_party/lua \
|
o/$(MODE)/third_party/lua \
|
||||||
o/$(MODE)/third_party/lz4cli \
|
o/$(MODE)/third_party/lz4cli \
|
||||||
o/$(MODE)/third_party/musl \
|
o/$(MODE)/third_party/musl \
|
||||||
|
o/$(MODE)/third_party/quickjs \
|
||||||
o/$(MODE)/third_party/regex \
|
o/$(MODE)/third_party/regex \
|
||||||
o/$(MODE)/third_party/stb \
|
o/$(MODE)/third_party/stb \
|
||||||
o/$(MODE)/third_party/xed \
|
o/$(MODE)/third_party/xed \
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
:type '(repeat string)
|
:type '(repeat string)
|
||||||
:group 'cosmo-format)
|
:group 'cosmo-format)
|
||||||
|
|
||||||
(defcustom cosmo-format-blacklist '()
|
(defcustom cosmo-format-blacklist '("quickjs.c")
|
||||||
"List of files to ignore, matched by basename."
|
"List of files to ignore, matched by basename."
|
||||||
:type '(repeat string)
|
:type '(repeat string)
|
||||||
:group 'cosmo-format)
|
:group 'cosmo-format)
|
||||||
|
|
Loading…
Reference in a new issue