Skip to content

Commit d329869

Browse files
committed
Avoid generating getSelf/setSelf instructions for class with locking.
1 parent 625270b commit d329869

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

lib/compiler/CodeGen.oz

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -861,8 +861,7 @@ define
861861
StateReg = none
862862
end
863863
case @toCopy of unit then
864-
FormalRegs AllRegs AllRegs2 BodyVInter BodyVInstr GRegs Code VInter
865-
Cont1 Cont2
864+
FormalRegs AllRegs AllRegs2 BodyVInter GRegs Code Cont1 Cont2
866865
in
867866
{CS startDefinition()}
868867
FormalRegs = {Map @formalArgs
@@ -876,21 +875,16 @@ define
876875
elseof Vs then {GetRegs Vs}
877876
end
878877
case StateReg of none then
879-
BodyVInstr = BodyVInter
880-
VHd0 = VInter
881878
AllRegs2 = AllRegs
882879
else
883-
BodyVInstr = vSetSelf(_ StateReg BodyVInter)
884-
VHd0 = vGetSelf(_ StateReg VInter)
885880
AllRegs2 = StateReg|AllRegs
886881
end
887-
{CS endDefinition(BodyVInstr FormalRegs AllRegs2 ?GRegs ?Code
882+
{CS endDefinition(BodyVInter FormalRegs AllRegs2 ?GRegs ?Code
888883
?OuterNLiveRegs)}
889-
VInter = vDefinition(_ {V reg($)} PredId @procedureRef
890-
GRegs Code VTl0)
884+
VHd0 = vDefinition(_ {V reg($)} PredId @procedureRef
885+
GRegs Code VTl0)
891886
else
892-
VInter FormalRegs AllRegs
893-
InnerBodyVInter InnerBodyVInstr InnerGRegs InnerCode
887+
FormalRegs AllRegs InnerBodyVInter InnerGRegs InnerCode
894888
InnerDefinitionReg InnerPredId InnerNLiveRegs
895889
OuterBodyVInstr OuterBodyVInter2 OuterGRegs OuterCode
896890
in
@@ -905,14 +899,7 @@ define
905899
AllRegs = case @allVariables of nil then nil
906900
elseof Vs then {GetRegs Vs}
907901
end
908-
case StateReg of none then
909-
InnerBodyVInstr = InnerBodyVInter
910-
VHd0 = VInter
911-
else
912-
InnerBodyVInstr = vSetSelf(_ StateReg InnerBodyVInter)
913-
VHd0 = vGetSelf(_ StateReg VInter)
914-
end
915-
{CS endDefinition(InnerBodyVInstr nil AllRegs
902+
{CS endDefinition(InnerBodyVInter nil AllRegs
916903
?InnerGRegs ?InnerCode ?InnerNLiveRegs)}
917904
{CS newReg(?InnerDefinitionReg)}
918905
InnerPredId = {Adjoin PredId
@@ -964,8 +951,8 @@ define
964951
OuterBodyVInter2 = vCall(_ InnerDefinitionReg nil unit nil)
965952
{CS endDefinition(OuterBodyVInstr FormalRegs AllRegs
966953
?OuterGRegs ?OuterCode ?OuterNLiveRegs)}
967-
VInter = vDefinition(_ {V reg($)} PredId @procedureRef
968-
OuterGRegs OuterCode VTl0)
954+
VHd0 = vDefinition(_ {V reg($)} PredId @procedureRef
955+
OuterGRegs OuterCode VTl0)
969956
end
970957
{StepPoint @coord 'definition' VHd VTl VHd0 VTl0}
971958
statements <- unit % hand them to the garbage collector

platform-test/debug/stacktrace_line_num.oz

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,23 @@ functor
2424
export
2525
Return
2626
define
27-
EnsureFailureLineNumber = 29
27+
FunctionFailureLineNumber = 31
28+
ClassFailureLineNumber = 39
29+
2830
proc {EnsureFailure}
2931
2 + 2 = 5
3032
end
3133

34+
class ClassFailure
35+
prop locking
36+
37+
meth something
38+
lock
39+
2 + 2 = 5
40+
end
41+
end
42+
end
43+
3244
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3345

3446
fun {CreateTestCase P LineNumber Key}
@@ -45,8 +57,15 @@ define
4557
keys: [Key stacktraceLineNum]
4658
)
4759
end
60+
4861
Return = stacktraceLineNum([
49-
{CreateTestCase EnsureFailure EnsureFailureLineNumber simpleFunctionCall}
62+
{CreateTestCase EnsureFailure
63+
FunctionFailureLineNumber
64+
simpleFunctionCall}
65+
66+
{CreateTestCase (proc {$} _ = {New ClassFailure something} end)
67+
ClassFailureLineNumber
68+
simpleMethodCall}
5069
])
5170
end
5271

0 commit comments

Comments
 (0)