Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/runtime/c/gu/exn.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,24 @@ gu_exn_is_raised(GuExn* err) {
return err && (err->state == GU_EXN_RAISED);
}

GU_API_DECL void
gu_exn_clear(GuExn* err) {
err->caught = NULL;
err->state = GU_EXN_OK;
}

GU_API bool
gu_exn_caught_(GuExn* err, const char* type)
{
return (err->caught && strcmp(err->caught, type) == 0);
}

GU_API_DECL void*
gu_exn_caught_data(GuExn* err)
{
return err->data.data;
}

GU_API void
gu_exn_block(GuExn* err)
{
Expand Down
24 changes: 14 additions & 10 deletions src/runtime/c/gu/exn.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,23 +71,27 @@ gu_new_exn(GuPool* pool);
GU_API_DECL bool
gu_exn_is_raised(GuExn* err);

static inline void
gu_exn_clear(GuExn* err) {
err->caught = NULL;
err->state = GU_EXN_OK;
}
// static inline void
// gu_exn_clear(GuExn* err) {
// err->caught = NULL;
// err->state = GU_EXN_OK;
// }
GU_API_DECL void
gu_exn_clear(GuExn* err);

#define gu_exn_caught(err, type) \
(err->caught && strcmp(err->caught, #type) == 0)

GU_API_DECL bool
gu_exn_caught_(GuExn* err, const char* type);

static inline const void*
gu_exn_caught_data(GuExn* err)
{
return err->data.data;
}
// static inline const void*
// gu_exn_caught_data(GuExn* err)
// {
// return err->data.data;
// }
GU_API_DECL void*
gu_exn_caught_data(GuExn* err);

/// Temporarily block a raised exception.
GU_API_DECL void
Expand Down
10 changes: 10 additions & 0 deletions src/runtime/c/pgf/jit.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ PGF_INTERNAL void
pgf_jit_predicate(PgfReader* rdr, PgfAbstr* abstr,
PgfAbsCat* abscat)
{
size_t n_funs = pgf_read_len(rdr);
gu_return_on_exn(rdr->err, );

for (size_t i = 0; i < n_funs; i++) {
gu_in_f64be(rdr->in, rdr->err); // ignore
gu_return_on_exn(rdr->err, );

PgfCId name = pgf_read_cid(rdr, rdr->tmp_pool);
gu_return_on_exn(rdr->err, );
}
}

PGF_INTERNAL void
Expand Down
4 changes: 2 additions & 2 deletions src/runtime/c/pgf/reader.c
Original file line number Diff line number Diff line change
Expand Up @@ -1326,7 +1326,7 @@ pgf_read_concretes(PgfReader* rdr, PgfAbstr* abstr, bool with_content)
PGF_INTERNAL PgfPGF*
pgf_read_pgf(PgfReader* rdr) {
PgfPGF* pgf = gu_new(PgfPGF, rdr->opool);

pgf->major_version = gu_in_u16be(rdr->in, rdr->err);
gu_return_on_exn(rdr->err, NULL);

Expand All @@ -1335,7 +1335,7 @@ pgf_read_pgf(PgfReader* rdr) {

pgf->gflags = pgf_read_flags(rdr);
gu_return_on_exn(rdr->err, NULL);

pgf_read_abstract(rdr, &pgf->abstract);
gu_return_on_exn(rdr->err, NULL);

Expand Down
1 change: 1 addition & 0 deletions src/runtime/javascript/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.libs/
4 changes: 0 additions & 4 deletions src/runtime/javascript/DEPRECATED.md

This file was deleted.

48 changes: 48 additions & 0 deletions src/runtime/javascript/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
FROM emscripten/emsdk:latest

RUN apt update
RUN apt install -y autoconf automake libtool make

WORKDIR /tmp/c
COPY gu/*.c gu/*.h /tmp/c/gu/
COPY pgf/*.c pgf/*.h /tmp/c/pgf/
COPY pgf/lightning/i386/*.h /tmp/c/pgf/lightning/i386/
COPY pgf/lightning/*.h /tmp/c/pgf/lightning/
COPY \
Makefile.am \
configure.ac \
lib*.pc.in \
/tmp/c/
RUN autoreconf -i
RUN emconfigure ./configure
RUN emmake make
RUN emcc .libs/libgu.a .libs/libpgf.a -o pgf.js \
-sALLOW_MEMORY_GROWTH \
-sEXPORTED_FUNCTIONS="\
_pgf_read,\
_pgf_abstract_name,\
_pgf_read_expr,\
_pgf_print_expr,\
_pgf_expr_arity,\
_gu_new_pool,\
_gu_new_exn,\
_gu_data_in,\
_gu_exn_is_raised,\
_gu_exn_caught_,\
_gu_exn_caught_data,\
_gu_exn_clear,\
_gu_new_string_buf,\
_gu_string_buf_out,\
_gu_string_buf_data,\
_malloc,\
_free\
"\
-sEXPORTED_RUNTIME_METHODS="\
ccall,\
FS,\
getValue,\
AsciiToString,\
stringToUTF8,\
UTF8ToString,\
allocateUTF8\
"
11 changes: 11 additions & 0 deletions src/runtime/javascript/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# JavaScript runtime using Web Assembly

This folder contains very early work experimenting with a pure JavaScript runtime,
compiled to Web Assembly (WASM) using [Emscripten](https://emscripten.org/).

1. Compile the WASM files (inside Docker) using `build-wasm.sh`, placing them in `.libs/`
2. Test in Node.js by running `node test-node.js [path to PGF]`
3. Test in a web browser
1. Start a server with `npx serve -l 41296`
2. Browse to `http://localhost:41296/test-web.html`
3. Check JavaScript console
10 changes: 10 additions & 0 deletions src/runtime/javascript/build-wasm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#! /usr/bin/env bash
set -e

# Build inside Docker image
IMAGE="gf/build-c-runtime-wasm"
docker build ../c --file Dockerfile --tag $IMAGE

# Copy bulit files from container to host
mkdir -p .libs
docker run --rm --volume "$PWD":/tmp/host $IMAGE bash -c "cp pgf.js pgf.wasm /tmp/host/.libs/"
62 changes: 0 additions & 62 deletions src/runtime/javascript/editor-grammar/Editor.gf

This file was deleted.

63 changes: 0 additions & 63 deletions src/runtime/javascript/editor-grammar/EditorEng.gf

This file was deleted.

17 changes: 0 additions & 17 deletions src/runtime/javascript/editor.html

This file was deleted.

1 change: 0 additions & 1 deletion src/runtime/javascript/editorGrammar.js

This file was deleted.

Binary file removed src/runtime/javascript/empty.png
Binary file not shown.
Loading