From 4fa4a92e1fdd987c68251baedf6add0e83afa8b9 Mon Sep 17 00:00:00 2001 From: Apoorva Ranade Date: Tue, 4 May 2021 15:34:38 +0530 Subject: [PATCH 1/2] Added operators on Strings --- src/main/java/chocopy/pa3/CodeGenImpl.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 7376ce0..5d21ca2 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -739,9 +739,25 @@ public class CodeGenImpl extends CodeGenBase sp_off -= 2; backend.emitADDI(SP, FP, -sp_off*wordSize, "restore sp"); } + if(operator.equals("!=")) + { + incSp(2); + backend.emitSW(node.left.dispatch(this), FP, (1 - sp_off) *wordSize, "Push argument 0 from last."); + backend.emitSW(node.right.dispatch(this), FP, ( - sp_off) *wordSize, "Push argument 1 from last."); + backend.emitADDI(SP, FP, -sp_off * wordSize, "Set SP to last argument."); + backend.emitJAL(strneqlLabel, "Invoke method:strneql"); + sp_off -= 2; + backend.emitADDI(SP, FP, -sp_off*wordSize, "restore sp"); + } else if(operator.equals("+")) { - + incSp(2); + backend.emitSW(node.left.dispatch(this), FP, (1 - sp_off) *wordSize, "Push argument 0 from last."); + backend.emitSW(node.right.dispatch(this), FP, ( - sp_off) *wordSize, "Push argument 1 from last."); + backend.emitADDI(SP, FP, -sp_off * wordSize, "Set SP to last argument."); + backend.emitJAL(concatLabel, "Invoke method:concat"); + sp_off -= 2; + backend.emitADDI(SP, FP, -sp_off*wordSize, "restore sp"); } else backend.emitJAL(errorNI, "Operator not implemented for String operands"); From 0b00c3fc1d1211232c8eba52f936fd5ef0fb4516 Mon Sep 17 00:00:00 2001 From: Apoorva Ranade Date: Tue, 4 May 2021 15:39:52 +0530 Subject: [PATCH 2/2] Minor correction --- src/main/java/chocopy/pa3/CodeGenImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index 5d21ca2..b442f02 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -739,7 +739,7 @@ public class CodeGenImpl extends CodeGenBase sp_off -= 2; backend.emitADDI(SP, FP, -sp_off*wordSize, "restore sp"); } - if(operator.equals("!=")) + else if(operator.equals("!=")) { incSp(2); backend.emitSW(node.left.dispatch(this), FP, (1 - sp_off) *wordSize, "Push argument 0 from last."); @@ -755,7 +755,7 @@ public class CodeGenImpl extends CodeGenBase backend.emitSW(node.left.dispatch(this), FP, (1 - sp_off) *wordSize, "Push argument 0 from last."); backend.emitSW(node.right.dispatch(this), FP, ( - sp_off) *wordSize, "Push argument 1 from last."); backend.emitADDI(SP, FP, -sp_off * wordSize, "Set SP to last argument."); - backend.emitJAL(concatLabel, "Invoke method:concat"); + backend.emitJAL(strcatLabel, "Invoke method:strcat"); sp_off -= 2; backend.emitADDI(SP, FP, -sp_off*wordSize, "restore sp"); }