# See the License for the specific language governing permissions and
# limitations under the License.
+# Platform for the _emscripten_ framework
+#
+# Importing this module from your project will tell `nitg` to compile
+# to JavaScript for the _emscripten_ framework.
module emscripten is platform
+
+`{
+ #include <emscripten.h>
+ #include <gc.h>
+`}
+
+redef class Text
+ # Run `self` as JavaScript code
+ fun run_js do run_js_native(self.escape_to_js.to_cstring)
+
+ private fun run_js_native(script: NativeString) `{ emscripten_run_script(script); `}
+
+ # Escape the content of `self` to pass to JavaScript code
+ fun escape_to_js: Text do return replace('\n', "\\n")
+
+ # Raise a JavaScript alert
+ fun alert do "alert('{self.escape_to_js}')".run_js
+end
+
+redef class Sys
+ redef fun force_garbage_collection `{ GC_FORCE_COLLECT(); `}
+
+ # The emscripten GC *must* be manually invoked, it will not act by itself
+ fun suggest_garbage_collection `{ GC_MAYBE_COLLECT(); `}
+end