ASGlobalVariableBinder.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #include "ASResult.h"
  4. #include "ASUtils.h"
  5. #include "Tuning.h"
  6. #include "Utils.h"
  7. #include "XmlAnalyzer.h"
  8. #include "XmlSourceData.h"
  9. using namespace std;
  10. namespace ASBindingGenerator
  11. {
  12. static bool HaveMark(const GlobalVariableAnalyzer& varAnalyzer, const string& mark)
  13. {
  14. return Contains(varAnalyzer.GetComment(), mark);
  15. }
  16. static void ProcessGlobalVariable(GlobalVariableAnalyzer varAnalyzer)
  17. {
  18. string header = varAnalyzer.GetHeaderFile();
  19. Result::AddHeader(header);
  20. if (IsIgnoredHeader(header))
  21. return;
  22. ProcessedGlobalVariable processedGlobalVariable;
  23. processedGlobalVariable.name_ = varAnalyzer.GetName();
  24. processedGlobalVariable.insideDefine_ = InsideDefine(header);
  25. processedGlobalVariable.comment_ = varAnalyzer.GetLocation();
  26. if (varAnalyzer.IsArray())
  27. {
  28. processedGlobalVariable.registration_ = "// Not registered because array";
  29. Result::globalVariables_.push_back(processedGlobalVariable);
  30. return;
  31. }
  32. if (HaveMark(varAnalyzer, "NO_BIND"))
  33. {
  34. processedGlobalVariable.registration_ = "// Not registered because have @nobind mark";
  35. Result::globalVariables_.push_back(processedGlobalVariable);
  36. return;
  37. }
  38. TypeAnalyzer typeAnalyzer = varAnalyzer.GetType();
  39. string asType;
  40. try
  41. {
  42. asType = CppPrimitiveTypeToAS(typeAnalyzer.GetName());
  43. }
  44. catch (...)
  45. {
  46. asType = typeAnalyzer.GetName();
  47. }
  48. if (typeAnalyzer.IsConst() || typeAnalyzer.IsConstexpr())
  49. asType = "const " + asType;
  50. string varName = varAnalyzer.GetName();
  51. processedGlobalVariable.registration_ = "engine->RegisterGlobalProperty(\"" + asType + " " + varName + "\", (void*)&" + varName + ");";
  52. Result::globalVariables_.push_back(processedGlobalVariable);
  53. }
  54. void ProcessAllGlobalVariables()
  55. {
  56. NamespaceAnalyzer namespaceAnalyzer(SourceData::namespaceUrho3D_);
  57. vector<GlobalVariableAnalyzer> globalVariableAnalyzers = namespaceAnalyzer.GetVariables();
  58. for (GlobalVariableAnalyzer globalVariableAnalyzer : globalVariableAnalyzers)
  59. ProcessGlobalVariable(globalVariableAnalyzer);
  60. }
  61. } // namespace ASBindingGenerator