[llvm-commits] CVS: llvm/lib/AsmParser/Lexer.l ParserInternals.h llvmAsmParser.y
Chris Lattner
lattner at cs.uiuc.edu
Wed Apr 16 15:30:02 PDT 2003
Changes in directory llvm/lib/AsmParser:
Lexer.l updated: 1.29 -> 1.30
ParserInternals.h updated: 1.28 -> 1.29
llvmAsmParser.y updated: 1.104 -> 1.105
---
Log message:
Add new linkage types to support a real frontend
---
Diffs of the changes:
Index: llvm/lib/AsmParser/Lexer.l
diff -u llvm/lib/AsmParser/Lexer.l:1.29 llvm/lib/AsmParser/Lexer.l:1.30
--- llvm/lib/AsmParser/Lexer.l:1.29 Sun Oct 6 17:45:08 2002
+++ llvm/lib/AsmParser/Lexer.l Wed Apr 16 15:28:31 2003
@@ -155,6 +155,8 @@
constant { return CONSTANT; }
const { return CONST; }
internal { return INTERNAL; }
+linkonce { return LINKONCE; }
+appending { return APPENDING; }
uninitialized { return EXTERNAL; } /* Deprecated, turn into external */
external { return EXTERNAL; }
implementation { return IMPLEMENTATION; }
Index: llvm/lib/AsmParser/ParserInternals.h
diff -u llvm/lib/AsmParser/ParserInternals.h:1.28 llvm/lib/AsmParser/ParserInternals.h:1.29
--- llvm/lib/AsmParser/ParserInternals.h:1.28 Fri Sep 13 17:25:00 2002
+++ llvm/lib/AsmParser/ParserInternals.h Wed Apr 16 15:28:31 2003
@@ -177,7 +177,7 @@
struct MethPlaceHolderHelper : public Function {
MethPlaceHolderHelper(const Type *Ty)
- : Function(cast<FunctionType>(Ty), true) {}
+ : Function(cast<FunctionType>(Ty), InternalLinkage) {}
};
typedef PlaceholderValue<InstPlaceHolderHelper> ValuePlaceHolder;
Index: llvm/lib/AsmParser/llvmAsmParser.y
diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.104 llvm/lib/AsmParser/llvmAsmParser.y:1.105
--- llvm/lib/AsmParser/llvmAsmParser.y:1.104 Wed Apr 16 13:13:57 2003
+++ llvm/lib/AsmParser/llvmAsmParser.y Wed Apr 16 15:28:31 2003
@@ -522,8 +522,7 @@
EGV->setInitializer(GV->getInitializer());
if (GV->isConstant())
EGV->setConstant(true);
- if (GV->hasInternalLinkage())
- EGV->setInternalLinkage(true);
+ EGV->setLinkage(GV->getLinkage());
delete GV; // Destroy the duplicate!
return true; // They are equivalent!
@@ -624,6 +623,7 @@
std::vector<std::pair<Constant*, BasicBlock*> > *JumpTable;
std::vector<Constant*> *ConstVector;
+ GlobalValue::LinkageTypes Linkage;
int64_t SInt64Val;
uint64_t UInt64Val;
int SIntVal;
@@ -654,7 +654,8 @@
%type <ValueList> IndexList // For GEP derived indices
%type <TypeList> TypeListI ArgTypeListI
%type <JumpTable> JumpTable
-%type <BoolVal> GlobalType OptInternal // GLOBAL or CONSTANT? Intern?
+%type <BoolVal> GlobalType // GLOBAL or CONSTANT?
+%type <Linkage> OptLinkage
// ValueRef - Unresolved reference to a definition or BB
%type <ValIDVal> ValueRef ConstValueRef SymbolicValueRef
@@ -684,7 +685,8 @@
%token IMPLEMENTATION TRUE FALSE BEGINTOK ENDTOK DECLARE GLOBAL CONSTANT
-%token TO EXCEPT DOTDOTDOT NULL_TOK CONST INTERNAL OPAQUE NOT EXTERNAL
+%token TO EXCEPT DOTDOTDOT NULL_TOK CONST INTERNAL LINKONCE APPENDING
+%token OPAQUE NOT EXTERNAL
// Basic Block Terminating Operators
%token <TermOpVal> RET BR SWITCH
@@ -748,7 +750,10 @@
$$ = 0;
};
-OptInternal : INTERNAL { $$ = true; } | /*empty*/ { $$ = false; };
+OptLinkage : INTERNAL { $$ = GlobalValue::InternalLinkage; } |
+ LINKONCE { $$ = GlobalValue::LinkOnceLinkage; } |
+ APPENDING { $$ = GlobalValue::AppendingLinkage; } |
+ /*empty*/ { $$ = GlobalValue::ExternalLinkage; };
//===----------------------------------------------------------------------===//
// Types includes all predefined types... except void, because it can only be
@@ -982,7 +987,8 @@
// Create a placeholder for the global variable reference...
GlobalVariable *GV = new GlobalVariable(PT->getElementType(),
- false, true);
+ false,
+ GlobalValue::ExternalLinkage);
// Keep track of the fact that we have a forward ref to recycle it
CurModule.GlobalRefs.insert(make_pair(make_pair(PT, $2), GV));
@@ -1136,7 +1142,7 @@
}
| ConstPool FunctionProto { // Function prototypes can be in const pool
}
- | ConstPool OptAssign OptInternal GlobalType ConstVal {
+ | ConstPool OptAssign OptLinkage GlobalType ConstVal {
const Type *Ty = $5->getType();
// Global declarations appear in Constant Pool
Constant *Initializer = $5;
@@ -1159,7 +1165,7 @@
| ConstPool OptAssign EXTERNAL GlobalType Types {
const Type *Ty = *$5;
// Global declarations appear in Constant Pool
- GlobalVariable *GV = new GlobalVariable(Ty, $4, false);
+ GlobalVariable *GV = new GlobalVariable(Ty,$4,GlobalValue::ExternalLinkage);
if (!setValueName(GV, $2)) { // If not redefining...
CurModule.CurrentModule->getGlobalList().push_back(GV);
int Slot = InsertValue(GV, CurModule.Values);
@@ -1255,7 +1261,7 @@
AI->setName("");
} else { // Not already defined?
- Fn = new Function(FT, false, FunctionName);
+ Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName);
InsertValue(Fn, CurModule.Values);
CurModule.DeclareNewGlobalValue(Fn, ValID::create($2));
}
@@ -1288,13 +1294,12 @@
BEGIN : BEGINTOK | '{'; // Allow BEGIN or '{' to start a function
-FunctionHeader : OptInternal FunctionHeaderH BEGIN {
+FunctionHeader : OptLinkage FunctionHeaderH BEGIN {
$$ = CurMeth.CurrentFunction;
- // Make sure that we keep track of the internal marker, even if there was
- // a previous "declare".
- if ($1)
- $$->setInternalLinkage(true);
+ // Make sure that we keep track of the linkage type even if there was a
+ // previous "declare".
+ $$->setLinkage($1);
// Resolve circular types before we parse the body of the function.
ResolveTypes(CurMeth.LateResolveTypes);
More information about the llvm-commits
mailing list