summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-08-15 11:10:40 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-08-15 11:10:40 +0200
commit5e600685d284d223e7979e7ad760a2eb29a2e9d3 (patch)
tree17995dd4b9628305ce362d11f26a8464c88ed20e /src/core
parentbfc060584e91398831dee85455e3df0fbbddbf57 (diff)
Sequences seem to work, but jump doesn't clean.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java30
-rw-r--r--src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java11
-rw-r--r--src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java11
-rw-r--r--src/core/src/tonkadur/wyrd/v1/lang/type/Type.java17
4 files changed, 68 insertions, 1 deletions
diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java
index 5607450..8c91206 100644
--- a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java
+++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java
@@ -17,6 +17,7 @@ import tonkadur.wyrd.v1.lang.meta.Instruction;
import tonkadur.wyrd.v1.lang.computation.Address;
import tonkadur.wyrd.v1.lang.computation.RelativeAddress;
+import tonkadur.wyrd.v1.lang.computation.Operation;
import tonkadur.wyrd.v1.lang.computation.Constant;
import tonkadur.wyrd.v1.lang.computation.Cast;
import tonkadur.wyrd.v1.lang.computation.ValueOf;
@@ -201,7 +202,15 @@ public class RegisterManager
new RelativeAddress
(
pc_stack.get_address(),
- new Cast(new Size(pc_stack.get_address()), Type.STRING),
+ new Cast
+ (
+ Operation.minus
+ (
+ new Size(pc_stack.get_address()),
+ Constant.ONE
+ ),
+ Type.STRING
+ ),
Type.INT
);
@@ -256,6 +265,16 @@ public class RegisterManager
r = parameter_context.reserve(p.get_type());
+ System.out.println
+ (
+ "[D] Storing param ("
+ + p.get_type().toString()
+ + ") "
+ + r.get_name()
+ + " <- "
+ + p.toString()
+ );
+
result.add(new SetValue(r.get_address(), p));
used_registers.add(r);
@@ -284,6 +303,15 @@ public class RegisterManager
r = parameter_context.reserve(p.get_type());
+ System.out.println
+ (
+ "[D] Reading param ("
+ + p.get_type().toString()
+ + ") "
+ + p.get_name()
+ + " <- "
+ + r.get_name()
+ );
result.add(new SetValue(p.get_address(), r.get_value()));
used_registers.add(r);
diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java b/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java
index d8316da..3af830c 100644
--- a/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java
+++ b/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java
@@ -38,4 +38,15 @@ public class MapType extends Type
{
return name;
}
+
+ @Override
+ public boolean equals (final Object o)
+ {
+ if (o instanceof MapType)
+ {
+ return ((MapType) o).member_type.equals(member_type);
+ }
+
+ return false;
+ }
}
diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java b/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java
index ee34c0d..5f5e563 100644
--- a/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java
+++ b/src/core/src/tonkadur/wyrd/v1/lang/type/PointerType.java
@@ -23,4 +23,15 @@ public class PointerType extends Type
{
return name;
}
+
+ @Override
+ public boolean equals (final Object o)
+ {
+ if (o instanceof PointerType)
+ {
+ return ((PointerType) o).target_type.equals(target_type);
+ }
+
+ return false;
+ }
}
diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java b/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java
index d2f5684..baa3bc3 100644
--- a/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java
+++ b/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java
@@ -37,4 +37,21 @@ public class Type
{
return name;
}
+
+ @Override
+ public int hashCode ()
+ {
+ return toString().hashCode();
+ }
+
+ @Override
+ public boolean equals (final Object o)
+ {
+ if (o instanceof Type)
+ {
+ return ((Type) o).toString().equals(toString());
+ }
+
+ return false;
+ }
}