Skip to content

Commit b47d330

Browse files
committed
Issue #27: continue to finish skeleton
1 parent f7edb0e commit b47d330

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

tools/evm-test/evm_test.py

+36-10
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
PUSH1 0x20
3636
PUSH1 0x00
3737
RETURN
38-
Function:\n
38+
Function:
3939
"""
4040

4141
template_2_1 = """
@@ -52,7 +52,7 @@
5252
PUSH1 0x20
5353
PUSH1 0x00
5454
RETURN
55-
Function:\n
55+
Function:
5656
"""
5757

5858
def generate_header_str(inputs: List[int]) -> str:
@@ -76,6 +76,9 @@ def generate_function_binary(filename: str, offset: int) -> str:
7676
def generate_contract(inputs: List[int], func: str) -> str:
7777
assert len(inputs) < 3
7878
complete_str = generate_header_str(inputs) + func
79+
f=open("./generated_contract.s", "w")
80+
f.write(complete_str)
81+
f.close()
7982
return asm.assemble_hex(complete_str)
8083

8184
def execute_in_evm(code: str, expected: str) -> str:
@@ -91,13 +94,28 @@ def execute_in_evm(code: str, expected: str) -> str:
9194
result.check_returncode()
9295
return result.stdout
9396

97+
def should_remove(input: str) -> bool:
98+
sline = input.strip()
99+
if sline.startswith("."):
100+
return True
101+
elif sline.startswith("#"):
102+
return True
103+
return False
104+
105+
def process_line(input: str) -> str:
106+
index = input.find("#")
107+
if index is -1:
108+
return input
109+
return input[:index]
110+
94111
def remove_directives_in_assembly(input: str) -> str:
112+
print("EVM TEST: removing directives")
95113
cleaned_input = []
96-
for line in str.split("\n"):
114+
for line in input.split("\n"):
97115
# ignore directives
98-
if not line.trim().startswith("\."):
99-
cleaned_input.append(line)
100-
return "".join(cleaned_input)
116+
if not should_remove(line):
117+
cleaned_input.append(process_line(line))
118+
return "\n".join(cleaned_input)
101119

102120
def generate_asm_file(infilename: str, outfilename: str) -> str:
103121
defined_llc = False
@@ -115,13 +133,21 @@ def generate_asm_file(infilename: str, outfilename: str) -> str:
115133
llc_exec = "llc"
116134

117135
command = [llc_exec, "-mtriple=evm", "-filetype=asm", infilename, "-o", outfilename]
136+
print("EVM TEST: executing command:")
137+
print(' '.join(command))
138+
118139
result = subprocess.run(command, stdout=subprocess.PIPE)
119140
result.check_returncode()
120141
return
121142

122-
#contract = generate_contract(
123-
# inputs=["0x12345678", "0x87654321"], func="JUMPDEST\nADD\nSWAP1\nJUMP")
124-
#result = execute_in_evm(contract, "")
125-
#print(result)
143+
126144

127145
generate_asm_file("./test.ll", "./test.s")
146+
f=open("./test.s", "r")
147+
content = f.read()
148+
f.close()
149+
cleaned_content = remove_directives_in_assembly(content)
150+
151+
contract = generate_contract(
152+
inputs=["0x12345678", "0x87654321"], func=cleaned_content)
153+
result = execute_in_evm(contract, "")

0 commit comments

Comments
 (0)