--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -1211,18 +1211,16 @@ ASTReader::parseExpression(SimpleTokenRe
SimpleTokenReader::BinFields fields(this->cx);
SimpleTokenReader sub(this->cx);
BinKind kind;
if (!reader->taggedTuple(kind, fields, &sub)) {
return false;
}
- // FIXME: Literals!
- // FIXME: Identifiers!
switch (kind) {
case BinKind::identifier: {
Rooted<PropertyName*> id(this->cx);
for (auto field: fields) {
switch (field) {
case BinField::name:
if (!this->readString(&sub, &id)) {
return false;
@@ -1238,20 +1236,44 @@ ASTReader::parseExpression(SimpleTokenRe
}
UniquePtr<ParseNode> result(new_<NameNode>(PNK_NAME, JSOP_GETNAME, id, TokenPos()));
if (!result) {
return false;
}
out = Move(result);
+ break;
}
- case BinKind::boolean_literal:
- // FIXME: Implement
+ case BinKind::boolean_literal: {
+ Maybe<bool> value;
+ for (auto field: fields) {
+ switch (field) {
+ case BinField::value:
+ if (!this->readBool(&sub, value)) {
+ return false;
+ }
+ break;
+ default:
+ return this->raiseError();
+ }
+ }
+
+ if (!value) {
+ return this->raiseError();
+ }
+
+ UniquePtr<ParseNode> result(new_<BooleanLiteral>(*value, TokenPos()));
+ if (!result) {
+ return false;
+ }
+
+ out = Move(result);
break;
+ }
case BinKind::directive_literal:
// FIXME: Implement
break;
case BinKind::null_literal:
// FIXME: Implement
break;
case BinKind::numeric_literal:
// FIXME: Implement