The Squirrel interpreter. See http://www.squirrel-lang.org/

Dependents:   Squirrel

Revision:
0:97a4f8cc534c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/samples/metamethods.nut	Tue Dec 16 10:20:34 2014 +0000
@@ -0,0 +1,115 @@
+
+local base_vec={
+	function _add(n)
+	{
+		return {
+			x=x+n.x,
+			y=y+n.y,
+			z=z+n.z,
+		}
+	}
+	function _sub(n)
+	{
+		return {
+			x=x-n.x,
+			y=y-n.y,
+			z=z-n.z,
+		}
+	}
+	function _div(n)
+	{
+		return {
+			x=x/n.x,
+			y=y/n.y,
+			z=z/n.z,
+		}
+	}
+	function _mul(n)
+	{
+		return {
+			x=x*n.x,
+			y=y*n.y,
+			z=z*n.z,
+		}
+	}
+	function _modulo(n)
+	{
+		return {
+			x=x%n,
+			y=y%n,
+			z=z%n,
+		}
+	}
+	function _typeof() {return "vector";}
+	function _get(key)
+	{
+		if(key==100)
+		{
+			return test_field;
+		}
+	},
+	function _set(key,val)
+	{
+		::print("key = "+key+"\n");
+		::print("val = "+val+"\n")
+		if(key==100)
+		{
+			return test_field=val;
+		}
+	}
+	test_field="nothing"
+}
+
+function vector(_x,_y,_z)
+{
+	return {x=_x,y=_y,z=_z }.setdelegate(base_vec); 
+}
+////////////////////////////////////////////////////////////
+
+local v1=vector(1.5,2.5,3.5);
+local v2=vector(1.5,2.5,3.5);
+
+local r=v1+v2;
+
+
+foreach(i,val in r)
+{
+	print(i+" = "+val+"\n");
+}
+
+r=v1*v2;
+
+foreach(i,val in r)
+{
+	print(i+" = "+val+"\n");
+}
+
+r=v1/v2;
+
+foreach(i,val in r)
+{
+	print(i+" = "+val+"\n");
+}
+
+r=v1-v2;
+
+foreach(i,val in r)
+{
+	print(i+" = "+val+"\n");
+}
+
+r=v1%2;
+
+foreach(i,val in r)
+{
+	print(i+" = "+val+"\n");
+}
+
+print(v1[100]+"\n");
+v1[100]="set SUCCEEDED";
+print(v1[100]+"\n");
+
+if(typeof v1=="vector")
+	print("<SUCCEEDED>\n");
+else
+	print("<FAILED>\n");