JSBFunction.h 2.7 KB

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