about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorTheofilos Augoustis <37243696+taugoust@users.noreply.github.com>2025-11-12 09:47:46 +0100
committerGitHub <noreply@github.com>2025-11-12 09:47:46 +0100
commitba5864bd653a995bc72405f0a5e7c389e4052e44 (patch)
tree4eec811c9b39d15028470e384e2eff74e3b5e02e /src
parentab083cb653ee0fe74f792517805af9bd59ad691d (diff)
parent140a8c654054a3d456190554175dc56e285cb819 (diff)
downloadfocaccia-ba5864bd653a995bc72405f0a5e7c389e4052e44.tar.gz
focaccia-ba5864bd653a995bc72405f0a5e7c389e4052e44.zip
Merge pull request #25 from TUM-DSE/ta/json-dumps
Use orjson instead of the default json library, allowing for significantly faster dump and load times.
Diffstat (limited to 'src')
-rw-r--r--src/focaccia/parser.py19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/focaccia/parser.py b/src/focaccia/parser.py
index c157a36..5602be6 100644
--- a/src/focaccia/parser.py
+++ b/src/focaccia/parser.py
@@ -1,8 +1,8 @@
 """Parsing of JSON files containing snapshot data."""
 
-import base64
-import json
 import re
+import base64
+import orjson as json
 from typing import TextIO
 
 from .arch import supported_architectures, Arch
@@ -22,7 +22,7 @@ def _get_or_throw(obj: dict, key: str):
 
 def parse_transformations(json_stream: TextIO) -> Trace[SymbolicTransform]:
     """Parse symbolic transformations from a text stream."""
-    data = json.load(json_stream)
+    data = json.loads(json_stream.read())
 
     env = TraceEnvironment.from_json(_get_or_throw(data, 'env'))
     strace = [SymbolicTransform.from_json(item) \
@@ -33,14 +33,15 @@ def parse_transformations(json_stream: TextIO) -> Trace[SymbolicTransform]:
 def serialize_transformations(transforms: Trace[SymbolicTransform],
                               out_stream: TextIO):
     """Serialize symbolic transformations to a text stream."""
-    json.dump({
+    data = json.dumps({
         'env': transforms.env.to_json(),
         'states': [t.to_json() for t in transforms],
-    }, out_stream, indent=4)
+    }, option=json.OPT_INDENT_2).decode()
+    out_stream.write(data)
 
 def parse_snapshots(json_stream: TextIO) -> Trace[ProgramState]:
     """Parse snapshots from our JSON format."""
-    json_data = json.load(json_stream)
+    json_data = json.loads(json_stream.read())
 
     arch = supported_architectures[_get_or_throw(json_data, 'architecture')]
     env = TraceEnvironment.from_json(_get_or_throw(json_data, 'env'))
@@ -62,7 +63,8 @@ def parse_snapshots(json_stream: TextIO) -> Trace[ProgramState]:
 def serialize_snapshots(snapshots: Trace[ProgramState], out_stream: TextIO):
     """Serialize a list of snapshots to out JSON format."""
     if not snapshots:
-        return json.dump({}, out_stream, indent = 4)
+        empty = json.dumps({}, option=json.OPT_INDENT_2).decode()
+        out_stream.write(empty)
 
     arch = snapshots[0].arch
     res = {
@@ -81,7 +83,8 @@ def serialize_snapshots(snapshots: Trace[ProgramState], out_stream: TextIO):
             })
         res['snapshots'].append({ 'registers': regs, 'memory': mem })
 
-    json.dump(res, out_stream, indent=4)
+    data = json.dumps(res, option=json.OPT_INDENT_2).decode()
+    out_stream.write(data)
 
 def _make_unknown_env() -> TraceEnvironment:
     return TraceEnvironment('', [], False, [], '?')