Open kmr-srbh opened 2 months ago
@kmr-srbh the following works:
% cat examples/expr2.py
name: str = " "
name = input("Your name: ")
print("Hello,", name)
% python examples/expr2.py
Your name: John
Hello, John
% lpython examples/expr2.py
Your name: John
Hello,John
We just needed name
to have initial length/space so that we could write to it the string read from stdin
.
We need to see what other better alternative approaches can be for the workaround (for name
length) in https://github.com/lcompilers/lpython/pull/2655#issuecomment-2059840977.
We need to see what other better alternative approaches can be for the workaround (for
name
length) in #2655 (comment).
You are right @Shaikh-Ubaid. How do we go about working a fix for the return type issue? This is a real problem. I am new to this area of the code-base and learning.
Let's modify the semantics of the FileRead ASR node: if the "value" expr argument is an allocatable string, then the backend (LLVM/WASM, etc.) implementation of the FileRead node will allocate the string to hold the whole input, and assign it to it.
Let's modify the semantics of the FileRead ASR node: if the "value" expr argument is an allocatable string, then the backend (LLVM/WASM, etc.) implementation of the FileRead node will allocate the string to hold the whole input, and assign it to it.
@certik Do you mean handling String_t
here?
@Shaikh-Ubaid , there is a small issue occurring here. Because we are directing calls to
FileRead
,input()
itself is not having a return type and value. So, an expression liken: i32 = i32(int(input("Enter a number: "))))
leads to an exception. A simple program:gives the following output
I request you to see if the implementation is correct. Instead of a separate function
create_Input()
with a call insideif (call_name == "input")
, I am using the complete piece of code here.