nany
funcdef.h
1 #pragma once
2 #include <yuni/yuni.h>
3 #include <yuni/core/string.h>
4 #include <yuni/core/smartptr/intrusive.h>
5 #include "details/utils/clid.h"
6 #include "type.h"
7 #include <vector>
8 #include "classdef-overloads.h"
9 
10 
11 namespace ny {
12 
13 
15 struct Funcdef final
16  : public Yuni::IIntrusiveSmartPtr<Funcdef, false, Yuni::Policy::SingleThreaded> {
17 
19 
20  bool hasParameters() const;
23  bool hasReturnType() const;
24 
26  bool isOperator() const;
28  bool isFunc() const;
30 
32 
33  void resetReturnType(const CLID&);
36  void resetReturnTypeToVoid();
37 
39  void appendParameter(const CLID&);
41  void appendParameter(const AnyString& name, const CLID&);
43 
44 
46 
47  bool isPartiallyResolved() const;
50  bool isFullyResolved() const;
52 
53 
55 
56  void print(Yuni::String& out, bool clearBefore = true) const;
59 
60 
61 public:
63  const AnyString name;
69  std::vector<std::pair<AnyString, CLID>> parameters;
70 
71  Atom* atom = nullptr;
74 
75 
76 private:
77  friend struct ClassdefTable;
79  explicit Funcdef(const AnyString& name);
80 
81 }; // struct Funcdef
82 
83 
84 } // namespace ny
85 
86 #include "funcdef.hxx"
bool hasParameters() const
Get if the funcdef has parameters.
Definition: funcdef.hxx:18
void appendParameter(const CLID &)
Append an unamed parameter.
Definition: funcdef.hxx:33
bool isPartiallyResolved() const
Get if the funcdef is resolved or has overloads.
Definition: funcdef.hxx:56
void resetReturnType(const CLID &)
Reset the return type.
Definition: funcdef.hxx:28
Definition: clid.h:11
ClassdefOverloads overloads
Overloads.
Definition: funcdef.h:73
Function definition.
Definition: funcdef.h:15
Definition: ast.cpp:6
CLID clid
clid
Definition: funcdef.h:65
Definition: classdef-table.h:19
CLID rettype
Return type (null means void)
Definition: funcdef.h:67
const AnyString name
Name of the func or the operator.
Definition: funcdef.h:63
bool isOperator() const
Is operator ?
Definition: funcdef.hxx:45
Definition of a single class or function.
Definition: atom.h:37
void print(Yuni::String &out, bool clearBefore=true) const
Export the func definition.
Definition: funcdef.cpp:9
Definition: classdef-overloads.h:13
bool isFunc() const
Is a function ?
Definition: funcdef.hxx:50
std::vector< std::pair< AnyString, CLID > > parameters
parameters (name if name parameter, type)
Definition: funcdef.h:69
bool hasReturnType() const
Get if the funcdef has a return type (&#39;void&#39; otherwise)
Definition: funcdef.hxx:13
bool isFullyResolved() const
Get if the funcdef is fully resolved.
Definition: funcdef.hxx:61
void resetReturnTypeToVoid()
Reset the return type to void.
Definition: funcdef.hxx:23