From 88fab669c6132d22beab6014ed7d48288fa30a01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 25 Jul 2018 18:42:23 +0200
Subject: [PATCH] Macroprocessor: length() operator called on a string returns
 the number of characters

Closes DynareTeam/Dynare#1547
---
 src/macro/MacroValue.cc | 6 ++++++
 src/macro/MacroValue.hh | 1 +
 2 files changed, 7 insertions(+)

diff --git a/src/macro/MacroValue.cc b/src/macro/MacroValue.cc
index c44f80c1..4d1f0ca0 100644
--- a/src/macro/MacroValue.cc
+++ b/src/macro/MacroValue.cc
@@ -329,6 +329,12 @@ StringMV::print()
   return "'" + value + "'";
 }
 
+shared_ptr<IntMV>
+StringMV::length() noexcept(false)
+{
+  return make_shared<IntMV>(value.length());
+}
+
 FuncMV::FuncMV(vector<string> args_arg, string body_arg) :
   args{move(args_arg)}, body{move(body_arg)}
 {
diff --git a/src/macro/MacroValue.hh b/src/macro/MacroValue.hh
index b8e782d0..35c9c934 100644
--- a/src/macro/MacroValue.hh
+++ b/src/macro/MacroValue.hh
@@ -161,6 +161,7 @@ public:
   //! Returns underlying string value
   string toString() override;
   string print() override;
+  shared_ptr<IntMV> length() noexcept(false) override;
 };
 
 class FuncMV : public MacroValue
-- 
GitLab