diff options
Diffstat (limited to 'cpp/include/Slice/Parser.h')
-rw-r--r-- | cpp/include/Slice/Parser.h | 61 |
1 files changed, 49 insertions, 12 deletions
diff --git a/cpp/include/Slice/Parser.h b/cpp/include/Slice/Parser.h index 6c5a4f5d75b..51fb288b318 100644 --- a/cpp/include/Slice/Parser.h +++ b/cpp/include/Slice/Parser.h @@ -68,6 +68,16 @@ SLICE_API enum NodeType Real }; +// +// Format preference for classes and exceptions. +// +SLICE_API enum FormatType +{ + DefaultFormat, // No preference was specified. + CompactFormat, // Minimal format. + SlicedFormat // Full format. +}; + class GrammarBase; class SyntaxTreeBase; class Type; @@ -146,6 +156,14 @@ struct ConstDef std::string valueAsLiteral; }; +struct OptionalDef +{ + TypePtr type; + std::string name; + bool optional; + int tag; +}; + // ---------------------------------------------------------------------- // CICompare -- function object to do case-insensitive string comparison. // ---------------------------------------------------------------------- @@ -353,6 +371,8 @@ public: void setMetaData(const std::list<std::string>&); void addMetaData(const std::string&); // TODO: remove this method once "cs:" and "vb:" are hard errors. + static FormatType parseFormatMetaData(const std::list<std::string>&); + enum ContainedType { ContainedTypeSequence, @@ -567,9 +587,11 @@ public: }; TypePtr returnType() const; + bool returnIsOptional() const; + int returnTag() const; Mode mode() const; Mode sendMode() const; - ParamDeclPtr createParamDecl(const std::string&, const TypePtr&, bool); + ParamDeclPtr createParamDecl(const std::string&, const TypePtr&, bool, bool, int); ParamDeclList parameters() const; ExceptionList throws() const; void setExceptionList(const ExceptionList&); @@ -579,15 +601,18 @@ public: bool returnsClasses() const; bool returnsData() const; int attributes() const; + FormatType format() const; virtual std::string kindOf() const; virtual void visit(ParserVisitor*, bool); protected: - Operation(const ContainerPtr&, const std::string&, const TypePtr&, Mode); + Operation(const ContainerPtr&, const std::string&, const TypePtr&, bool, int, Mode); friend class ClassDef; TypePtr _returnType; + bool _returnIsOptional; + int _returnTag; ExceptionList _throws; Mode _mode; }; @@ -608,15 +633,16 @@ class SLICE_API ClassDef : virtual public Container, virtual public Contained public: virtual void destroy(); - OperationPtr createOperation(const std::string&, const TypePtr&, Operation::Mode = Operation::Normal); - DataMemberPtr createDataMember(const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&, - const std::string&); + OperationPtr createOperation(const std::string&, const TypePtr&, bool, int, Operation::Mode = Operation::Normal); + DataMemberPtr createDataMember(const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&, + const std::string&, const std::string&); ClassDeclPtr declaration() const; ClassList bases() const; ClassList allBases() const; OperationList operations() const; OperationList allOperations() const; DataMemberList dataMembers() const; + DataMemberList orderedOptionalDataMembers() const; DataMemberList allDataMembers() const; DataMemberList classDataMembers() const; DataMemberList allClassDataMembers() const; @@ -628,6 +654,7 @@ public: bool hasDataMembers() const; bool hasOperations() const; bool hasDefaultValues() const; + bool inheritsMetaData(const std::string&) const; virtual ContainedType containedType() const; virtual bool uses(const ContainedPtr&) const; virtual std::string kindOf() const; @@ -679,9 +706,10 @@ class SLICE_API Exception : virtual public Container, virtual public Contained public: virtual void destroy(); - DataMemberPtr createDataMember(const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&, - const std::string&); + DataMemberPtr createDataMember(const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&, + const std::string&, const std::string&); DataMemberList dataMembers() const; + DataMemberList orderedOptionalDataMembers() const; DataMemberList allDataMembers() const; DataMemberList classDataMembers() const; DataMemberList allClassDataMembers() const; @@ -693,6 +721,7 @@ public: virtual bool uses(const ContainedPtr&) const; bool usesClasses() const; bool hasDefaultValues() const; + bool inheritsMetaData(const std::string&) const; virtual std::string kindOf() const; virtual void visit(ParserVisitor*, bool); @@ -713,8 +742,8 @@ class SLICE_API Struct : virtual public Container, virtual public Constructed { public: - DataMemberPtr createDataMember(const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&, - const std::string&); + DataMemberPtr createDataMember(const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&, + const std::string&, const std::string&); DataMemberList dataMembers() const; DataMemberList classDataMembers() const; virtual ContainedType containedType() const; @@ -887,6 +916,8 @@ public: TypePtr type() const; bool isOutParam() const; + bool optional() const; + int tag() const; virtual ContainedType containedType() const; virtual bool uses(const ContainedPtr&) const; virtual std::string kindOf() const; @@ -894,11 +925,13 @@ public: protected: - ParamDecl(const ContainerPtr&, const std::string&, const TypePtr&, bool isOutParam); + ParamDecl(const ContainerPtr&, const std::string&, const TypePtr&, bool, bool, int); friend class Operation; TypePtr _type; bool _isOutParam; + bool _optional; + int _tag; }; // ---------------------------------------------------------------------- @@ -910,6 +943,8 @@ class SLICE_API DataMember : virtual public Contained public: TypePtr type() const; + bool optional() const; + int tag() const; std::string defaultValue() const; std::string defaultLiteral() const; SyntaxTreeBasePtr defaultValueType() const; @@ -920,13 +955,15 @@ public: protected: - DataMember(const ContainerPtr&, const std::string&, const TypePtr&, const SyntaxTreeBasePtr&, const std::string&, - const std::string&); + DataMember(const ContainerPtr&, const std::string&, const TypePtr&, bool, int, const SyntaxTreeBasePtr&, + const std::string&, const std::string&); friend class ClassDef; friend class Struct; friend class Exception; TypePtr _type; + bool _optional; + int _tag; SyntaxTreeBasePtr _defaultValueType; std::string _defaultValue; std::string _defaultLiteral; |