Search in sources :

Example 1 with StringInterpolationExpr

use of dyvilx.tools.compiler.ast.expression.StringInterpolationExpr in project Dyvil by Dyvil.

the class ProcessedText method resolve.

@Override
public IValue resolve(MarkerList markers, IContext context) {
    final int startLine = this.position.startLine();
    final int startColumn = this.position.startColumn();
    final StringInterpolationExpr parts = new StringInterpolationExpr();
    final String text = this.text;
    final int length = text.length();
    int prev = 0;
    for (int startIndex = 0; startIndex < length; ) {
        final int c = text.codePointAt(startIndex);
        // advance to an identifier character
        if (!Character.isJavaIdentifierStart(c)) {
            startIndex += Character.charCount(c);
            continue;
        }
        final int endIndex = identifierEnd(text, startIndex + 1, length);
        final String key = text.substring(startIndex, endIndex);
        final IDataMember field = context.resolveField(Name.fromRaw(key));
        if (field != null && (field.isLocal() || field.hasModifier(Modifiers.PUBLIC))) {
            // append contents before this identifier
            parts.append(new StringValue(text.substring(prev, startIndex)));
            final SourcePosition position = SourcePosition.apply(startLine, startColumn + startIndex, startColumn + endIndex);
            parts.append(new FieldAccess(position, null, field));
            // advance to the end of the identifier
            prev = endIndex;
            startIndex = endIndex;
            continue;
        }
        startIndex += Character.charCount(c);
    }
    if (prev != length) {
        parts.append(new StringValue(text.substring(prev, length)));
    }
    return new WriteCall(parts.resolve(markers, context));
}
Also used : SourcePosition(dyvil.source.position.SourcePosition) StringInterpolationExpr(dyvilx.tools.compiler.ast.expression.StringInterpolationExpr) StringValue(dyvilx.tools.compiler.ast.expression.constant.StringValue) FieldAccess(dyvilx.tools.compiler.ast.expression.access.FieldAccess) IDataMember(dyvilx.tools.compiler.ast.field.IDataMember)

Aggregations

SourcePosition (dyvil.source.position.SourcePosition)1 StringInterpolationExpr (dyvilx.tools.compiler.ast.expression.StringInterpolationExpr)1 FieldAccess (dyvilx.tools.compiler.ast.expression.access.FieldAccess)1 StringValue (dyvilx.tools.compiler.ast.expression.constant.StringValue)1 IDataMember (dyvilx.tools.compiler.ast.field.IDataMember)1