ASGlobalVariableBinder.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright (c) 2008-2022 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 void ProcessGlobalVariable(GlobalVariableAnalyzer varAnalyzer)
  13. {
  14. string header = varAnalyzer.GetHeaderFile();
  15. Result::AddHeader(header);
  16. if (IsIgnoredHeader(header))
  17. return;
  18. ProcessedGlobalVariable processedGlobalVariable;
  19. processedGlobalVariable.name_ = varAnalyzer.GetName();
  20. processedGlobalVariable.insideDefine_ = InsideDefine(header);
  21. processedGlobalVariable.comment_ = varAnalyzer.GetLocation();
  22. if (varAnalyzer.IsArray())
  23. {
  24. processedGlobalVariable.registration_ = "// Not registered because array";
  25. Result::globalVariables_.push_back(processedGlobalVariable);
  26. return;
  27. }
  28. TypeAnalyzer typeAnalyzer = varAnalyzer.GetType();
  29. string asType;
  30. try
  31. {
  32. asType = CppPrimitiveTypeToAS(typeAnalyzer.GetName());
  33. }
  34. catch (...)
  35. {
  36. asType = typeAnalyzer.GetName();
  37. }
  38. if (typeAnalyzer.IsConst() || typeAnalyzer.IsConstexpr())
  39. asType = "const " + asType;
  40. string varName = varAnalyzer.GetName();
  41. processedGlobalVariable.registration_ = "engine->RegisterGlobalProperty(\"" + asType + " " + varName + "\", (void*)&" + varName + ");";
  42. Result::globalVariables_.push_back(processedGlobalVariable);
  43. }
  44. void ProcessAllGlobalVariables()
  45. {
  46. NamespaceAnalyzer namespaceAnalyzer(SourceData::namespaceUrho3D_);
  47. vector<GlobalVariableAnalyzer> globalVariableAnalyzers = namespaceAnalyzer.GetVariables();
  48. for (GlobalVariableAnalyzer globalVariableAnalyzer : globalVariableAnalyzers)
  49. ProcessGlobalVariable(globalVariableAnalyzer);
  50. }
  51. } // namespace ASBindingGenerator