import sys
from slither import Slither

if len(sys.argv) != 2:
    print("python slithIR.py contract.sol")
    sys.exit(-1)

# Init slither
slither = Slither(sys.argv[1])

# Iterate over all the contracts
for contract in slither.contracts:
    # Iterate over all the functions
    for function in contract.functions:
        # Dont explore inherited functions
        if function.contract_declarer == contract:
            print(f"Function: {function.name}")

            # Iterate over the nodes of the function
            for node in function.nodes:
                # Print the Solidity expression of the nodes
                # And the SlithIR operations
                if node.expression:
                    print(f"\tSolidity expression: {node.expression}")
                    print("\tSlithIR:")
                    for ir in node.irs:
                        print(f"\t\t\t{ir}")
