Skip to content

Commit 6b8bc1a

Browse files
committed
Merged
2 parents 3dfbacc + 45b1359 commit 6b8bc1a

File tree

8 files changed

+20
-263
lines changed

8 files changed

+20
-263
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@
99
*.dump
1010
*x86
1111
*temp.cpp
12+
*.obj
13+
*.s

milestone4/src/38.s

Whitespace-only changes.

milestone4/src/code.obj

-1.86 KB
Binary file not shown.

milestone4/src/codegen.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def loadVar(reg,var):
9191
if "|" in type_ or type_ in ["int", "float"]:
9292
code.append("mov (%"+r+"), %" + reg )
9393
elif type_ == "char":
94-
code.append("movb (%"+r+"), %" + reg )
94+
code.append("movb (%"+r+"), %" + reg[1] + "l" )
9595
else:
9696
print( " class error in load")
9797
exit()
@@ -102,7 +102,7 @@ def loadVar(reg,var):
102102
code.append("mov (%ebp , %"+ r + ", 1), %" + reg )
103103
elif type_ == "char":
104104
code.append("neg %"+r)
105-
code.append("movb (%ebp , %"+r + ", 1), %" + reg )
105+
code.append("movb (%ebp , %"+r + ", 1), %" + reg[1] + "l" )
106106
else:
107107
print( " class error in load")
108108
exit()
@@ -118,7 +118,7 @@ def loadVar(reg,var):
118118
if "|" in type_ or type_ in ["int", "float"]:
119119
code.append("mov " + str(-offset) + "(%ebp), %" + reg )
120120
elif type_ == "char":
121-
code.append("movb " + str(-offset) + "(%ebp), %" + reg )
121+
code.append("movb " + str(-offset) + "(%ebp), %" + reg[1] + "l" )
122122
else:
123123
print( " class error in load")
124124
exit()
@@ -128,7 +128,7 @@ def loadVar(reg,var):
128128
else:
129129
if var[0]=="'" and var[2]=="'" and len(var)==3:
130130
# this is char
131-
code.append("movb $"+str(ord( var[1]))+" , %" + reg )
131+
code.append("movb $"+str(ord( var[1]))+" , %" + reg[1] + "l" )
132132
elif var.isdigit():
133133
code.append("mov $"+var+" , %" + reg )
134134
else:
@@ -152,7 +152,7 @@ def storeVar(reg,var):
152152
if "|" in type_ or type_ in ["int", "float"]:
153153
code.append("mov %" + reg + ", (%"+r+")" )
154154
elif type_ == "char":
155-
code.append("movb %" + reg + ", (%"+r+")" )
155+
code.append("movb %" + reg[1] + "l" + ", (%"+r+")" )
156156
else:
157157
print( " class error in store")
158158
exit()
@@ -163,7 +163,7 @@ def storeVar(reg,var):
163163
code.append("mov %" + reg + ", (%ebp , %"+r + ", 1)" )
164164
elif type_ == "char":
165165
code.append("neg %"+r)
166-
code.append("movb %" + reg + ", (%ebp , %"+r + ", 1)" )
166+
code.append("movb %" + reg[1] + "l" + ", (%ebp , %"+r + ", 1)" )
167167
else:
168168
print( " class error in store")
169169
exit()
@@ -179,7 +179,7 @@ def storeVar(reg,var):
179179
if "|" in type_ or type_ in ["int", "float"]:
180180
code.append("mov %" + reg + " , " + str(-offset) + "(%ebp)" )
181181
elif type_ == "char":
182-
code.append("movb %" + reg + " , " + str(-offset) + "(%ebp)" )
182+
code.append("movb %" + reg[1] + "l" + " , " + str(-offset) + "(%ebp)" )
183183
else:
184184
print( " class error in store")
185185
exit()
@@ -428,7 +428,7 @@ def op_assign(self,instr):
428428
info = checkVar(out, "all")["var"] if out.split('@')[0]=="tmp" else checkVar(out.split('@')[0], int(out.split('@')[1]))
429429
type_ = info["type"]
430430
if type_ == "char":
431-
code.append("movb $" + str(ord(inp[1])) + ",%eax")
431+
code.append("mov $" + str(ord(inp[1])) + ",%eax")
432432
storeVar("eax", out)
433433
else:
434434
code.append("mov $" + inp + ", %eax")

milestone4/src/int.s

-40
This file was deleted.

milestone4/src/m.s

-214
This file was deleted.

milestone4/src/parser.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,7 @@ def p_postfix_expression_2(p):
800800
p[0] = OBJ()
801801
p[0].parse=f(p)
802802

803+
803804
if( p[3].data["type"] != "int" ):
804805
report_error("Array index is not integer", p.lineno(3))
805806
type_last_char = p[1].data["type"][-1]
@@ -903,7 +904,7 @@ def p_postfix_expression_3(p):
903904
code.append( quad("PushParam",[p[1].data["class_obj"],"",""],"PushParam " + p[1].data["class_obj"]) )
904905

905906
p[0].place = getnewvar(p[0].data["type"])
906-
p[0].code = p[1].code + expr_code + code + [ quad("Fcall",[p[0].place,(class_name + "_" if class_name != "" else "") + func_detail["label"],""],p[0].place + " = " + "Fcall " + (class_name + ":" if class_name != "" else "") + expected_sig) ]
907+
p[0].code = p[1].code + expr_code + code + [ quad("Fcall",[p[0].place,func_detail["label"],""],p[0].place + " = " + "Fcall " + (class_name + ":" if class_name != "" else "") + expected_sig) ]
907908
pop_params_code = [ quad("removeParams", [ str(func_detail["parameter_space"]),"", ""], "RemoveParams " + str(func_detail["parameter_space"]) ) ]
908909
p[0].code = p[0].code + pop_params_code
909910

@@ -955,12 +956,17 @@ def p_postfix_expression_6(p):
955956
name_offset = getnewvar("int|p")
956957
p[0].place = getnewvar( name_type , name_offset, name_size , "rbp" )
957958
p[0].code = p[1].code + [quad("-" , [name_offset, class_instance_offset, name_offset_to_sub]) ]
959+
p[0].data["offset"] = name_offset
960+
p[0].data["base"] = "rbp"
961+
958962
else:
959963
# base is 0
960964
name_offset_to_add = class_instance_size - name_offset_relative_to_class
961965
name_offset = getnewvar("int|p")
962966
p[0].place = getnewvar(name_type, name_offset , name_size, "0")
963967
p[0].code = p[1].code + [quad("+" , [name_offset, class_instance_offset, name_offset_to_add]) ]
968+
p[0].data["offset"] = name_offset
969+
p[0].data["base"] = "0"
964970

965971
else:
966972
report_error(p[3].data+" not in class "+p[1].data["type"], p.lineno(1))
@@ -1004,12 +1010,15 @@ def p_postfix_expression_7(p):
10041010
name_offset = getnewvar("int|p")
10051011
p[0].place = getnewvar(name_type, name_offset , name_size, "0")
10061012
p[0].code = p[1].code + [quad("+" , [name_offset, p[1].place , name_offset_to_add]) ]
1013+
p[0].data["offset"] = name_offset
1014+
p[0].data["base"] = "0"
10071015

10081016
else:
10091017
report_error(p[3].data+" not in class "+p[1].data["type"][:-2], p.lineno(1))
10101018
else:
10111019
report_error(p[1].data["type"][:-2] +" is not a class",p.lineno(0))
10121020

1021+
10131022
def p_postfix_expression_8(p):
10141023
'''postfix_expression : postfix_expression DPLUSOP
10151024
| postfix_expression DMINUSOP

milestone4/src/sym_table.obj

-2.01 KB
Binary file not shown.

0 commit comments

Comments
 (0)