summaryrefslogtreecommitdiff
path: root/cpp/src/slice2js/Gen.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2js/Gen.h')
-rw-r--r--cpp/src/slice2js/Gen.h93
1 files changed, 86 insertions, 7 deletions
diff --git a/cpp/src/slice2js/Gen.h b/cpp/src/slice2js/Gen.h
index a778ba65fd4..f5bc6216a52 100644
--- a/cpp/src/slice2js/Gen.h
+++ b/cpp/src/slice2js/Gen.h
@@ -19,14 +19,18 @@ class JsVisitor : public JsGenerator, public ParserVisitor
{
public:
- JsVisitor(::IceUtilInternal::Output&);
+ JsVisitor(::IceUtilInternal::Output&,
+ const std::vector<std::pair<std::string, std::string>>& imports =
+ std::vector<std::pair<std::string, std::string>>());
virtual ~JsVisitor();
+ std::vector<std::pair<std::string, std::string>> imports() const;
+
protected:
void writeMarshalDataMembers(const DataMemberList&, const DataMemberList&);
void writeUnmarshalDataMembers(const DataMemberList&, const DataMemberList&);
- void writeInitDataMembers(const DataMemberList&, const std::string&);
+ void writeInitDataMembers(const DataMemberList&);
std::string getValue(const std::string&, const TypePtr&);
@@ -36,6 +40,8 @@ protected:
void writeDocComment(const ContainedPtr&, const std::string&, const std::string& = "");
::IceUtilInternal::Output& _out;
+
+ std::vector<std::pair<std::string, std::string>> _imports;
};
class Gen : public JsGenerator
@@ -44,11 +50,13 @@ public:
Gen(const std::string&,
const std::vector<std::string>&,
- const std::string&);
+ const std::string&,
+ bool);
Gen(const std::string&,
const std::vector<std::string>&,
const std::string&,
+ bool,
std::ostream&);
~Gen();
@@ -58,14 +66,14 @@ public:
private:
- std::ofstream _stdout;
IceUtilInternal::Output _out;
std::vector<std::string> _includePaths;
std::string _fileBase;
bool _useStdout;
-
- void printHeader();
+ bool _typeScript;
+ bool _buildModule;
+ bool _noModule;
class RequireVisitor : public JsVisitor
{
@@ -95,7 +103,9 @@ private:
bool _seenLocalException;
bool _seenEnum;
bool _seenObjectSeq;
+ bool _seenObjectProxySeq;
bool _seenObjectDict;
+ bool _seenObjectProxyDict;
std::vector<std::string> _includePaths;
};
@@ -103,7 +113,7 @@ private:
{
public:
- TypesVisitor(::IceUtilInternal::Output&, std::vector< std::string>, bool);
+ TypesVisitor(::IceUtilInternal::Output&, std::vector<std::string>, bool);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -130,12 +140,81 @@ private:
ExportVisitor(::IceUtilInternal::Output&, bool, bool);
virtual bool visitModuleStart(const ModulePtr&);
+
private:
bool _icejs;
bool _es6modules;
std::vector<std::string> _exported;
};
+
+ class TypeScriptRequireVisitor : public JsVisitor
+ {
+ public:
+
+ TypeScriptRequireVisitor(::IceUtilInternal::Output&);
+
+ virtual bool visitModuleStart(const ModulePtr&);
+ virtual bool visitClassDefStart(const ClassDefPtr&);
+ virtual bool visitStructStart(const StructPtr&);
+ virtual bool visitExceptionStart(const ExceptionPtr&);
+ virtual void visitSequence(const SequencePtr&);
+ virtual void visitDictionary(const DictionaryPtr&);
+
+ void writeRequires(const UnitPtr&);
+
+ private:
+
+ void addImport(const TypePtr&, const ContainedPtr&);
+ void addImport(const ContainedPtr&, const ContainedPtr&);
+ void addImport(const std::string&, const std::string&, const std::string&, const std::string&);
+
+ std::string nextImportPrefix();
+
+ int _nextImport;
+ std::map<std::string, std::string> _modulePrefix;
+ };
+
+ class TypeScriptAliasVisitor : public JsVisitor
+ {
+ public:
+
+ TypeScriptAliasVisitor(::IceUtilInternal::Output&);
+
+ virtual bool visitModuleStart(const ModulePtr&);
+ virtual bool visitClassDefStart(const ClassDefPtr&);
+ virtual bool visitStructStart(const StructPtr&);
+ virtual bool visitExceptionStart(const ExceptionPtr&);
+ virtual void visitSequence(const SequencePtr&);
+ virtual void visitDictionary(const DictionaryPtr&);
+
+ void writeAlias(const UnitPtr&);
+
+ private:
+
+ void addAlias(const ExceptionPtr&, const ContainedPtr&);
+ void addAlias(const TypePtr&, const ContainedPtr&);
+ void addAlias(const std::string&, const std::string&, const ContainedPtr&);
+ std::vector<std::pair<std::string, std::string>> _aliases;
+ };
+
+ class TypeScriptVisitor : public JsVisitor
+ {
+ public:
+
+ TypeScriptVisitor(::IceUtilInternal::Output&,
+ const std::vector<std::pair<std::string, std::string>>&);
+
+ virtual bool visitModuleStart(const ModulePtr&);
+ virtual void visitModuleEnd(const ModulePtr&);
+ virtual bool visitClassDefStart(const ClassDefPtr&);
+ virtual bool visitExceptionStart(const ExceptionPtr&);
+ virtual bool visitStructStart(const StructPtr&);
+ virtual void visitSequence(const SequencePtr&);
+ virtual void visitDictionary(const DictionaryPtr&);
+ virtual void visitEnum(const EnumPtr&);
+ virtual void visitConst(const ConstPtr&);
+ };
};
}