summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2023-10-24 14:23:39 -0400
committergit <svn-admin@ruby-lang.org>2023-10-26 13:33:22 +0000
commitfeb1427ad8f3d6448d9f8d0c7009dfdf711b7f48 (patch)
treeb2a512367cd7346ca08816de4620bced03d16023
parentbfb9b5e69921c91901cce820f54e79907a5ae829 (diff)
[ruby/prism] Compile with WASI
https://github.com/ruby/prism/commit/73c44b0b9c
-rw-r--r--.github/workflows/javascript-bindings.yml48
-rw-r--r--lib/prism/prism.gemspec1
-rw-r--r--prism/templates/src/serialize.c.erb4
-rwxr-xr-xprism/templates/template.rb2
4 files changed, 53 insertions, 2 deletions
diff --git a/.github/workflows/javascript-bindings.yml b/.github/workflows/javascript-bindings.yml
new file mode 100644
index 0000000000..c381b4d5c6
--- /dev/null
+++ b/.github/workflows/javascript-bindings.yml
@@ -0,0 +1,48 @@
+name: JavaScript Bindings
+
+on:
+ push:
+ paths:
+ - ".github/workflows/javascript-bindings.yml"
+ - "include/"
+ - "src/"
+ - "*akefile*"
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Set up Ruby
+ uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: head
+ bundler-cache: true
+
+ - name: rake templates
+ run: bundle exec rake templates
+
+ - name: Set up WASI-SDK
+ run: |
+ wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz
+ tar xvf wasi-sdk-20.0-linux.tar.gz
+
+ - name: Build the project
+ run: make wasm WASI_SDK_PATH=$(pwd)/wasi-sdk-20.0
+
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 20.x
+
+ - name: Run the tests
+ run: npm test
+ working-directory: javascript
+
+ - uses: actions/upload-artifact@v3
+ with:
+ name: prism.wasm
+ path: javascript/src/prism.wasm
diff --git a/lib/prism/prism.gemspec b/lib/prism/prism.gemspec
index 2629262c4a..63c6702561 100644
--- a/lib/prism/prism.gemspec
+++ b/lib/prism/prism.gemspec
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
"docs/encoding.md",
"docs/fuzzing.md",
"docs/heredocs.md",
+ "docs/javascript.md",
"docs/mapping.md",
"docs/prism.png",
"docs/ripper.md",
diff --git a/prism/templates/src/serialize.c.erb b/prism/templates/src/serialize.c.erb
index e985e72ec3..9528496c7d 100644
--- a/prism/templates/src/serialize.c.erb
+++ b/prism/templates/src/serialize.c.erb
@@ -150,11 +150,11 @@ static void
pm_serialize_magic_comment(pm_parser_t *parser, pm_magic_comment_t *magic_comment, pm_buffer_t *buffer) {
// serialize key location
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(magic_comment->key_start - parser->start));
- pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(magic_comment->key_length));
+ pm_buffer_append_u32(buffer, pm_sizet_to_u32(magic_comment->key_length));
// serialize value location
pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(magic_comment->value_start - parser->start));
- pm_buffer_append_u32(buffer, pm_ptrdifft_to_u32(magic_comment->value_length));
+ pm_buffer_append_u32(buffer, pm_sizet_to_u32(magic_comment->value_length));
}
static void
diff --git a/prism/templates/template.rb b/prism/templates/template.rb
index 79ad84c732..4435333900 100755
--- a/prism/templates/template.rb
+++ b/prism/templates/template.rb
@@ -361,6 +361,8 @@ module Prism
TEMPLATES = [
"ext/prism/api_node.c",
"include/prism/ast.h",
+ "javascript/src/deserialize.js",
+ "javascript/src/nodes.js",
"java/org/prism/Loader.java",
"java/org/prism/Nodes.java",
"java/org/prism/AbstractNodeVisitor.java",