aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2019-07-17 19:23:16 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-25 14:36:46 +0200
commit84e65c63e7482590d535e86f7660a00ae8a0cecb (patch)
treec79de87b7136e96b977003db85d43e5e676bbfc1 /doc
parent85c654a102701958d3748e82ecac9c1bc4dbbcba (diff)
Start on amal program
Fix mutex issue in lhs expr which can cause a deadlock when a file has an error and throws and doesn't close the mutex and another thread waits for that mutex. The mutex can instead be removed and ignore race conditions which are uncommon. This should improve memory usage and performance.
Diffstat (limited to 'doc')
-rw-r--r--doc/BytecodeHeader.md8
-rw-r--r--doc/CompilerFlow.md6
-rw-r--r--doc/Documentation.md31
-rw-r--r--doc/Opcode.md14
-rwxr-xr-xdoc/doc_extract.py20
5 files changed, 47 insertions, 32 deletions
diff --git a/doc/BytecodeHeader.md b/doc/BytecodeHeader.md
deleted file mode 100644
index 684a5ef..0000000
--- a/doc/BytecodeHeader.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Header layout
-|Size|Name |Description |
-|----|-------------|----------------------------------------------------------------------------|
-|4 |Magic number |The magic number used to identify an amalgam bytecode file. |
-|1 |Major version|The major version of the bytecode. Updates in this is a breaking change. |
-|1 |Minor version|The minor version of the bytecode. Updates in this are backwards compatible.|
-|1 |Patch version|The patch version of the bytecode. Updates in this are only minor bug fixes.|
-The versions in the header only changes for every release, not every change. \ No newline at end of file
diff --git a/doc/CompilerFlow.md b/doc/CompilerFlow.md
deleted file mode 100644
index e42b94d..0000000
--- a/doc/CompilerFlow.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Compiler flow
-(Tokenize&parse -> Resolve AST -> Generate SSA -> Generate bytecode) -> Generate program\
-Each step except the last is done using multiple threads in parallel and the output of each step is used
-in the next step. The last step is not done in parallel because the last step is combining all bytecode
-and writing it to a file, which is an IO bottlenecked operation and it won't benefit from multithreading
-and may even lose performance because of it. \ No newline at end of file
diff --git a/doc/Documentation.md b/doc/Documentation.md
new file mode 100644
index 0000000..34d1b41
--- /dev/null
+++ b/doc/Documentation.md
@@ -0,0 +1,31 @@
+# Opcode
+Variable length opcodes. Sizes range from 1 to 4 bytes.
+## Instruction formats
+Instructions can be in 6 different formats:
+1. 1 byte: Opcode
+2. 2 bytes: Opcode + register
+3. 3 bytes: Opcode + register + register
+4. 3 bytes:\
+4.1 Opcode + intermediate\
+4.2 Opcode + data\
+4.3 Opcode + index\
+4.4 Opcode + offset
+5. 4 bytes: Opcode + register + register + register
+6. 4 bytes: Opcode + register + offset
+
+# Compiler flow
+(Tokenize&parse -> Resolve AST -> Generate SSA -> Generate bytecode) -> Generate program\
+Each step except the last is done using multiple threads in parallel and the output of each step is used
+in the next step. The last step is not done in parallel because the last step is combining all bytecode
+and writing it to a file, which is an IO bottlenecked operation and it won't benefit from multithreading
+and may even lose performance because of it.
+
+# Bytecode header
+## Header layout
+|Size|Name |Description |
+|----|-------------|----------------------------------------------------------------------------|
+|4 |Magic number |The magic number used to identify an amalgam bytecode file. |
+|1 |Major version|The major version of the bytecode. Updates in this is a breaking change. |
+|1 |Minor version|The minor version of the bytecode. Updates in this are backwards compatible.|
+|1 |Patch version|The patch version of the bytecode. Updates in this are only minor bug fixes.|
+The versions in the header only changes for every release, not every change. \ No newline at end of file
diff --git a/doc/Opcode.md b/doc/Opcode.md
deleted file mode 100644
index 37fa4e2..0000000
--- a/doc/Opcode.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Opcode
-Variable length opcodes. Sizes range from 1 to 4 bytes.
-# Instruction formats
-Instructions can be in 6 different formats:
-1. 1 byte: Opcode
-2. 2 bytes: Opcode + register
-3. 3 bytes: Opcode + register + register
-4. 3 bytes:\
-4.1 Opcode + intermediate\
-4.2 Opcode + data\
-4.3 Opcode + index\
-4.4 Opcode + offset
-5. 4 bytes: Opcode + register + register + register
-6. 4 bytes: Opcode + register + offset \ No newline at end of file
diff --git a/doc/doc_extract.py b/doc/doc_extract.py
index 66ec7e5..ce192cb 100755
--- a/doc/doc_extract.py
+++ b/doc/doc_extract.py
@@ -55,6 +55,14 @@ def extract_docs(filepath):
docs.append((doc_name, lstrip_lines(doc)))
return docs
+def convert_to_subsections(doc_str):
+ lines = []
+ for line in doc_str.splitlines():
+ if len(line) != 0 and line[0] == "#":
+ line = "##" + line[1:]
+ lines.append(line)
+ return "\n".join(lines)
+
def main():
script_path = os.path.realpath(sys.argv[0])
script_dir = os.path.dirname(script_path)
@@ -64,13 +72,17 @@ def main():
source_files = get_source_files_recursive(amalgam_includes)
source_files += get_source_files_recursive(amalgam_sources)
+ doc_data = []
for filepath in source_files:
docs = extract_docs(filepath)
for doc in docs:
- doc_path = os.path.join(script_dir, doc[0] + ".md")
- with open(doc_path, "w") as file:
- file.write(doc[1])
- print("Wrote doc for %s into file %s" % (doc[0], doc_path))
+ section = "# {}\n{}".format(doc[0], convert_to_subsections(doc[1]))
+ doc_data.append(section)
+ print("Added section %s to the documentation" % doc[0])
+
+ doc_path = os.path.join(script_dir, "Documentation.md")
+ with open(doc_path, "w") as file:
+ file.write("\n\n".join(doc_data))
if __name__ == "__main__":
main()