JSBHeader.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <Atomic/Atomic.h>
  2. #include <Atomic/IO/File.h>
  3. #include "JSBHeader.h"
  4. #include "JSBHeaderVisitor.h"
  5. #include "JSBPreprocessVisitor.h"
  6. #include "JSBind.h"
  7. void JSBHeader::Parse()
  8. {
  9. Control* control = new Control();
  10. const StringLiteral *fileId = control->stringLiteral(filepath_.CString(), filepath_.Length() );
  11. LanguageFeatures features;
  12. features.qtEnabled = false;
  13. features.qtMocRunEnabled = false;
  14. features.qtKeywordsEnabled = false;
  15. features.cxx11Enabled = true;
  16. features.objCEnabled = false;
  17. features.c99Enabled = false;
  18. translationUnit_ = new TranslationUnit(control, fileId);
  19. translationUnit_->setLanguageFeatures(features);
  20. control->switchTranslationUnit(translationUnit_);
  21. File file(JSBind::context_);
  22. file.Open(filepath_);
  23. unsigned size = file.GetSize();
  24. data_ = new char[size + 1];
  25. data_[size] = '\0';
  26. file.Read(data_, size);
  27. // TODO: add error reporting
  28. translationUnit_->blockErrors(true);
  29. translationUnit_->setSource(data_, size);
  30. translationUnit_->tokenize();
  31. translationUnit_->parse();
  32. globalNamespace_ = control->newNamespace(0);
  33. Bind* semantic = new Bind(translationUnit_);
  34. semantic->setSkipFunctionBodies(true);
  35. //if (TranslationUnitAST *ast = _translationUnit->ast()->asTranslationUnit())
  36. (*semantic)(translationUnit_->ast()->asTranslationUnit(), globalNamespace_);
  37. //else if (StatementAST *ast = _translationUnit->ast()->asStatement())
  38. // semantic(ast, _globalNamespace);
  39. //else if (ExpressionAST *ast = _translationUnit->ast()->asExpression())
  40. // semantic(ast, _globalNamespace);
  41. //else if (DeclarationAST *ast = translationUnit()->ast()->asDeclaration())
  42. // semantic(ast, _globalNamespace);
  43. //JSBHeaderVisitor* visitor = new JSBHeaderVisitor(this, translationUnit,globalNamespace);
  44. //visitor->accept(translationUnit->ast());
  45. }
  46. void JSBHeader::VisitPreprocess()
  47. {
  48. JSBPreprocessVisitor* visitor = new JSBPreprocessVisitor(this, translationUnit_,globalNamespace_);
  49. }
  50. void JSBHeader::VisitHeader()
  51. {
  52. JSBHeaderVisitor* visitor = new JSBHeaderVisitor(this, translationUnit_,globalNamespace_);
  53. }