[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