1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

The "implementation" is now allowed but not required by the parser. All type

definitions must still occur before function bodies, but the wierd keyword is
no longer neccesary.

llvm-svn: 2433
This commit is contained in:
Chris Lattner 2002-05-02 19:11:13 +00:00
parent 6212dd5c08
commit 7af6cac869

View File

@ -998,6 +998,38 @@ ConstVector : ConstVector ',' ConstVal {
GlobalType : GLOBAL { $$ = false; } | CONSTANT { $$ = true; }
//===----------------------------------------------------------------------===//
// Rules to match Modules
//===----------------------------------------------------------------------===//
// Module rule: Capture the result of parsing the whole file into a result
// variable...
//
Module : FunctionList {
$$ = ParserResult = $1;
CurModule.ModuleDone();
}
// FunctionList - A list of methods, preceeded by a constant pool.
//
FunctionList : FunctionList Function {
$$ = $1;
assert($2->getParent() == 0 && "Function already in module!");
$1->getFunctionList().push_back($2);
CurMeth.FunctionDone();
}
| FunctionList FunctionProto {
$$ = $1;
}
| FunctionList IMPLEMENTATION {
$$ = $1;
}
| ConstPool {
$$ = CurModule.CurrentModule;
// Resolve circular types before we parse the body of the module
ResolveTypes(CurModule.LateResolveTypes);
}
// ConstPool - Constants with optional names assigned to them.
ConstPool : ConstPool OptAssign CONST ConstVal {
if (setValueName($4, $2)) { assert(0 && "No redefinitions allowed!"); }
@ -1070,36 +1102,6 @@ ConstPool : ConstPool OptAssign CONST ConstVal {
}
//===----------------------------------------------------------------------===//
// Rules to match Modules
//===----------------------------------------------------------------------===//
// Module rule: Capture the result of parsing the whole file into a result
// variable...
//
Module : FunctionList {
$$ = ParserResult = $1;
CurModule.ModuleDone();
}
// FunctionList - A list of methods, preceeded by a constant pool.
//
FunctionList : FunctionList Function {
$$ = $1;
assert($2->getParent() == 0 && "Function already in module!");
$1->getFunctionList().push_back($2);
CurMeth.FunctionDone();
}
| FunctionList FunctionProto {
$$ = $1;
}
| ConstPool IMPLEMENTATION {
$$ = CurModule.CurrentModule;
// Resolve circular types before we parse the body of the module
ResolveTypes(CurModule.LateResolveTypes);
}
//===----------------------------------------------------------------------===//
// Rules to match Function Headers
//===----------------------------------------------------------------------===//