From c7f78a08e554d1a6ba6a0843af43805359f8004d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl>
Date: Wed, 26 May 2021 22:36:51 +0200
Subject: [PATCH] speed improvements

---
 CHANGELOG.md |  1 +
 minijson.pyx | 13 ++++---------
 setup.cfg    |  2 +-
 3 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8cfecec..f641f24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,3 +5,4 @@ here's only the changelog for the version in development
 
 * proofed against loading empty strings
 * Python 3.6 is supported
+* minor speed improvements
diff --git a/minijson.pyx b/minijson.pyx
index 63a1586..8eedfe8 100644
--- a/minijson.pyx
+++ b/minijson.pyx
@@ -44,13 +44,13 @@ cpdef void switch_default_double():
     global float_encoding_mode
     float_encoding_mode = 1
 
-cdef tuple parse_cstring(bytes data, int starting_position):
+cdef inline tuple parse_cstring(bytes data, int starting_position):
     cdef:
         int strlen = data[starting_position]
         bytes subdata = data[starting_position+1:starting_position+1+strlen]
     return strlen+1, subdata
 
-cdef tuple parse_list(bytes data, int elem_count, int starting_position):
+cdef inline tuple parse_list(bytes data, int elem_count, int starting_position):
     """
     Parse a list with this many elements
     
@@ -120,8 +120,8 @@ cdef inline tuple parse_sdict(bytes data, int elem_count, int starting_position)
     return offset, dct
 
 
-cdef bint can_be_encoded_as_a_dict(dict dct):
-    for key, value in dct.items():
+cdef inline bint can_be_encoded_as_a_dict(dict dct):
+    for key in dct.keys():
         if not isinstance(key, str):
             return False
         if len(key) > 255:
@@ -167,16 +167,13 @@ cpdef tuple parse(bytes data, int starting_position):
                 raise DecodingError('Invalid UTF-8') from e
         elif value_type & 0xF0 == 0x40:
             elements = value_type & 0xF
-            e_list = []
             string_length, e_list = parse_list(data, elements, starting_position+1)
             return string_length+1, e_list
         elif value_type & 0xF0 == 0x50:
-            e_dict = {}
             elements = value_type & 0xF
             offset, e_dict = parse_dict(data, elements, starting_position+1)
             return offset+1, e_dict
         elif value_type & 0xF0 == 0x60:
-            e_dict = {}
             elements = value_type & 0xF
             offset, e_dict = parse_sdict(data, elements, starting_position+1)
             return offset+1, e_dict
@@ -212,7 +209,6 @@ cpdef tuple parse(bytes data, int starting_position):
                 return 2, sint8
         elif value_type == 7:
             elements = data[starting_position+1]
-            e_list = []
             offset, e_list = parse_list(data, elements, starting_position+2)
             return offset+2, e_list
         elif value_type == 8:
@@ -226,7 +222,6 @@ cpdef tuple parse(bytes data, int starting_position):
             return 4, uint32
         elif value_type == 11:
             elements = data[starting_position+1]
-            e_dict = {}
             offset, e_dict = parse_dict(data, elements, starting_position+2)
             return offset+2, e_dict
         elif value_type == 13:
diff --git a/setup.cfg b/setup.cfg
index de2ae17..6a25dc7 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 # coding: utf-8
 [metadata]
-version = 2.1rc1
+version = 2.1rc2
 name = minijson
 long-description = file: README.md
 long-description-content-type = text/markdown; charset=UTF-8
-- 
GitLab