From a06c9c767d1beb2cc1222e3d2ed61a4c8f2cf4e4 Mon Sep 17 00:00:00 2001
From: Capostrophic <21265616+Capostrophic@users.noreply.github.com>
Date: Sun, 19 Aug 2018 18:36:43 +0300
Subject: [PATCH] Treat <> and << operators as < and  >< and >> as > in scripts

(bug #4597)
---
 CHANGELOG.md                    |  1 +
 components/compiler/scanner.cpp | 10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d6d8df78eb..4b573766a0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -98,6 +98,7 @@
     Bug #4575: Weird result of attack animation blending with movement animations
     Bug #4576: Reset of idle animations when attack can not be started
     Bug #4591: Attack strength should be 0 if player did not hold the attack button
+    Bug #4597: <> operator causes a compile error
     Feature #1645: Casting effects from objects
     Feature #2606: Editor: Implemented (optional) case sensitive global search
     Feature #3083: Play animation when NPC is casting spell via script
diff --git a/components/compiler/scanner.cpp b/components/compiler/scanner.cpp
index bb0fb93740..f159b8b8bd 100644
--- a/components/compiler/scanner.cpp
+++ b/components/compiler/scanner.cpp
@@ -502,6 +502,11 @@ namespace Compiler
                     if (get (c) && c!='=') // <== is a allowed as an alternative to <=  :(
                         putback (c);
                 }
+                else if (c == '<' || c == '>') // Treat <> and << as <
+                {
+                    special = S_cmpLT;
+                    mErrorHandler.warning (std::string("invalid operator <") + c + ", treating it as <", mLoc);
+                }
                 else
                 {
                     putback (c);
@@ -525,6 +530,11 @@ namespace Compiler
                     if (get (c) && c!='=') // >== is a allowed as an alternative to >=  :(
                         putback (c);
                 }
+                else if (c == '<' || c == '>') // Treat >< and >> as >
+                {
+                    special = S_cmpGT;
+                    mErrorHandler.warning (std::string("invalid operator >") + c + ", treating it as >", mLoc);
+                }
                 else
                 {
                     putback (c);