JSBFunction.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #pragma once
  2. #include <Atomic/IO/Log.h>
  3. #include "JSBClass.h"
  4. #include "JSBType.h"
  5. #include "JSBSymbol.h"
  6. class JSBFunctionType
  7. {
  8. public:
  9. JSBFunctionType(JSBType* type) : type_(type)
  10. {
  11. isSharedPtr_ = false;
  12. isPointer_ = false;
  13. isReference_ = false;
  14. }
  15. bool isSharedPtr_;
  16. bool isPointer_;
  17. bool isReference_;
  18. String name_;
  19. String initializer_;
  20. JSBType* type_;
  21. String ToString()
  22. {
  23. String tstring = type_->ToString();
  24. if (isPointer_)
  25. tstring += "*";
  26. if (isReference_)
  27. tstring += "&";
  28. if (name_.Length())
  29. {
  30. tstring += " " + name_;
  31. }
  32. return tstring;
  33. }
  34. String ToArgString(int index)
  35. {
  36. String tstring = type_->ToString();
  37. if (isPointer_)
  38. tstring += "*";
  39. if (isReference_ && tstring != "String")
  40. tstring += "&";
  41. if (name_.Length())
  42. {
  43. tstring.AppendWithFormat(" __arg%i", index);
  44. }
  45. return tstring;
  46. }
  47. };
  48. class JSBFunction : public JSBSymbol
  49. {
  50. public:
  51. JSBClass* class_;
  52. String name_;
  53. String propertyName_;
  54. JSBFunctionType* returnType_;
  55. Vector<JSBFunctionType*> parameters_;
  56. String docString_;
  57. bool isConstructor_;
  58. bool isDestructor_;
  59. bool isGetter_;
  60. bool isSetter_;
  61. bool isOverride_;
  62. bool skip_;
  63. int FirstDefaultParameter()
  64. {
  65. for (unsigned i = 0; i < parameters_.Size(); i++)
  66. {
  67. if (parameters_[i]->initializer_.Length())
  68. return i;
  69. }
  70. return -1;
  71. }
  72. void AddParameter(JSBFunctionType* parm)
  73. {
  74. parameters_.Push(parm);
  75. }
  76. JSBFunction(JSBClass* klass) : class_(klass), returnType_(0),
  77. isConstructor_(false), isDestructor_(false),
  78. isGetter_(false), isSetter_(false),
  79. isOverride_(false), skip_(false)
  80. {
  81. }
  82. void SetSkip(bool value) { skip_ = value; }
  83. bool Skip() { return skip_; }
  84. void Process();
  85. void WriteParameterMarshal(String& source);
  86. void WriteFunction(String& source);
  87. void WriteConstructor(String& source);
  88. void Write(String& source);
  89. void Dump()
  90. {
  91. String sig;
  92. if (!returnType_)
  93. sig += "void ";
  94. else
  95. sig += returnType_->ToString() + " ";
  96. sig += name_;
  97. sig += "(";
  98. for (unsigned i = 0; i < parameters_.Size(); i++)
  99. {
  100. sig += parameters_.At(i)->ToString();
  101. if (i != parameters_.Size() - 1)
  102. sig += ", ";
  103. }
  104. sig += ");";
  105. LOGINFOF(" %s", sig.CString());
  106. }
  107. };