JSBHeader.cpp 1.8 KB

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