diff --git a/native/src/unigram_dictionary.cpp b/native/src/unigram_dictionary.cpp
index 334f38e5b6b8ec103ff7ec44d797f5495cf13e5a..7e5edffaa51e291be2baa2f7417fcb53b9299ca3 100644
--- a/native/src/unigram_dictionary.cpp
+++ b/native/src/unigram_dictionary.cpp
@@ -897,9 +897,9 @@ bool UnigramDictionary::getSplitTwoWordsSuggestion(const int inputLength,
     return true;
 }
 
-inline bool UnigramDictionary::processCurrentNode(const int pos, const int depth,
-        const int maxDepth, const bool traverseAllNodes, int matchWeight, int inputIndex,
-        const int diffs, const int skipPos, const int excessivePos, const int transposedPos,
+inline bool UnigramDictionary::processCurrentNode(const int initialPos, const int initialDepth,
+        const int maxDepth, const bool initialTraverseAllNodes, int matchWeight, int inputIndex,
+        const int initialDiffs, const int skipPos, const int excessivePos, const int transposedPos,
         int *nextLetters, const int nextLettersSize, int *newCount, int *newChildPosition,
         bool *newTraverseAllNodes, int *newMatchRate, int *newInputIndex, int *newDiffs,
         int *nextSiblingPosition, int *nextOutputIndex) {
@@ -916,6 +916,11 @@ inline bool UnigramDictionary::processCurrentNode(const int pos, const int depth
     int freq;
     bool isSameAsUserTypedLength = false;
 
+    const int pos = initialPos;
+    const int depth = initialDepth;
+    const int traverseAllNodes = initialTraverseAllNodes;
+    const int diffs = initialDiffs;
+
     const uint8_t flags = 0; // No flags for now
 
     if (excessivePos == depth && inputIndex < mInputLength - 1) ++inputIndex;
@@ -1028,9 +1033,9 @@ bool UnigramDictionary::getSplitTwoWordsSuggestion(const int inputLength,
     return true;
 }
 
-inline bool UnigramDictionary::processCurrentNode(const int pos, const int depth,
-        const int maxDepth, const bool traverseAllNodes, int matchWeight, int inputIndex,
-        const int diffs, const int skipPos, const int excessivePos, const int transposedPos,
+inline bool UnigramDictionary::processCurrentNode(const int initialPos, const int initialDepth,
+        const int maxDepth, const bool initialTraverseAllNodes, int matchWeight, int inputIndex,
+        const int initialDiffs, const int skipPos, const int excessivePos, const int transposedPos,
         int *nextLetters, const int nextLettersSize, int *newCount, int *newChildPosition,
         bool *newTraverseAllNodes, int *newMatchRate, int *newInputIndex, int *newDiffs,
         int *nextSiblingPosition, int *newOutputIndex) {
@@ -1047,6 +1052,11 @@ inline bool UnigramDictionary::processCurrentNode(const int pos, const int depth
     int freq;
     bool isSameAsUserTypedLength = false;
 
+    int pos = initialPos;
+    int depth = initialDepth;
+    int traverseAllNodes = initialTraverseAllNodes;
+    int diffs = initialDiffs;
+
     const uint8_t flags = 0; // No flags for now
 
     if (excessivePos == depth && inputIndex < mInputLength - 1) ++inputIndex;
diff --git a/native/src/unigram_dictionary.h b/native/src/unigram_dictionary.h
index 184e8543715ba626b5caafb1a58cf10753de5123..c3128bbf675f66899cfd533bb9de96aa7ea301d9 100644
--- a/native/src/unigram_dictionary.h
+++ b/native/src/unigram_dictionary.h
@@ -80,12 +80,12 @@ private:
     ProximityType getMatchedProximityId(const int *currentChars, const unsigned short c,
             const int skipPos, const int excessivePos, const int transposedPos);
     // Process a node by considering proximity, missing and excessive character
-    bool processCurrentNode(const int pos, const int depth,
-            const int maxDepth, const bool traverseAllNodes, const int snr, int inputIndex,
-            const int diffs, const int skipPos, const int excessivePos, const int transposedPos,
-            int *nextLetters, const int nextLettersSize, int *newCount, int *newChildPosition,
-            bool *newTraverseAllNodes, int *newSnr, int*newInputIndex, int *newDiffs,
-            int *nextSiblingPosition, int *nextOutputIndex);
+    bool processCurrentNode(const int initialPos, const int initialDepth,
+            const int maxDepth, const bool initialTraverseAllNodes, const int snr, int inputIndex,
+            const int initialDiffs, const int skipPos, const int excessivePos,
+            const int transposedPos, int *nextLetters, const int nextLettersSize, int *newCount,
+            int *newChildPosition, bool *newTraverseAllNodes, int *newSnr, int*newInputIndex,
+            int *newDiffs, int *nextSiblingPosition, int *nextOutputIndex);
     bool existsAdjacentProximityChars(const int inputIndex, const int inputLength) const;
     inline const int* getInputCharsAt(const int index) const {
         return mInputCodes + (index * MAX_PROXIMITY_CHARS);