JSBFunction.h 2.9 KB

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