diff options
Diffstat (limited to 'src/parser/contexts.h')
-rw-r--r-- | src/parser/contexts.h | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/parser/contexts.h b/src/parser/contexts.h index 6505d11a4..4c15c0308 100644 --- a/src/parser/contexts.h +++ b/src/parser/contexts.h @@ -2448,9 +2448,21 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> { StringNewOp op, bool try_, Name* mem) { - auto m = getMemory(pos, mem); - CHECK_ERR(m); - return withLoc(pos, irBuilder.makeStringNew(op, try_, *m)); + Name memName; + switch (op) { + case StringNewUTF8: + case StringNewWTF8: + case StringNewLossyUTF8: + case StringNewWTF16: { + auto m = getMemory(pos, mem); + CHECK_ERR(m); + memName = *m; + break; + } + default: + break; + } + return withLoc(pos, irBuilder.makeStringNew(op, try_, memName)); } Result<> makeStringConst(Index pos, @@ -2469,9 +2481,21 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> { const std::vector<Annotation>& annotations, StringEncodeOp op, Name* mem) { - auto m = getMemory(pos, mem); - CHECK_ERR(m); - return withLoc(pos, irBuilder.makeStringEncode(op, *m)); + Name memName; + switch (op) { + case StringEncodeUTF8: + case StringEncodeLossyUTF8: + case StringEncodeWTF8: + case StringEncodeWTF16: { + auto m = getMemory(pos, mem); + CHECK_ERR(m); + memName = *m; + break; + } + default: + break; + } + return withLoc(pos, irBuilder.makeStringEncode(op, memName)); } Result<> makeStringConcat(Index pos, |