JSBHeader.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //
  2. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  3. // LICENSE: Atomic Game Engine Editor and Tools EULA
  4. // Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
  5. // license information: https://github.com/AtomicGameEngine/AtomicGameEngine
  6. //
  7. #include <Atomic/IO/File.h>
  8. #include "cplusplus/CPlusPlus.h"
  9. using namespace CPlusPlus;
  10. #include "JSBPreprocessVisitor.h"
  11. #include "JSBHeaderVisitor.h"
  12. #include "JSBModule.h"
  13. #include "JSBHeader.h"
  14. namespace ToolCore
  15. {
  16. JSBHeader::JSBHeader(Context* context, JSBModule* module, const String& filepath) : Object(context),
  17. translationUnit_(0),
  18. globalNamespace_(0),
  19. filepath_(filepath),
  20. module_(module)
  21. {
  22. }
  23. JSBHeader::~JSBHeader()
  24. {
  25. }
  26. void JSBHeader::Parse()
  27. {
  28. Control* control = new Control();
  29. const StringLiteral *fileId = control->stringLiteral(filepath_.CString(), filepath_.Length() );
  30. LanguageFeatures features;
  31. features.qtEnabled = false;
  32. features.qtMocRunEnabled = false;
  33. features.qtKeywordsEnabled = false;
  34. features.cxx11Enabled = true;
  35. features.objCEnabled = false;
  36. features.c99Enabled = false;
  37. translationUnit_ = new TranslationUnit(control, fileId);
  38. translationUnit_->setLanguageFeatures(features);
  39. control->switchTranslationUnit(translationUnit_);
  40. File file(context_);
  41. file.Open(filepath_);
  42. unsigned size = file.GetSize();
  43. data_ = new char[size + 1];
  44. data_[size] = '\0';
  45. file.Read(data_, size);
  46. // TODO: add error reporting
  47. translationUnit_->blockErrors(true);
  48. translationUnit_->setSource(data_, size);
  49. translationUnit_->tokenize();
  50. translationUnit_->parse();
  51. globalNamespace_ = control->newNamespace(0);
  52. Bind* semantic = new Bind(translationUnit_);
  53. semantic->setSkipFunctionBodies(true);
  54. (*semantic)(translationUnit_->ast()->asTranslationUnit(), globalNamespace_);
  55. }
  56. void JSBHeader::VisitPreprocess()
  57. {
  58. JSBPreprocessVisitor(this, translationUnit_,globalNamespace_);
  59. }
  60. void JSBHeader::VisitHeader()
  61. {
  62. JSBHeaderVisitor(this, translationUnit_, globalNamespace_);
  63. }
  64. }