// ********************************************************************** // // Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #ifndef GEN_H #define GEN_H #include namespace Slice { class JsVisitor : public JsGenerator, public ParserVisitor { public: JsVisitor(::IceUtilInternal::Output&); virtual ~JsVisitor(); protected: void writeMarshalUnmarshalParams(const ParamDeclList&, const OperationPtr&, bool); void writePostUnmarshalParams(const ParamDeclList&, const OperationPtr&); void writeMarshalDataMember(const DataMemberPtr&); void writeUnmarshalDataMember(const DataMemberPtr&); virtual void writeDispatchAndMarshalling(const ClassDefPtr&); virtual std::vector getParams(const OperationPtr&); virtual std::vector getParamsAsync(const OperationPtr&, bool, bool = false); virtual std::vector getParamsAsyncCB(const OperationPtr&, bool = false, bool = true); virtual std::vector getArgs(const OperationPtr&); virtual std::vector getArgsAsync(const OperationPtr&, bool = false); virtual std::vector getArgsAsyncCB(const OperationPtr&, bool = false, bool = false); std::string getValue(const std::string&, const TypePtr&); void writeConstantValue(const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&); static StringList splitComment(const ContainedPtr&); void writeDocComment(const ContainedPtr&, const std::string&, const std::string& = ""); ::IceUtilInternal::Output& _out; }; class Gen : public JsGenerator { public: Gen(const std::string&, const std::vector&, const std::string&, bool); ~Gen(); void generate(const UnitPtr&); void closeOutput(); private: IceUtilInternal::Output _out; std::vector _includePaths; std::string _fileBase; bool _icejs; void printHeader(); class RequireVisitor : public JsVisitor { public: RequireVisitor(::IceUtilInternal::Output&, std::vector, bool); virtual bool visitClassDefStart(const ClassDefPtr&); virtual bool visitStructStart(const StructPtr&); virtual void visitOperation(const OperationPtr&); virtual bool visitExceptionStart(const ExceptionPtr&); virtual void visitSequence(const SequencePtr&); virtual void visitDictionary(const DictionaryPtr&); virtual void visitEnum(const EnumPtr&); std::vector< std::string> writeRequires(const UnitPtr&); private: bool _icejs; bool _seenClass; bool _seenCompactId; bool _seenOperation; bool _seenStruct; bool _seenUserException; bool _seenLocalException; bool _seenEnum; bool _seenObjectSeq; bool _seenObjectDict; std::vector _includePaths; }; class TypesVisitor : public JsVisitor { public: TypesVisitor(::IceUtilInternal::Output&, std::vector< std::string>, bool); 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&); private: std::string encodeTypeForOperation(const TypePtr&); std::vector _seenModules; bool _icejs; }; class ExportVisitor : public JsVisitor { public: ExportVisitor(::IceUtilInternal::Output&, bool); virtual bool visitModuleStart(const ModulePtr&); private: bool _icejs; }; }; } #endif