Add scaffolding for scopes.

llvm-svn: 38821
This commit is contained in:
Chris Lattner 2006-08-05 22:46:42 +00:00
parent 2d4f2c3ebe
commit 971c6b681a
5 changed files with 72 additions and 2 deletions

View File

@ -13,11 +13,20 @@
#include "clang/Parse/Parser.h"
#include "clang/Parse/Declarations.h"
#include "clang/Parse/Scope.h"
using namespace llvm;
using namespace clang;
Parser::Parser(Preprocessor &pp, ParserActions &actions)
: PP(pp), Actions(actions), Diags(PP.getDiagnostics()) {}
: PP(pp), Actions(actions), Diags(PP.getDiagnostics()) {
// Create the global scope, install it as the current scope.
CurScope = new Scope(0);
}
Parser::~Parser() {
delete CurScope;
}
void Parser::Diag(SourceLocation Loc, unsigned DiagID,
const std::string &Msg) {

0
clang/Parse/Scope.cpp Normal file
View File

View File

@ -8,6 +8,8 @@
/* Begin PBXBuildFile section */
DE06B73E0A8307640050E87E /* LangOptions.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE06B73D0A8307640050E87E /* LangOptions.h */; };
DE06BEC90A854E390050E87E /* Scope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE06BEC80A854E390050E87E /* Scope.cpp */; };
DE06BECB0A854E4B0050E87E /* Scope.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE06BECA0A854E4B0050E87E /* Scope.h */; };
DE1F22030A7D852A00FBF588 /* Parser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE1F22020A7D852A00FBF588 /* Parser.h */; };
DE1F22200A7D879000FBF588 /* ParserActions.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE1F221F0A7D879000FBF588 /* ParserActions.h */; };
DE1F24700A7DC99000FBF588 /* Actions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE1F246D0A7DC99000FBF588 /* Actions.cpp */; };
@ -98,6 +100,7 @@
DE1F22200A7D879000FBF588 /* ParserActions.h in CopyFiles */,
DE1F24820A7DCD3800FBF588 /* Declarations.h in CopyFiles */,
DE06B73E0A8307640050E87E /* LangOptions.h in CopyFiles */,
DE06BECB0A854E4B0050E87E /* Scope.h in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 1;
};
@ -106,6 +109,8 @@
/* Begin PBXFileReference section */
8DD76F6C0486A84900D96B5E /* clang */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = clang; sourceTree = BUILT_PRODUCTS_DIR; };
DE06B73D0A8307640050E87E /* LangOptions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = LangOptions.h; sourceTree = "<group>"; };
DE06BEC80A854E390050E87E /* Scope.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Scope.cpp; path = Parse/Scope.cpp; sourceTree = "<group>"; };
DE06BECA0A854E4B0050E87E /* Scope.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Scope.h; path = clang/Parse/Scope.h; sourceTree = "<group>"; };
DE1F22020A7D852A00FBF588 /* Parser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = Parser.h; path = clang/Parse/Parser.h; sourceTree = "<group>"; };
DE1F221F0A7D879000FBF588 /* ParserActions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ParserActions.h; path = clang/Parse/ParserActions.h; sourceTree = "<group>"; };
DE1F246D0A7DC99000FBF588 /* Actions.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Actions.cpp; path = Parse/Actions.cpp; sourceTree = "<group>"; };
@ -206,6 +211,7 @@
DE1F24810A7DCD3800FBF588 /* Declarations.h */,
DE1F22020A7D852A00FBF588 /* Parser.h */,
DE1F221F0A7D879000FBF588 /* ParserActions.h */,
DE06BECA0A854E4B0050E87E /* Scope.h */,
);
name = Parse;
sourceTree = "<group>";
@ -217,6 +223,7 @@
DE1F257A0A7DD86800FBF588 /* Declarations.cpp */,
DE1F246E0A7DC99000FBF588 /* Parse.cpp */,
DE1F246F0A7DC99000FBF588 /* ParseDeclarations.cpp */,
DE06BEC80A854E390050E87E /* Scope.cpp */,
);
name = Parse;
sourceTree = "<group>";
@ -370,6 +377,7 @@
DE1F24710A7DC99000FBF588 /* Parse.cpp in Sources */,
DE1F24720A7DC99000FBF588 /* ParseDeclarations.cpp in Sources */,
DE1F257B0A7DD86800FBF588 /* Declarations.cpp in Sources */,
DE06BEC90A854E390050E87E /* Scope.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -21,22 +21,24 @@ namespace llvm {
namespace clang {
class ParserActions;
class DeclSpec;
class Scope;
/// Parser - This implements a parser for the C family of languages. After
/// parsing units of the grammar, productions are invoked to handle whatever has
/// been read.
///
class Parser {
// SYMBOL TABLE
Preprocessor &PP;
ParserActions &Actions;
Diagnostic &Diags;
Scope *CurScope;
/// Tok - The current token we are peeking head. All parsing methods assume
/// that this is valid.
LexerToken Tok;
public:
Parser(Preprocessor &PP, ParserActions &Actions);
~Parser();
const LangOptions &getLang() const { return PP.getLangOptions(); }

View File

@ -0,0 +1,51 @@
//===--- Scope.h - Scope interface ------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by Chris Lattner and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the Scope interface.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_PARSE_SCOPE_H
#define LLVM_CLANG_PARSE_SCOPE_H
#include "llvm/ADT/SmallVector.h"
namespace llvm {
namespace clang {
class Decl;
/// Scope - A scope is a transient data structure that is used while parsing the
/// program. It assists with resolving identifiers to the appropriate
/// declaration.
///
class Scope {
/// The parent scope for this scope. This is null for the translation-unit
/// scope.
Scope *Parent;
/// Depth - This is the depth of this scope. The translation-unit scope has
/// depth 0.
unsigned Depth;
/// DeclsInScope - This keeps track of all declarations in this scope. When
/// the declaration is added to the scope, it is set as the current
/// declaration for the identifier in the IdentifierTable. When the scope is
/// popped, these declarations are removed from the IdentifierTable's notion
/// of current declaration.
SmallVector<Decl*, 32> DeclsInScope;
public:
Scope(Scope *parent) : Parent(parent), Depth(Parent ? Parent->Depth+1 : 0) {
}
};
} // end namespace clang
} // end namespace llvm
#endif