summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--research/oop2.sh54
1 files changed, 54 insertions, 0 deletions
diff --git a/research/oop2.sh b/research/oop2.sh
new file mode 100644
index 0000000..88e06db
--- /dev/null
+++ b/research/oop2.sh
@@ -0,0 +1,54 @@
+# Color.esh
+
+package Color
+
+r=
+g=
+b=
+
+new(string class, int r, int g, int b)
+{
+ local self=
+
+ self=$[malloc]
+ bless ${self} ${class}
+ self->r="${r}"
+ self->g="${g}"
+ self->b="${b}"
+}
+
+delete(int self)
+{
+ unset self->r
+ unset self->g
+ unset self->b
+ free ${self}
+}
+
+get_r(int self)
+{
+ retval=${self->r}
+}
+
+get_g(int self)
+{
+ retval=${self->g}
+}
+
+get_b(int self)
+{
+ retval=${self->b}
+}
+
+print(int self)
+{
+ printf '(%d, %d, %d)' ${self->r} ${self->g} ${self->b}
+}
+
+# main.esh
+
+c=$[${Color::new} 255 0 0]
+printf 'R: %d\n' "$[${c->get_r}]"
+printf 'G: %d\n' "$[${c->get_g}]"
+printf 'B: %d\n' "$[${c->get_b}]"
+${c->print}