summaryrefslogtreecommitdiff
path: root/cpp/src/FreezeScript/AssignVisitor.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/FreezeScript/AssignVisitor.h')
-rw-r--r--cpp/src/FreezeScript/AssignVisitor.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/cpp/src/FreezeScript/AssignVisitor.h b/cpp/src/FreezeScript/AssignVisitor.h
new file mode 100644
index 00000000000..f9a4d4031d5
--- /dev/null
+++ b/cpp/src/FreezeScript/AssignVisitor.h
@@ -0,0 +1,59 @@
+// **********************************************************************
+//
+// Copyright (c) 2004
+// ZeroC, Inc.
+// Billerica, MA, USA
+//
+// All Rights Reserved.
+//
+// Ice is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License version 2 as published by
+// the Free Software Foundation.
+//
+// **********************************************************************
+
+#ifndef FREEZE_SCRIPT_ASSIGN_VISITOR_H
+#define FREEZE_SCRIPT_ASSIGN_VISITOR_H
+
+#include <FreezeScript/Data.h>
+
+namespace FreezeScript
+{
+
+class AssignVisitor : public DataVisitor
+{
+public:
+
+ AssignVisitor(const DataPtr&, const DataFactoryPtr&, const ErrorReporterPtr&, bool,
+ const std::string& = std::string());
+
+ virtual void visitBoolean(const BooleanDataPtr&);
+ virtual void visitInteger(const IntegerDataPtr&);
+ virtual void visitDouble(const DoubleDataPtr&);
+ virtual void visitString(const StringDataPtr&);
+ virtual void visitProxy(const ProxyDataPtr&);
+ virtual void visitStruct(const StructDataPtr&);
+ virtual void visitSequence(const SequenceDataPtr&);
+ virtual void visitEnum(const EnumDataPtr&);
+ virtual void visitDictionary(const DictionaryDataPtr&);
+ virtual void visitObject(const ObjectRefPtr&);
+
+private:
+
+ bool isCompatible(const Slice::TypePtr&, const Slice::TypePtr&);
+ bool checkClasses(const Slice::ClassDeclPtr&, const Slice::ClassDeclPtr&);
+ void typeMismatchError(const Slice::TypePtr&, const Slice::TypePtr&);
+ void conversionError(const Slice::TypePtr&, const Slice::TypePtr&, const std::string&);
+ void rangeError(const std::string&, const Slice::TypePtr&);
+ void error(const std::string&);
+
+ DataPtr _src;
+ DataFactoryPtr _factory;
+ ErrorReporterPtr _errorReporter;
+ bool _convert;
+ std::string _context; // Provides additional detail for use in warning messages.
+};
+
+} // End of namespace FreezeScript
+
+#endif