JSBHeader.cpp 1.7 KB

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