parent
bb094f0669
commit
a2b0334e93
|
@ -105,8 +105,9 @@ void Parser::error(const Token &tok, Twine msg) {
|
|||
|
||||
llvm::Optional<Directive *> Parser::parse() {
|
||||
consumeToken();
|
||||
switch (_tok._kind) {
|
||||
case Kind::kw_exports: {
|
||||
// EXPORTS
|
||||
if (_tok._kind == Kind::kw_exports) {
|
||||
std::vector<PECOFFLinkingContext::ExportDesc> exports;
|
||||
for (;;) {
|
||||
PECOFFLinkingContext::ExportDesc desc;
|
||||
|
@ -116,38 +117,40 @@ llvm::Optional<Directive *> Parser::parse() {
|
|||
}
|
||||
return new (_alloc) Exports(exports);
|
||||
}
|
||||
case Kind::kw_heapsize: {
|
||||
// HEAPSIZE
|
||||
if (_tok._kind == Kind::kw_heapsize) {
|
||||
uint64_t reserve, commit;
|
||||
if (!parseMemorySize(reserve, commit))
|
||||
return llvm::None;
|
||||
return new (_alloc) Heapsize(reserve, commit);
|
||||
}
|
||||
case Kind::kw_stacksize: {
|
||||
// STACKSIZE
|
||||
if (_tok._kind == Kind::kw_stacksize) {
|
||||
uint64_t reserve, commit;
|
||||
if (!parseMemorySize(reserve, commit))
|
||||
return llvm::None;
|
||||
return new (_alloc) Stacksize(reserve, commit);
|
||||
}
|
||||
case Kind::kw_name: {
|
||||
// NAME
|
||||
if (_tok._kind == Kind::kw_name) {
|
||||
std::string outputPath;
|
||||
uint64_t baseaddr;
|
||||
if (!parseName(outputPath, baseaddr))
|
||||
return llvm::None;
|
||||
return new (_alloc) Name(outputPath, baseaddr);
|
||||
}
|
||||
case Kind::kw_version: {
|
||||
// VERSION
|
||||
if (_tok._kind == Kind::kw_version) {
|
||||
int major, minor;
|
||||
if (!parseVersion(major, minor))
|
||||
return llvm::None;
|
||||
return new (_alloc) Version(major, minor);
|
||||
}
|
||||
default:
|
||||
error(_tok, Twine("Unknown directive: ") + _tok._range);
|
||||
return llvm::None;
|
||||
}
|
||||
}
|
||||
|
||||
bool Parser::parseExport(PECOFFLinkingContext::ExportDesc &result) {
|
||||
consumeToken();
|
||||
|
|
Loading…
Reference in New Issue