diff options
author | asuonpaa <34128694+asuonpaa@users.noreply.github.com> | 2020-04-14 16:06:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-14 09:06:06 -0400 |
commit | af654dcf8c14f4a296de754c865e10c751c2a91a (patch) | |
tree | 217e3aa1ca9ede1b7bc4f9199c4a8dbf11a656ed /src/amberscript/parser.cc | |
parent | a40bef4dba98d2d80b48e5a940d8574fbfceb197 (diff) | |
download | amber-af654dcf8c14f4a296de754c865e10c751c2a91a.tar.gz |
Added implementation for loading buffer data from a binary file. (#838)
* Added implementation for loading buffer data from a binary file.
* Use PNG, BINARY, and TEXT to select the type of file to load buffer data from.
Diffstat (limited to 'src/amberscript/parser.cc')
-rw-r--r-- | src/amberscript/parser.cc | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/amberscript/parser.cc b/src/amberscript/parser.cc index 10162b8..bc18271 100644 --- a/src/amberscript/parser.cc +++ b/src/amberscript/parser.cc @@ -1265,7 +1265,22 @@ Result Parser::ParseBuffer() { if (!token->IsIdentifier()) return Result("invalid value for FILE"); - buffer->SetDataFile(token->AsString()); + BufferDataFileType file_type = BufferDataFileType::kPng; + + if (token->AsString() == "TEXT") { + file_type = BufferDataFileType::kText; + token = tokenizer_->NextToken(); + } else if (token->AsString() == "BINARY") { + file_type = BufferDataFileType::kBinary; + token = tokenizer_->NextToken(); + } else if (token->AsString() == "PNG") { + token = tokenizer_->NextToken(); + } + + if (!token->IsIdentifier()) + return Result("missing file name for FILE"); + + buffer->SetDataFile(token->AsString(), file_type); } else { break; } @@ -1516,6 +1531,31 @@ Result Parser::ParseBufferInitializerSize(Buffer* buffer) { return ParseBufferInitializerFill(buffer, size_in_items); if (token->AsString() == "SERIES_FROM") return ParseBufferInitializerSeries(buffer, size_in_items); + if (token->AsString() == "FILE") { + token = tokenizer_->NextToken(); + + if (!token->IsIdentifier()) + return Result("invalid value for FILE"); + + BufferDataFileType file_type = BufferDataFileType::kPng; + + if (token->AsString() == "TEXT") { + file_type = BufferDataFileType::kText; + token = tokenizer_->NextToken(); + } else if (token->AsString() == "BINARY") { + file_type = BufferDataFileType::kBinary; + token = tokenizer_->NextToken(); + } else if (token->AsString() == "PNG") { + token = tokenizer_->NextToken(); + } + + if (!token->IsIdentifier()) + return Result("missing file name for FILE"); + + buffer->SetDataFile(token->AsString(), file_type); + + return {}; + } return Result("invalid BUFFER initializer provided"); } |