blob: c3d6c5c375fd70625c85b8c3751c82ce1c4f05fc [file] [log] [blame]
Steven Morelandf1a35f72016-08-17 08:41:49 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef AST_H_
18#define AST_H_
19
Steven Morelandf1a35f72016-08-17 08:41:49 -070020#include "Scope.h"
21#include "Expression.h"
22
Iliyan Malcheva72e0d22016-09-09 11:03:08 -070023#include <hidl-util/Formatter.h>
Steven Morelandf1a35f72016-08-17 08:41:49 -070024#include <android-base/macros.h>
25#include <android-base/logging.h>
26#include <string>
27#include <vector>
28#include <utils/Errors.h>
29
30namespace android {
31
32struct Include;
33struct Define;
34struct CompositeDeclaration;
35struct Declaration;
36
37struct AST {
38 AST(const std::string &path,
39 const std::string &outputDir,
40 const std::string &package,
41 bool isOpenGl);
42 ~AST();
43
44 void *scanner();
45 void setScanner(void *scanner);
46
47 bool isOpenGl() const;
48
49 const std::string &getFilename() const;
50
51 void setDeclarations(std::vector<Declaration *> *declarations);
52 void setIncludes(std::vector<Include *> *includes);
53
54 Expression *getExpression() const;
55 void setExpression(Expression *expression);
56
57 status_t generateCode() const;
58
59 void processContents();
60
61 const Scope<Define *> &getDefinesScope() const;
62 Scope<Define *> &getDefinesScope();
63
64private:
65 void * mScanner = NULL;
66 std::string mPath;
67 std::string mOutputDir;
68 std::string mPackage;
69
70 bool mIsOpenGl;
71
72 Expression* mExpression = NULL;
73
74 std::vector<Declaration *> *mDeclarations = NULL;
75 std::vector<CompositeDeclaration *> *mInterfaces = NULL;
76 std::vector<Include *> *mIncludes = NULL;
77
78 Scope<Define *> mDefinesScope;
79
80 const std::string getFileDir() const;
81
82 status_t generateFile(CompositeDeclaration* declaration) const;
83 status_t generateTypesFile() const;
84
85 void generateIncludes(Formatter &out) const;
86 void generatePackageLine(Formatter &out) const;
87
88 void isolateInterfaces();
89 void isolateGlobalInterface();
90 void isolateIncludes();
91 void isolateConstants(Expression::Type ofType);
92
93 DISALLOW_COPY_AND_ASSIGN(AST);
94};
95
96} // namespace android
97
98#endif // AST_H_