package me.august.lumen.compile.parser.ast.expr; import me.august.lumen.common.BytecodeUtil; import me.august.lumen.compile.codegen.BuildContext; import me.august.lumen.compile.scanner.tokens.StringToken; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Type; public class StringExpr extends TerminalExpression { private String string; private StringToken.QuoteType quoteType; public StringExpr(String string, StringToken.QuoteType quoteType) { this.string = string; this.quoteType = quoteType; } @Override public String toString() { return "StringExpr{" + "string='" + string + '\'' + ", quoteType=" + quoteType.name() + '}'; } @Override public boolean isConstant() { return true; } public boolean canBeChar() { return string.length() == 1 && quoteType.equals(StringToken.QuoteType.SINGLE); } @Override public void generate(MethodVisitor visitor, BuildContext context) { // load `string` constant visitor.visitLdcInsn(string); } @Override public Type expressionType() { return BytecodeUtil.STRING_TYPE; } }