lcompilers / lpython

Python compiler
https://lpython.org/
Other
1.37k stars 156 forks source link

Improvement: Support string repeat with a non-constant integer #2652

Closed kmr-srbh closed 2 months ago

kmr-srbh commented 2 months ago
from lpython import i32

my_string: str = "#"
n: i32 = 5

print(my_string * n)
(base) saurabh-kumar@Awadh:~/Projects/System/lpython$ ./src/bin/lpython ./examples/example.py
Internal Compiler Error: Unhandled exception
Traceback (most recent call last):
.
.
.
  File "/home/saurabh-kumar/Projects/System/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 3462, in LCompilers::LPython::CommonVisitor<LCompilers::LPython::BodyVisitor>::visit_BinOp(LCompilers::LPython::AST::BinOp_t const&)
    make_BinOp_helper(left, right, op, x.base.base.loc);
  File "/home/saurabh-kumar/Projects/System/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 2055, in LCompilers::LPython::CommonVisitor<LCompilers::LPython::BodyVisitor>::make_BinOp_helper(LCompilers::ASR::expr_t*, LCompilers::ASR::expr_t*, LCompilers::ASR::binopType, LCompilers::Location const&)
    right_int = ASR::down_cast<ASR::IntegerConstant_t>(
AssertFailed: f != nullptr
Shaikh-Ubaid commented 2 months ago

After supporting this feature, also refactor https://github.com/lcompilers/lpython/pull/2651/files#r1573132771 to simply use * operator instead of the for loops.