From 7b5b6b305c8ceef92dbc13fcf99a6af2a7f47b64 Mon Sep 17 00:00:00 2001 From: Veera <32646674+veera-sivarajan@users.noreply.github.com> Date: Sat, 3 Jun 2023 06:46:41 -0400 Subject: [PATCH] Fix Grammar and Links in Docs (#2984) * Fix grammar and improve flow in `debugging.md` * Fix architecture image's background * Update link to JavaScript shell * Readd original drawio diagram --- docs/debugging.md | 7 +++---- docs/img/boa_architecture.png | Bin 0 -> 50235 bytes docs/vm.md | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 docs/img/boa_architecture.png diff --git a/docs/debugging.md b/docs/debugging.md index a0e53827888..c472456f0e0 100644 --- a/docs/debugging.md +++ b/docs/debugging.md @@ -37,15 +37,14 @@ cargo run -- --dump-ast # AST dump format is Debug by default. ## Bytecode generation and Execution -Once the AST has been generated boa will compile it into bytecode. -The bytecode is then executed by the vm. +Once the AST has been generated, boa will compile it into bytecode, which is then executed by the VM. You can print the bytecode and the executed instructions with the command-line flag `--trace`. -For more detailed information about the vm and the trace output look [here](./vm.md). +For more detailed information about the VM and the trace output look [here](./vm.md). ## Instruction flowgraph -We can to get the vm instructions flowgraph, which is a visual representation of the instruction flow. +We can also get the VM instructions flowgraph, which is a visual representation of the instruction flow. The `Start` (in green) and `End` (in red) node in the graph represents the start and end point of execution. They are not instructions, just markers. diff --git a/docs/img/boa_architecture.png b/docs/img/boa_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..1d076d374e896cb5a057f5e9aee1ccbe45533052 GIT binary patch literal 50235 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 literal 0 HcmV?d00001 diff --git a/docs/vm.md b/docs/vm.md index 7027cb28c67..a5b1ed94925 100644 --- a/docs/vm.md +++ b/docs/vm.md @@ -2,7 +2,7 @@ ## Architecture -![image](img/boa_architecture.drawio.png) +![image](img/boa_architecture.png) ## Understanding the trace output @@ -71,7 +71,7 @@ The above output contains the following information: ### Comparing ByteCode output -If you wanted another engine's bytecode output for the same JS, SpiderMonkey's bytecode output is the best to use. You can follow the setup [here](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Introduction_to_the_JavaScript_shell). You will need to build from source because the pre-built binarys don't include the debugging utilities which we need. +If you wanted another engine's bytecode output for the same JS, SpiderMonkey's bytecode output is the best to use. You can follow the setup [here](https://udn.realityripple.com/docs/Mozilla/Projects/SpiderMonkey/Introduction_to_the_JavaScript_shell). You will need to build from source because the pre-built binarys don't include the debugging utilities which we need. I named the binary `js_shell` as `js` conflicts with NodeJS. Once up and running you should be able to use `js_shell -f tests/js/test.js`. You will get no output to begin with, this is because you need to run `dis()` or `dis([func])` in the code. Once you've done that you should get some output like so: