diff --git a/shared/cplusplus/Control.cpp b/shared/cplusplus/Control.cpp
index c994dbab9a276f6885e121f0176cac8ff44a1972..a486dfdb9408b9b7544c03d4a19e3cba9a287087 100644
--- a/shared/cplusplus/Control.cpp
+++ b/shared/cplusplus/Control.cpp
@@ -511,6 +511,12 @@ Identifier *Control::findOrInsertIdentifier(const char *chars)
     return findOrInsertIdentifier(chars, length);
 }
 
+Control::IdentifierIterator Control::firstIdentifier() const
+{ return d->identifiers.begin(); }
+
+Control::IdentifierIterator Control::lastIdentifier() const
+{ return d->identifiers.end(); }
+
 StringLiteral *Control::findOrInsertStringLiteral(const char *chars, unsigned size)
 { return d->stringLiterals.findOrInsertLiteral(chars, size); }
 
diff --git a/shared/cplusplus/Control.h b/shared/cplusplus/Control.h
index fa7b4faa50256d43202acaa0591600ce1eb64ebe..bd4b204843f3ae215b0db7138f34d5c25e336e8e 100644
--- a/shared/cplusplus/Control.h
+++ b/shared/cplusplus/Control.h
@@ -151,6 +151,11 @@ public:
     Identifier *findOrInsertIdentifier(const char *chars, unsigned size);
     Identifier *findOrInsertIdentifier(const char *chars);
 
+    typedef const Identifier *const *IdentifierIterator;
+
+    IdentifierIterator firstIdentifier() const;
+    IdentifierIterator lastIdentifier() const;
+
     StringLiteral *findOrInsertStringLiteral(const char *chars, unsigned size);
     StringLiteral *findOrInsertStringLiteral(const char *chars);