1
0
mirror of https://github.com/janet-lang/janet synced 2025-01-10 07:30:26 +00:00

Merge branch 'master' into compile-opt

This commit is contained in:
Calvin Rose 2024-10-12 07:58:43 -05:00
commit bed80bf1d3
9 changed files with 271 additions and 220 deletions

View File

@ -19,3 +19,8 @@ tasks:
ninja ninja
ninja test ninja test
sudo ninja install sudo ninja install
- meson_min: |
cd janet
meson setup build_meson_min --buildtype=release -Dsingle_threaded=true -Dnanbox=false -Ddynamic_modules=false -Ddocstrings=false -Dnet=false -Dsourcemaps=false -Dpeg=false -Dassembler=false -Dint_types=false -Dreduced_os=true -Dffi=false
cd build_meson_min
ninja

View File

@ -39,27 +39,57 @@ jobs:
shell: cmd shell: cmd
run: build_win test run: build_win test
test-windows-min:
name: Build and test on Windows Minimal build
strategy:
matrix:
os: [ windows-2019 ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout the repository
uses: actions/checkout@master
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install Python Dependencies
run: pip install meson ninja
- name: Build
shell: cmd
run: |
meson setup build_meson_min --buildtype=release -Dsingle_threaded=true -Dnanbox=false -Ddynamic_modules=false -Ddocstrings=false -Dnet=false -Dsourcemaps=false -Dpeg=false -Dassembler=false -Dint_types=false -Dreduced_os=true -Dffi=false
cd build_meson_min
ninja
test-mingw: test-mingw:
name: Build on Windows with Mingw (no test yet) name: Build on Windows with Mingw
runs-on: windows-latest runs-on: windows-latest
defaults: defaults:
run: run:
shell: msys2 {0} shell: msys2 {0}
strategy:
matrix:
msystem: [ UCRT64, CLANG64 ]
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@master uses: actions/checkout@master
- name: Setup Mingw - name: Setup Mingw
uses: msys2/setup-msys2@v2 uses: msys2/setup-msys2@v2
with: with:
msystem: UCRT64 msystem: ${{ matrix.msystem }}
update: true update: true
install: >- install: >-
base-devel base-devel
git git
gcc gcc
- name: Build the project - name: Build
shell: cmd shell: cmd
run: make -j4 CC=gcc JANET_NO_AMALG=1 run: make -j4 CC=gcc
- name: Test
shell: cmd
run: make -j4 CC=gcc test
test-mingw-linux: test-mingw-linux:
name: Build and test with Mingw on Linux + Wine name: Build and test with Mingw on Linux + Wine

View File

@ -0,0 +1 @@
(def abc 123)

View File

@ -0,0 +1,7 @@
(defn install
[manifest &]
(bundle/add-file manifest "badmod.janet"))
(defn check
[&]
(error "Check failed!"))

View File

@ -4305,10 +4305,10 @@
(do-hook module bundle-name :clean man)) (do-hook module bundle-name :clean man))
(do-hook module bundle-name :build man) (do-hook module bundle-name :build man)
(do-hook module bundle-name :install man) (do-hook module bundle-name :install man)
(when check
(do-hook module bundle-name :check man))
(if (empty? (get man :files)) (print "no files installed, is this a valid bundle?")) (if (empty? (get man :files)) (print "no files installed, is this a valid bundle?"))
(sync-manifest man)) (sync-manifest man)
(when check
(do-hook module bundle-name :check man)))
(print "installed " bundle-name) (print "installed " bundle-name)
bundle-name) bundle-name)
@ -4677,7 +4677,8 @@
(setdyn *lint-error* error-level) (setdyn *lint-error* error-level)
(setdyn *lint-warn* error-level) (setdyn *lint-warn* error-level)
(when-let [profile.janet (dyn *profilepath*)] (when-let [profile.janet (dyn *profilepath*)]
(dofile profile.janet :exit true :env env)) (dofile profile.janet :exit true :env env)
(put env *current-file* nil))
(repl getchunk nil env))))) (repl getchunk nil env)))))
### ###

View File

@ -31,11 +31,13 @@
#ifndef JANET_SINGLE_THREADED #ifndef JANET_SINGLE_THREADED
#ifndef JANET_WINDOWS #ifndef JANET_WINDOWS
#include <pthread.h> #include <pthread.h>
#else
#include <windows.h>
#endif #endif
#endif #endif
#ifdef JANET_WINDOWS
#include <windows.h>
#endif
#ifdef JANET_USE_STDATOMIC #ifdef JANET_USE_STDATOMIC
#include <stdatomic.h> #include <stdatomic.h>
/* We don't need stdatomic on most compilers since we use compiler builtins for atomic operations. /* We don't need stdatomic on most compilers since we use compiler builtins for atomic operations.
@ -546,8 +548,8 @@ void *janet_optabstract(const Janet *argv, int32_t argc, int32_t n, const JanetA
/* Atomic refcounts */ /* Atomic refcounts */
JanetAtomicInt janet_atomic_inc(JanetAtomicInt volatile *x) { JanetAtomicInt janet_atomic_inc(JanetAtomicInt volatile *x) {
#ifdef JANET_WINDOWS #ifdef _MSC_VER
return InterlockedIncrement(x); return _InterlockedIncrement(x);
#elif defined(JANET_USE_STDATOMIC) #elif defined(JANET_USE_STDATOMIC)
return atomic_fetch_add_explicit(x, 1, memory_order_relaxed) + 1; return atomic_fetch_add_explicit(x, 1, memory_order_relaxed) + 1;
#else #else
@ -556,8 +558,8 @@ JanetAtomicInt janet_atomic_inc(JanetAtomicInt volatile *x) {
} }
JanetAtomicInt janet_atomic_dec(JanetAtomicInt volatile *x) { JanetAtomicInt janet_atomic_dec(JanetAtomicInt volatile *x) {
#ifdef JANET_WINDOWS #ifdef _MSC_VER
return InterlockedDecrement(x); return _InterlockedDecrement(x);
#elif defined(JANET_USE_STDATOMIC) #elif defined(JANET_USE_STDATOMIC)
return atomic_fetch_add_explicit(x, -1, memory_order_acq_rel) - 1; return atomic_fetch_add_explicit(x, -1, memory_order_acq_rel) - 1;
#else #else
@ -566,8 +568,8 @@ JanetAtomicInt janet_atomic_dec(JanetAtomicInt volatile *x) {
} }
JanetAtomicInt janet_atomic_load(JanetAtomicInt volatile *x) { JanetAtomicInt janet_atomic_load(JanetAtomicInt volatile *x) {
#ifdef JANET_WINDOWS #ifdef _MSC_VER
return InterlockedOr(x, 0); return _InterlockedOr(x, 0);
#elif defined(JANET_USE_STDATOMIC) #elif defined(JANET_USE_STDATOMIC)
return atomic_load_explicit(x, memory_order_acquire); return atomic_load_explicit(x, memory_order_acquire);
#else #else

View File

@ -47,7 +47,7 @@ typedef struct {
#ifndef JANET_WINDOWS #ifndef JANET_WINDOWS
JanetStream *stream; JanetStream *stream;
#endif #endif
JanetTable* watch_descriptors; JanetTable *watch_descriptors;
JanetChannel *channel; JanetChannel *channel;
uint32_t default_flags; uint32_t default_flags;
int is_watching; int is_watching;
@ -154,8 +154,7 @@ static void watcher_callback_read(JanetFiber *fiber, JanetAsyncEvent event) {
janet_schedule(fiber, janet_wrap_nil()); janet_schedule(fiber, janet_wrap_nil());
janet_async_end(fiber); janet_async_end(fiber);
break; break;
case JANET_ASYNC_EVENT_ERR: case JANET_ASYNC_EVENT_ERR: {
{
janet_schedule(fiber, janet_wrap_nil()); janet_schedule(fiber, janet_wrap_nil());
janet_async_end(fiber); janet_async_end(fiber);
break; break;
@ -163,8 +162,7 @@ static void watcher_callback_read(JanetFiber *fiber, JanetAsyncEvent event) {
read_more: read_more:
case JANET_ASYNC_EVENT_HUP: case JANET_ASYNC_EVENT_HUP:
case JANET_ASYNC_EVENT_INIT: case JANET_ASYNC_EVENT_INIT:
case JANET_ASYNC_EVENT_READ: case JANET_ASYNC_EVENT_READ: {
{
Janet name = janet_wrap_nil(); Janet name = janet_wrap_nil();
/* Assumption - read will never return partial events * /* Assumption - read will never return partial events *
@ -273,7 +271,8 @@ static void janet_watcher_unlisten(JanetWatcher *watcher) {
#define WATCHFLAG_RECURSIVE 0x100000u #define WATCHFLAG_RECURSIVE 0x100000u
static const JanetWatchFlagName watcher_flags_windows[] = { static const JanetWatchFlagName watcher_flags_windows[] = {
{"all", {
"all",
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_ATTRIBUTES |
FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_CREATION |
FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_DIR_NAME |
@ -282,7 +281,8 @@ static const JanetWatchFlagName watcher_flags_windows[] = {
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_LAST_WRITE |
FILE_NOTIFY_CHANGE_SECURITY | FILE_NOTIFY_CHANGE_SECURITY |
FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_SIZE |
WATCHFLAG_RECURSIVE}, WATCHFLAG_RECURSIVE
},
{"attributes", FILE_NOTIFY_CHANGE_ATTRIBUTES}, {"attributes", FILE_NOTIFY_CHANGE_ATTRIBUTES},
{"creation", FILE_NOTIFY_CHANGE_CREATION}, {"creation", FILE_NOTIFY_CHANGE_CREATION},
{"dir-name", FILE_NOTIFY_CHANGE_DIR_NAME}, {"dir-name", FILE_NOTIFY_CHANGE_DIR_NAME},
@ -351,7 +351,7 @@ static void read_dir_changes(OverlappedWatch *ow) {
} }
} }
static const char* watcher_actions_windows[] = { static const char *watcher_actions_windows[] = {
"unknown", "unknown",
"added", "added",
"removed", "removed",
@ -382,8 +382,7 @@ static void watcher_callback_read(JanetFiber *fiber, JanetAsyncEvent event) {
case JANET_ASYNC_EVENT_FAILED: case JANET_ASYNC_EVENT_FAILED:
janet_stream_close(ow->stream); janet_stream_close(ow->stream);
break; break;
case JANET_ASYNC_EVENT_COMPLETE: case JANET_ASYNC_EVENT_COMPLETE: {
{
if (!watcher->is_watching) { if (!watcher->is_watching) {
janet_stream_close(ow->stream); janet_stream_close(ow->stream);
break; break;
@ -416,7 +415,7 @@ static void watcher_callback_read(JanetFiber *fiber, JanetAsyncEvent event) {
/* Next event */ /* Next event */
if (!fni->NextEntryOffset) break; if (!fni->NextEntryOffset) break;
fni = (NotifyChange *) ((char *)fni + fni->NextEntryOffset); fni = (NotifyChange *)((char *)fni + fni->NextEntryOffset);
} }
/* Make another call to read directory changes */ /* Make another call to read directory changes */

View File

@ -27,9 +27,10 @@
#include "gc.h" #include "gc.h"
#endif #endif
#include <stdlib.h>
#ifndef JANET_REDUCED_OS #ifndef JANET_REDUCED_OS
#include <stdlib.h>
#include <time.h> #include <time.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <errno.h>
@ -251,7 +252,7 @@ JANET_CORE_FN(os_exit,
} }
janet_deinit(); janet_deinit();
if (argc >= 2 && janet_truthy(argv[1])) { if (argc >= 2 && janet_truthy(argv[1])) {
_exit(status); _Exit(status);
} else { } else {
exit(status); exit(status);
} }

View File

@ -117,6 +117,11 @@
(assert (= 0 (length (bundle/list))) "bundles are listed correctly 7") (assert (= 0 (length (bundle/list))) "bundles are listed correctly 7")
(assert (= 0 (length (bundle/topolist))) "bundles are listed correctly 8") (assert (= 0 (length (bundle/topolist))) "bundles are listed correctly 8")
# Try installing a bundle that fails check
(assert-error "bad test" (bundle/install "./examples/sample-bad-bundle" :check true))
(assert (= 0 (length (bundle/list))) "check failure 0")
(assert (= 0 (length (bundle/topolist))) "check failure 1")
(rmrf syspath) (rmrf syspath)
(end-suite) (end-suite)