aboutsummaryrefslogtreecommitdiff
path: root/src/amberscript/parser.cc
diff options
context:
space:
mode:
authorasuonpaa <34128694+asuonpaa@users.noreply.github.com>2020-04-14 16:06:06 +0300
committerGitHub <noreply@github.com>2020-04-14 09:06:06 -0400
commitaf654dcf8c14f4a296de754c865e10c751c2a91a (patch)
tree217e3aa1ca9ede1b7bc4f9199c4a8dbf11a656ed /src/amberscript/parser.cc
parenta40bef4dba98d2d80b48e5a940d8574fbfceb197 (diff)
downloadamber-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.cc42
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");
}