Completing the generics early prototype (6th week)

luthfan
Published: 07/23/2022

What I did this week

I completed an early prototype of generic function support in LPython. Given the following simple generic function and its function calls:

T = TypeVar('T')

def f(x: T, y: T) -> T:
  return x + y

f(1,2)
f('a','b')

The compiler can correspondingly instantiate two functions each for the integer call f(1,2) and character call f('a','b'). The function body is properly generated for the instantiated functions.

Further, the program can also be compiled into LLVM. This is done simply by ignoring the type parameter declaration T = TypeVar('T') as well as the functions involving type parameters.

For reference, all my progress is still kept as an open pull request. This will be merged once we finalize the overall design of generic functions.

What is coming up next week

1. Making decisions on the design for generic functions.
2. Making other examples and adding support for other statements and expressions for generic functions.

Did I get stuck anywhere

While rebuilding the body of the instantiated functions from the generic function, I met more problems with the ASR (LPython's intermediate representation) verification. One particular issue was that it was impossible to understand the problem simply by looking at the structure of the generated ASR. I solved this issue by looking at the other existing visitor classes that also build function bodies and try to mimic their process.

DJDT

Versions

Time

Settings from gsoc.settings

Headers

Request

SQL queries from 1 connection

Static files (2312 found, 3 used)

Templates (11 rendered)

Cache calls from 1 backend

Signals

Log messages