# Takes the entire Pep/8 source code as argument and prints out the
# analysis results. The result graph will be sent to the JavaScript function
# `show_graph` with the source of the graph in Graphviz's dot.
-module pep8analysis_web
+module pep8analysis_web is
+ cppflags "--std=c++11 --bind"
+ ldflags "--bind"
+end
import emscripten
import model
import cfg
import flow_analysis
+intrude import standard::stream
+import cpp
+
+in "C++" `{
+ #include <bind.h>
+
+ using namespace emscripten;
+
+ EMSCRIPTEN_BINDINGS(my_module) {
+ function("run_analysis", &NativeString_run_analysis, allow_raw_pointers());
+ }
+`}
redef class AnalysisManager
- fun run(src: String)
+ fun run_web(src: String)
do
sys.suggest_garbage_collection
if notes.is_empty then print "Success: Nothing wrong detected"
var of = new StringOStream
- cfg.print_dot(of, true)
+ cfg.print_dot(of, false)
of.close
show_graph(of.to_s)
fun show_graph(content: String) do "show_graph('{content.escape_to_c}');".run_js
end
-class StringIStream
- super BufferedIStream
-
- init(str: String) do _buffer = new FlatBuffer.from(str)
-
- redef fun fill_buffer do end_reached = true
- redef var end_reached: Bool = false
+redef class NativeString
+ fun run_analysis do manager.run_web to_s
end
+fun dummy_set_callbacks import NativeString.run_analysis in "C++" `{
+`}
-manager.run args.first
+dummy_set_callbacks