[wasm] Document what StringLiteral is

This commit is contained in:
Alex Beregszaszi 2020-11-20 21:16:56 +00:00
parent 3a3303f24e
commit f76ac0a753
3 changed files with 6 additions and 2 deletions

View File

@ -345,8 +345,9 @@ bytes BinaryTransform::operator()(Literal const& _literal)
bytes BinaryTransform::operator()(StringLiteral const&) bytes BinaryTransform::operator()(StringLiteral const&)
{ {
// TODO is this used? // StringLiteral is a special AST element used for certain builtins.
yulAssert(false, "String literals not yet implemented"); // It is not mapped to actual WebAssembly, and should be processed in visit(BuiltinCall).
yulAssert(false, "");
} }
bytes BinaryTransform::operator()(LocalVariable const& _variable) bytes BinaryTransform::operator()(LocalVariable const& _variable)

View File

@ -101,6 +101,8 @@ string TextTransform::operator()(wasm::Literal const& _literal)
string TextTransform::operator()(wasm::StringLiteral const& _literal) string TextTransform::operator()(wasm::StringLiteral const& _literal)
{ {
// StringLiteral is a special AST element used for certain builtins.
// The output of this will not be valid WebAssembly.
string quoted = boost::replace_all_copy(_literal.value, "\\", "\\\\"); string quoted = boost::replace_all_copy(_literal.value, "\\", "\\\\");
boost::replace_all(quoted, "\"", "\\\""); boost::replace_all(quoted, "\"", "\\\"");
return "\"" + quoted + "\""; return "\"" + quoted + "\"";

View File

@ -63,6 +63,7 @@ using Expression = std::variant<
>; >;
struct Literal { std::variant<uint32_t, uint64_t> value; }; struct Literal { std::variant<uint32_t, uint64_t> value; };
// This is a special AST element used for certain builtins. It is not mapped to actual WebAssembly.
struct StringLiteral { std::string value; }; struct StringLiteral { std::string value; };
struct LocalVariable { std::string name; }; struct LocalVariable { std::string name; };
struct GlobalVariable { std::string name; }; struct GlobalVariable { std::string name; };