mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-21 03:50:16 +00:00
...
This commit is contained in:
parent
93ef42e1d0
commit
b5e0ac7121
20
src/expr.h
20
src/expr.h
@ -522,6 +522,18 @@ struct FStringExpr: Expr{
|
||||
return fmt("f", src.escape());
|
||||
}
|
||||
|
||||
void _load_simple_expr(CodeEmitContext* ctx, Str expr){
|
||||
int dot = expr.index(".");
|
||||
if(dot < 0){
|
||||
ctx->emit(OP_LOAD_NAME, StrName(expr.sv()).index, line);
|
||||
}else{
|
||||
StrName name(expr.substr(0, dot).sv());
|
||||
StrName attr(expr.substr(dot+1).sv());
|
||||
ctx->emit(OP_LOAD_NAME, name.index, line);
|
||||
ctx->emit(OP_LOAD_ATTR, attr.index, line);
|
||||
}
|
||||
}
|
||||
|
||||
void emit(CodeEmitContext* ctx) override {
|
||||
VM* vm = ctx->vm;
|
||||
static const std::regex pattern(R"(\{(.*?)\})");
|
||||
@ -539,15 +551,11 @@ struct FStringExpr: Expr{
|
||||
Str expr = m[1].str();
|
||||
int conon = expr.index(":");
|
||||
if(conon >= 0){
|
||||
ctx->emit(
|
||||
OP_LOAD_NAME,
|
||||
StrName(expr.substr(0, conon)).index,
|
||||
line
|
||||
);
|
||||
_load_simple_expr(ctx, expr.substr(0, conon));
|
||||
Str spec = expr.substr(conon+1);
|
||||
ctx->emit(OP_FORMAT_STRING, ctx->add_const(VAR(spec)), line);
|
||||
}else{
|
||||
ctx->emit(OP_LOAD_NAME, StrName(expr).index, line);
|
||||
_load_simple_expr(ctx, expr);
|
||||
}
|
||||
size++;
|
||||
i = (int)(m.position() + m.length());
|
||||
|
@ -48,3 +48,10 @@ assert f'{b:10}' == '123 '
|
||||
assert f'{b:>10}' == ' 123'
|
||||
assert f'{b:1}' == '123'
|
||||
assert f'{b:10s}' == '123 '
|
||||
|
||||
obj = object()
|
||||
obj.b = '123'
|
||||
assert f'{obj.b:10}' == '123 '
|
||||
assert f'{obj.b:>10}' == ' 123'
|
||||
assert f'{obj.b:1}' == '123'
|
||||
assert f'{obj.b:10s}' == '123 '
|
||||
|
Loading…
x
Reference in New Issue
Block a user