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