aboutsummaryrefslogtreecommitdiff
path: root/examples/records.hdass
diff options
context:
space:
mode:
Diffstat (limited to 'examples/records.hdass')
-rw-r--r--examples/records.hdass42
1 files changed, 42 insertions, 0 deletions
diff --git a/examples/records.hdass b/examples/records.hdass
new file mode 100644
index 0000000..9800839
--- /dev/null
+++ b/examples/records.hdass
@@ -0,0 +1,42 @@
+[entry: main]
+
+// An enum of status codes and a struct describing a memory layout. Stores two
+// fields into a stack instance, reads them back, and exits with their sum.
+enum Status
+{
+ Ok,
+ Warn,
+ Fail
+}
+
+struct Pair
+{
+ a: qword
+ b: qword
+}
+
+const SYS_EXIT = 60
+
+proc main
+{
+ stack pair[16] // Pair.size
+
+ rsi = pair
+ rbx = 40
+ ^rsi = rbx // pair.a (offset 0)
+
+ rsi = pair
+ rsi += Pair.b
+ rcx = Status.Fail // 2
+ ^rsi = rcx // pair.b (offset 8)
+
+ rsi = pair
+ rdi = ^rsi // load a = 40
+ rsi = pair
+ rsi += Pair.b
+ rax = ^rsi // load b = 2
+ rdi += rax // 42
+
+ rax = SYS_EXIT
+ syscall
+}