Explicit representation of ASTs for all the functions in a compile unit.

Added AST and Function classes.
Now, we parse the whole file and build up the AST for all of the
  functions in the Module before we emit IR for the functions (vs. before,
  when we generated IR along the way as we parsed the source file.)
This commit is contained in:
Matt Pharr
2011-10-06 15:18:42 -07:00
parent ec5e627e56
commit f9c67ff806
15 changed files with 935 additions and 613 deletions

33
ispc.h
View File

@@ -90,8 +90,8 @@ class Declarator;
class FunctionEmitContext;
class Expr;
class ExprList;
class Function;
class FunctionType;
class GatherBuffer;
class Module;
class Stmt;
class Symbol;
@@ -124,37 +124,6 @@ struct SourcePos {
};
/** @brief Abstract base class for nodes in the abstract syntax tree (AST).
This class defines a basic interface that all abstract syntax tree
(AST) nodes must implement. The base classes for both expressions
(Expr) and statements (Stmt) inherit from this class.
*/
class ASTNode {
public:
ASTNode(SourcePos p) : pos(p) { }
virtual ~ASTNode();
/** The Optimize() method should perform any appropriate early-stage
optimizations on the node (e.g. constant folding). The caller
should use the returned ASTNode * in place of the original node.
This method may return NULL if an error is encountered during
optimization. */
virtual ASTNode *Optimize() = 0;
/** Type checking should be performed by the node when this method is
called. In the event of an error, a NULL value may be returned.
As with ASTNode::Optimize(), the caller should store the returned
pointer in place of the original ASTNode *. */
virtual ASTNode *TypeCheck() = 0;
virtual int EstimateCost() const = 0;
/** All AST nodes must track the file position where they are
defined. */
const SourcePos pos;
};
/** @brief Structure that defines a compilation target
This structure defines a compilation target for the ispc compiler.