Explorar o código

T[] to Slice<T> in native calls

Xanathar %!s(int64=11) %!d(string=hai) anos
pai
achega
c617924807

+ 15 - 11
src/MoonSharp.Debugger/MainForm.Designer.cs

@@ -74,7 +74,7 @@
 			this.btnRemoveWatch = new System.Windows.Forms.ToolStripButton();
 			this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
 			this.btnViewWatch = new System.Windows.Forms.ToolStripButton();
-			this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
+			this.toolGoToCodeWatches = new System.Windows.Forms.ToolStripButton();
 			this.label3 = new System.Windows.Forms.Label();
 			this.tabPage4 = new System.Windows.Forms.TabPage();
 			this.lvVStack = new MoonSharp.Debugger.DoubleBufferedListView();
@@ -456,7 +456,7 @@
 			this.lvWatches.TabIndex = 4;
 			this.lvWatches.UseCompatibleStateImageBehavior = false;
 			this.lvWatches.View = System.Windows.Forms.View.Details;
-			this.lvWatches.SelectedIndexChanged += new System.EventHandler(this.lvWatches_SelectedIndexChanged);
+			this.lvWatches.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvWatches_MouseDoubleClick);
 			// 
 			// columnHeader1
 			// 
@@ -485,7 +485,7 @@
             this.btnRemoveWatch,
             this.toolStripSeparator4,
             this.btnViewWatch,
-            this.toolStripButton1});
+            this.toolGoToCodeWatches});
 			this.toolStrip2.Location = new System.Drawing.Point(3, 3);
 			this.toolStrip2.Name = "toolStrip2";
 			this.toolStrip2.Size = new System.Drawing.Size(350, 25);
@@ -524,14 +524,15 @@
 			this.btnViewWatch.Text = "View";
 			this.btnViewWatch.Click += new System.EventHandler(this.btnViewWatch_Click);
 			// 
-			// toolStripButton1
+			// toolGoToCodeWatches
 			// 
-			this.toolStripButton1.Image = global::MoonSharp.Debugger.Properties.Resources.GoToDeclaration_5576;
-			this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
-			this.toolStripButton1.Name = "toolStripButton1";
-			this.toolStripButton1.Size = new System.Drawing.Size(87, 22);
-			this.toolStripButton1.Text = "Go to Code";
-			this.toolStripButton1.ToolTipText = "Go to Code";
+			this.toolGoToCodeWatches.Image = global::MoonSharp.Debugger.Properties.Resources.GoToDeclaration_5576;
+			this.toolGoToCodeWatches.ImageTransparentColor = System.Drawing.Color.Magenta;
+			this.toolGoToCodeWatches.Name = "toolGoToCodeWatches";
+			this.toolGoToCodeWatches.Size = new System.Drawing.Size(87, 22);
+			this.toolGoToCodeWatches.Text = "Go to Code";
+			this.toolGoToCodeWatches.ToolTipText = "Go to Code";
+			this.toolGoToCodeWatches.Click += new System.EventHandler(this.toolGoToCodeWatches_Click);
 			// 
 			// label3
 			// 
@@ -573,6 +574,7 @@
 			this.lvVStack.TabIndex = 7;
 			this.lvVStack.UseCompatibleStateImageBehavior = false;
 			this.lvVStack.View = System.Windows.Forms.View.Details;
+			this.lvVStack.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvVStack_MouseDoubleClick);
 			// 
 			// columnHeader5
 			// 
@@ -617,6 +619,7 @@
 			this.toolGoToCodeVStack.Size = new System.Drawing.Size(87, 22);
 			this.toolGoToCodeVStack.Text = "Go to Code";
 			this.toolGoToCodeVStack.ToolTipText = "Go to Code";
+			this.toolGoToCodeVStack.Click += new System.EventHandler(this.toolGoToCodeVStack_Click);
 			// 
 			// label2
 			// 
@@ -718,6 +721,7 @@
 			this.toolGoToCodeXStack.Size = new System.Drawing.Size(87, 22);
 			this.toolGoToCodeXStack.Text = "Go to Code";
 			this.toolGoToCodeXStack.ToolTipText = "Go to Code";
+			this.toolGoToCodeXStack.Click += new System.EventHandler(this.toolGoToCodeXStack_Click);
 			// 
 			// tabPage2
 			// 
@@ -896,7 +900,7 @@
 		private System.Windows.Forms.ColumnHeader columnHeader7;
 		private System.Windows.Forms.ToolStrip toolStrip3;
 		private System.Windows.Forms.ToolStripButton btnViewVStk;
-		private System.Windows.Forms.ToolStripButton toolStripButton1;
+		private System.Windows.Forms.ToolStripButton toolGoToCodeWatches;
 		private System.Windows.Forms.ToolStripButton toolGoToCodeVStack;
 		private DoubleBufferedListView lvCallStack;
 		private System.Windows.Forms.ColumnHeader colAddress;

+ 35 - 5
src/MoonSharp.Debugger/MainForm.cs

@@ -48,14 +48,14 @@ namespace MoonSharp.Debugger
 		Script m_Script;
 		SynchronizationContext m_Ctx;
 
-		RValue Print(RValue[] values)
+		RValue Print(IList<RValue> values)
 		{
 			string prn = string.Join(" ", values.Select(v => v.AsString()).ToArray());
 			Console_WriteLine("{0}", prn);
 			return RValue.Nil;
 		}
 
-		RValue Assert(RValue[] values)
+		RValue Assert(IList<RValue> values)
 		{
 			if (!values[0].TestAsBoolean())
 				Console_WriteLine("ASSERT FAILED!");
@@ -63,7 +63,7 @@ namespace MoonSharp.Debugger
 			return RValue.Nil;
 		}
 
-		RValue XAssert(RValue[] values)
+		RValue XAssert(IList<RValue> values)
 		{
 			if (!values[1].TestAsBoolean())
 				Console_WriteLine("ASSERT FAILED! : {0}", values[0].ToString());
@@ -314,7 +314,7 @@ namespace MoonSharp.Debugger
 
 		private void lvVStack_MouseDoubleClick(object sender, MouseEventArgs e)
 		{
-
+			ValueBrowser.StartBrowse(lvVStack.SelectedItems.OfType<ListViewItem>().Select(lvi => lvi.Tag).Cast<RValue>().FirstOrDefault());
 		}
 
 		private void btnViewWatch_Click(object sender, EventArgs e)
@@ -322,11 +322,41 @@ namespace MoonSharp.Debugger
 			ValueBrowser.StartBrowse(lvWatches.SelectedItems.OfType<ListViewItem>().Select(lvi => lvi.Tag).Cast<RValue>().FirstOrDefault());
 		}
 
-		private void lvWatches_SelectedIndexChanged(object sender, EventArgs e)
+
+		private void lvWatches_MouseDoubleClick(object sender, MouseEventArgs e)
 		{
 			ValueBrowser.StartBrowse(lvWatches.SelectedItems.OfType<ListViewItem>().Select(lvi => lvi.Tag).Cast<RValue>().FirstOrDefault());
 		}
 
+		private void toolGoToCodeVStack_Click(object sender, EventArgs e)
+		{
+			var v = lvVStack.SelectedItems.OfType<ListViewItem>().Select(lvi => lvi.Tag).Cast<RValue>().FirstOrDefault();
+
+			if (v != null && v.Type == DataType.Function)
+				GotoBytecode(v.Function.ByteCodeLocation);
+		}
+
+		private void toolGoToCodeWatches_Click(object sender, EventArgs e)
+		{
+			var v = lvWatches.SelectedItems.OfType<ListViewItem>().Select(lvi => lvi.Tag).Cast<RValue>().FirstOrDefault();
+
+			if (v != null && v.Type == DataType.Function)
+				GotoBytecode(v.Function.ByteCodeLocation);
+		}
+		private void toolGoToCodeXStack_Click(object sender, EventArgs e)
+		{
+			var v = lvCallStack.SelectedItems.OfType<ListViewItem>().Select(lvi => lvi.Tag).OfType<int>().FirstOrDefault();
+
+			if (v != 0)
+				GotoBytecode(v);
+		}
+
+		private void GotoBytecode(int code)
+		{
+			codeView.CursorLine = code;
+		}
+
+
 
 	}
 }

+ 50 - 44
src/MoonSharp.Debugger/MainForm.resx

@@ -140,57 +140,57 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACe
-        DQAAAk1TRnQBSQFMAgEBBAEAARgBAQEYAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        DQAAAk1TRnQBSQFMAgEBBAEAASABAQEgAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
         AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AIgADDAEQA1kBvwP2
         Af8D9gH/A1kBvwMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAEAAD9gH/
-        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/5AAA1kBvwOcAf8DHwH/Ax8B/wP2Af8D9gH/A/YB/wP2
-        Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/xAAA/YB/wMfAf8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wP2Af+QAAP2Af8DHwH/Ax8B/wMfAf8D9gH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMf
-        Af8DHwH/Ax8B/wP2Af8QAAP2Af8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/FAAD9gH/A/YB/wP2
+        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/5AAA1kBvwOcAf8DHgH/Ax4B/wP2Af8D9gH/A/YB/wP2
+        Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/xAAA/YB/wMeAf8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wP2Af+QAAP2Af8DHgH/Ax4B/wMeAf8D9gH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMe
+        Af8DHgH/Ax4B/wP2Af8QAAP2Af8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/FAAD9gH/A/YB/wP2
         Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8cAAP2Af8D9gH/A/YB/wP2Af8D9gH/CAADIQEwAyEBMAQA
-        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/Ax8B/wMfAf8DHwH/A/YB/wMfAf8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/EAAD9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/xQA
-        A/YB/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/HAAD9gH/Ax8B/wMfAf8DHwH/A/YB/wQA
-        AyEBMANiAe8DYgHvAyEBMAP2Af8DHwH/Ax8B/wMfAf8D9gH/A/YB/wMfAf8D9gH/A/YB/wP2Af8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/A/YB/wgAA/YB/wP2Af8D9gH/A/YB/wP2
-        Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/DAAD9gH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wP2Af8cAAP2Af8DHwH/A/YB/wP2Af8D9gH/AyEBMANiAe8DhgH/A0EB/wNiAe8D9gH/A/YB/wP2
-        Af8DHwH/A/YB/wP2Af8DHwH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
-        Af8D9gH/A/YB/wP2Af8IAAP2Af8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/
-        A/YB/wwAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8UAAP2Af8DHwH/
-        A/YB/wQAAyEBMAM6AWADYgHvA4YB/wMfAf8DQQH/A2IB7wMhATAD9gH/Ax8B/wP2Af8D9gH/Ax8B/wP2
+        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/Ax4B/wMeAf8DHgH/A/YB/wMeAf8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/EAAD9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/xQA
+        A/YB/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/HAAD9gH/Ax4B/wMeAf8DHgH/A/YB/wQA
+        AyEBMANiAe8DYgHvAyEBMAP2Af8DHgH/Ax4B/wMeAf8D9gH/A/YB/wMeAf8D9gH/A/YB/wP2Af8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/A/YB/wgAA/YB/wP2Af8D9gH/A/YB/wP2
+        Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/DAAD9gH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wP2Af8cAAP2Af8DHgH/A/YB/wP2Af8D9gH/AyEBMANiAe8DhgH/A0AB/wNiAe8D9gH/A/YB/wP2
+        Af8DHgH/A/YB/wP2Af8DHgH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
+        Af8D9gH/A/YB/wP2Af8IAAP2Af8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/
+        A/YB/wwAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8UAAP2Af8DHgH/
+        A/YB/wQAAyEBMAM6AWADYgHvA4YB/wMeAf8DQAH/A2IB7wMhATAD9gH/Ax4B/wP2Af8D9gH/Ax4B/wP2
         Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/CAAD9gH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wP2Af8UAAP2Af8DHwH/Ax8B/wMf
-        Af8DHwH/Ax8B/wMfAf8DHwH/A/YB/xQAA/YB/wMfAf8D9gH/AyEBMANiAe8DYgHvAzoBYANiAe8DhgH/
-        A0EB/wNiAe8DIQEwA/YB/wMfAf8D9gH/A/YB/wMfAf8D9gH/A/YB/wP2Af8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/A/YB/wgAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
-        Af8D9gH/A/YB/wP2Af8D9gH/FAAD9gH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wP2Af8UAAP2
-        Af8DHwH/A/YB/wNiAe8DhgH/A0EB/wNiAe8DOgFgA2IB7wP2Af8DYgHvAyEBMAP2Af8DHwH/A/YB/wP2
-        Af8DHwH/Ax8B/wMfAf8D9gH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wP2
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wP2Af8UAAP2Af8DHgH/Ax4B/wMe
+        Af8DHgH/Ax4B/wMeAf8DHgH/A/YB/xQAA/YB/wMeAf8D9gH/AyEBMANiAe8DYgHvAzoBYANiAe8DhgH/
+        A0AB/wNiAe8DIQEwA/YB/wMeAf8D9gH/A/YB/wMeAf8D9gH/A/YB/wP2Af8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/A/YB/wgAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
+        Af8D9gH/A/YB/wP2Af8D9gH/FAAD9gH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wP2Af8UAAP2
+        Af8DHgH/A/YB/wNiAe8DhgH/A0AB/wNiAe8DOgFgA2IB7wP2Af8DYgHvAyEBMAP2Af8DHgH/A/YB/wP2
+        Af8DHgH/Ax4B/wMeAf8D9gH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wP2
         Af8MAAP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8YAAP2Af8D9gH/A/YB/wP2
-        Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wgAA/YB/wMfAf8D9gH/A4YB/wMfAf8DHwH/
-        A0EB/wNiAe8DYgHvA4YB/wNBAf8DYgHvA/YB/wMfAf8D9gH/A/YB/wMfAf8DHwH/Ax8B/wP2Af8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/A/YB/wwAA/YB/wMfAf8DHwH/Ax8B/wMf
-        Af8DHwH/Ax8B/wMfAf8DHwH/A/YB/xgAA/YB/wMfAf8DHwH/Ax8B/wMfAf8DHwH/A/YB/wMfAf8DHwH/
-        Ax8B/wMfAf8D9gH/CAAD9gH/Ax8B/wP2Af8DhgH/Ax8B/wMfAf8DHwH/A0EB/wPrAf8DhgH/Ax8B/wNB
-        Af8D9gH/Ax8B/wP2Af8DWQG/A5wB/wMfAf8DHwH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
-        Af8D9gH/A/YB/wP2Af8D9gH/DAAD9gH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/
-        GAAD9gH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/Ax8B/wMfAf8DHwH/Ax8B/wP2Af8IAAP2Af8DHwH/
-        A/YB/wNiAe8DhgH/Ax8B/wMfAf8DQQH/A2IB7wNiAe8DhgH/A0EB/wP2Af8DHwH/A/YB/wMMARAD9gH/
+        Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wgAA/YB/wMeAf8D9gH/A4YB/wMeAf8DHgH/
+        A0AB/wNiAe8DYgHvA4YB/wNAAf8DYgHvA/YB/wMeAf8D9gH/A/YB/wMeAf8DHgH/Ax4B/wP2Af8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/A/YB/wwAA/YB/wMeAf8DHgH/Ax4B/wMe
+        Af8DHgH/Ax4B/wMeAf8DHgH/A/YB/xgAA/YB/wMeAf8DHgH/Ax4B/wMeAf8DHgH/A/YB/wMeAf8DHgH/
+        Ax4B/wMeAf8D9gH/CAAD9gH/Ax4B/wP2Af8DhgH/Ax4B/wMeAf8DHgH/A0AB/wPrAf8DhgH/Ax4B/wNA
+        Af8D9gH/Ax4B/wP2Af8DWQG/A5wB/wMeAf8DHgH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
+        Af8D9gH/A/YB/wP2Af8D9gH/DAAD9gH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/
+        GAAD9gH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/Ax4B/wMeAf8DHgH/Ax4B/wP2Af8IAAP2Af8DHgH/
+        A/YB/wNiAe8DhgH/Ax4B/wMeAf8DQAH/A2IB7wNiAe8DhgH/A0AB/wP2Af8DHgH/A/YB/wMMARAD9gH/
         A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8MAAP2
         Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8QAAP2Af8D9gH/A/YB/wP2Af8D9gH/
-        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/CAAD9gH/Ax8B/wP2Af8DIQEwA2IB7wOG
-        Af8DQQH/A2IB7wMhATADIQEwA2IB7wNcAd8D9gH/Ax8B/wP2Af8EAAP2Af8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/
-        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8EAAP2Af8DHwH/Ax8B/wMf
-        Af8DHwH/Ax8B/wP2Af8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/CAAD9gH/Ax8B/wP2Af8D9gH/
-        A/YB/wNiAe8DYgHvAyEBMAgAA/YB/wP2Af8D9gH/Ax8B/wP2Af8EAAP2Af8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/A/YB/wP2Af8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wP2Af8EAAP2Af8DHwH/Ax8B/wMf
-        Af8DHwH/Ax8B/wP2Af8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/CAAD9gH/Ax8B/wMfAf8DHwH/
-        A/YB/wMhATADIQEwDAAD9gH/Ax8B/wMfAf8DHwH/A/YB/wQAA/YB/wMfAf8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8D9gH/A/YB/wMfAf8DHwH/Ax8B/wMfAf8DHwH/
-        Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/A/YB/wQAA/YB/wP2Af8D9gH/A/YB/wP2
+        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/CAAD9gH/Ax4B/wP2Af8DIQEwA2IB7wOG
+        Af8DQAH/A2IB7wMhATADIQEwA2IB7wNcAd8D9gH/Ax4B/wP2Af8EAAP2Af8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/
+        A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8EAAP2Af8DHgH/Ax4B/wMe
+        Af8DHgH/Ax4B/wP2Af8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/CAAD9gH/Ax4B/wP2Af8D9gH/
+        A/YB/wNiAe8DYgHvAyEBMAgAA/YB/wP2Af8D9gH/Ax4B/wP2Af8EAAP2Af8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/A/YB/wP2Af8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wP2Af8EAAP2Af8DHgH/Ax4B/wMe
+        Af8DHgH/Ax4B/wP2Af8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/CAAD9gH/Ax4B/wMeAf8DHgH/
+        A/YB/wMhATADIQEwDAAD9gH/Ax4B/wMeAf8DHgH/A/YB/wQAA/YB/wMeAf8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8D9gH/A/YB/wMeAf8DHgH/Ax4B/wMeAf8DHgH/
+        Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/Ax4B/wMeAf8DHgH/A/YB/wQAA/YB/wP2Af8D9gH/A/YB/wP2
         Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8IAAP2Af8D9gH/A/YB/wP2Af8D9gH/
         FAAD9gH/A/YB/wP2Af8D9gH/A/YB/wQAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/
         A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/
@@ -204,4 +204,10 @@
   <metadata name="toolStrip4.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>673, 17</value>
   </metadata>
+  <metadata name="toolStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>463, 17</value>
+  </metadata>
+  <metadata name="toolStrip4.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>673, 17</value>
+  </metadata>
 </root>

+ 18 - 0
src/MoonSharp.Debugger/MoonSharp.Debugger.csproj

@@ -31,6 +31,24 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />

+ 1 - 1
src/MoonSharp.Debugger/SourceCodeDebugControl.cs

@@ -50,7 +50,7 @@ namespace MoonSharp.Debugger
 		public int CursorLine
 		{
 			get { return m_CursorLine; }
-			set { m_CursorLine = value; Invalidate(); }
+			set { m_CursorLine = value; ScrollToIncludeLine(m_CursorLine); Invalidate(); }
 		}
 
 		public SourceCodeDebugControl()

+ 1 - 1
src/MoonSharp.Debugger/ValueBrowser.cs

@@ -145,7 +145,7 @@ namespace MoonSharp.Debugger
 		{
 			var F = V.Function;
 			var C = F.ClosureContext;
-			lvProps.Add("Bytecode Location", F.ByteCodeLocation);
+			lvProps.Add("Bytecode Location", F.ByteCodeLocation.ToString("X8"));
 
 			for (int i = 0; i < C.Count; i++)
 			{

+ 18 - 0
src/MoonSharp.Interpreter.Tests/MoonSharp.Interpreter.Tests.csproj

@@ -34,6 +34,24 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
     <Reference Include="nunit.framework, Version=2.6.3.13283, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">

+ 9 - 7
src/MoonSharp.Interpreter.Tests/SimpleTests.cs

@@ -1,4 +1,6 @@
 using System;
+using System.Linq;
+using System.Collections.Generic;
 using MoonSharp.Interpreter.Execution;
 using NUnit.Framework;
 
@@ -11,21 +13,21 @@ namespace MoonSharp.Interpreter.Tests
 		[Test]
 		public void CSharpStaticFunctionCallStatement()
 		{
-			RValue[] args = null;
+			IList<RValue> args = null;
 
 			string script = "print(\"hello\", \"world\");";
 
 			var globalCtx = new Table();
 			globalCtx[new RValue("print")] = new RValue(new CallbackFunction(a => 
-			{ 
-				args = a; 
+			{
+				args = a.ToArray(); 
 				return new RValue(1234.0); 
 			}));
 
 			RValue res = MoonSharpInterpreter.LoadFromString(script).Execute(globalCtx);
 
 			Assert.AreEqual(DataType.Nil, res.Type);
-			Assert.AreEqual(2, args.Length);
+			Assert.AreEqual(2, args.Count);
 			Assert.AreEqual(DataType.String, args[0].Type);
 			Assert.AreEqual("hello", args[0].String);
 			Assert.AreEqual(DataType.String, args[1].Type);
@@ -36,16 +38,16 @@ namespace MoonSharp.Interpreter.Tests
 		[Test]
 		public void CSharpStaticFunctionCall()
 		{
-			RValue[] args = null;
+			IList<RValue> args = null;
 
 			string script = "return print(\"hello\", \"world\");";
 
 			var globalCtx = new Table();
-			globalCtx[new RValue("print")] = new RValue(new CallbackFunction(a => { args = a; return new RValue(1234.0); }));
+			globalCtx[new RValue("print")] = new RValue(new CallbackFunction(a => { args = a.ToArray(); return new RValue(1234.0); }));
 
 			RValue res = MoonSharpInterpreter.LoadFromString(script).Execute(globalCtx);
 
-			Assert.AreEqual(2, args.Length);
+			Assert.AreEqual(2, args.Count);
 			Assert.AreEqual(DataType.String, args[0].Type);
 			Assert.AreEqual("hello", args[0].String);
 			Assert.AreEqual(DataType.String, args[1].Type);

+ 8 - 4
src/MoonSharp.Interpreter/DataStructs/FastStack.cs

@@ -1,9 +1,11 @@
-using System;
+#if !USE_DYNAMIC_STACKS
+
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 
-namespace MoonSharp.Interpreter.Execution.VM
+namespace MoonSharp.Interpreter.DataStructs
 {
 	public class FastStack<T> : IList<T>
 	{
@@ -32,12 +34,12 @@ namespace MoonSharp.Interpreter.Execution.VM
 			m_HeadIdx += size;
 		}
 
-		public void Zero(int from, int to)
+		private void Zero(int from, int to)
 		{
 			Array.Clear(m_Storage, from, to - from + 1);
 		}
 
-		public void Zero(int index)
+		private void Zero(int index)
 		{
 			m_Storage[index] = default(T);
 		}
@@ -165,3 +167,5 @@ namespace MoonSharp.Interpreter.Execution.VM
 
 	}
 }
+
+#endif

+ 67 - 0
src/MoonSharp.Interpreter/DataStructs/FastStackDynamic.cs

@@ -0,0 +1,67 @@
+#if USE_DYNAMIC_STACKS
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace MoonSharp.Interpreter.DataStructs
+{
+	public class FastStack<T> : List<T>
+	{
+		public FastStack(int maxCapacity)
+			: base(maxCapacity)
+		{
+		}
+
+
+		public T Push(T item)
+		{
+			this.Add(item);
+			return item;
+		}
+
+		public void Expand(int size)
+		{
+			for(int i = 0; i < size; i++)
+				this.Add(default(T));
+		}
+
+		public void Zero(int index)
+		{
+			this[index] = default(T);
+		}
+
+		public T Peek(int idxofs = 0)
+		{
+			T item = this[this.Count - 1 - idxofs];
+			return item;
+		}
+		public void CropAtCount(int p)
+		{
+			RemoveLast(Count - p);
+		}
+
+		public void RemoveLast( int cnt = 1)
+		{
+			if (cnt == 1)
+			{
+				this.RemoveAt(this.Count - 1);
+			}
+			else
+			{
+				this.RemoveRange(this.Count - cnt, cnt);
+			}
+		}
+
+		public T Pop()
+		{
+			T retval = this[this.Count - 1];
+			this.RemoveAt(this.Count - 1);
+			return retval;
+		}
+	}
+}
+
+
+#endif

+ 3 - 3
src/MoonSharp.Interpreter/Execution/DataTypes/CallbackFunction.cs

@@ -7,14 +7,14 @@ namespace MoonSharp.Interpreter.Execution
 {
 	public sealed class CallbackFunction
 	{
-		Func<RValue[], RValue> m_CallBack;
+		Func<IList<RValue>, RValue> m_CallBack;
 
-		public CallbackFunction(Func<RValue[], RValue> callBack)
+		public CallbackFunction(Func<IList<RValue>, RValue> callBack)
 		{
 			m_CallBack = callBack;
 		}
 
-		public RValue Invoke(RValue[] args)
+		public RValue Invoke(IList<RValue> args)
 		{
 			return m_CallBack(args);
 		}

+ 1 - 0
src/MoonSharp.Interpreter/Execution/Scopes/LoopTracker.cs

@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using MoonSharp.Interpreter.DataStructs;
 using MoonSharp.Interpreter.Execution.VM;
 
 namespace MoonSharp.Interpreter.Execution

+ 1 - 0
src/MoonSharp.Interpreter/Execution/Scopes/RuntimeScope.cs

@@ -4,6 +4,7 @@ using MoonSharp.Interpreter.Diagnostics;
 using System.Linq;
 using System.Text;
 using MoonSharp.Interpreter.Execution.VM;
+using MoonSharp.Interpreter.DataStructs;
 
 namespace MoonSharp.Interpreter.Execution
 {

+ 3 - 2
src/MoonSharp.Interpreter/Execution/VM/Processor/Processor_InstructionLoop.cs

@@ -351,9 +351,10 @@ namespace MoonSharp.Interpreter.Execution.VM
 
 			if (fn.Type == DataType.ClrFunction)
 			{
-				RValue[] args = StackTopToArrayReverse(i.NumVal, true);
-				m_ValueStack.Pop();
+				IList<RValue> args = new Slice<RValue>(m_ValueStack, m_ValueStack.Count - i.NumVal, i.NumVal, false);
+				//m_ValueStack.Pop();
 				var ret = fn.Callback.Invoke(args);
+				m_ValueStack.RemoveLast(i.NumVal + 1);
 				m_ValueStack.Push(ret);
 			}
 			else if (fn.Type == DataType.Function)

+ 21 - 0
src/MoonSharp.Interpreter/MoonSharp.Interpreter.csproj

@@ -45,6 +45,26 @@
     <RunCodeAnalysis>false</RunCodeAnalysis>
     <CodeAnalysisRuleSet>ExtendedDesignGuidelineRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <NoWarn>3021</NoWarn>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <NoWarn>3021</NoWarn>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>ExtendedDesignGuidelineRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Antlr4.Runtime.v3.5">
       <HintPath>..\MoonSharp\packages\Antlr4.Runtime.4.2.2-alpha001\lib\net35\Antlr4.Runtime.v3.5.dll</HintPath>
@@ -55,6 +75,7 @@
   <ItemGroup>
     <Compile Include="CoreLib\BasicMethods.cs" />
     <Compile Include="CoreLib\MetaTableMethods.cs" />
+    <Compile Include="DataStructs\FastStackDynamic.cs" />
     <Compile Include="DataStructs\Slice.cs" />
     <Compile Include="Debugging\DebuggerAction.cs" />
     <Compile Include="Debugging\IDebugger.cs" />

+ 18 - 0
src/MoonSharp/MoonSharp.csproj

@@ -43,6 +43,24 @@
   <PropertyGroup>
     <ApplicationIcon>moonsharp256.ico</ApplicationIcon>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />

+ 2 - 2
src/MoonSharp/Program.cs

@@ -11,14 +11,14 @@ namespace MoonSharp
 {
 	class Program
 	{
-		static RValue Print(RValue[] values)
+		static RValue Print(IList<RValue> values)
 		{
 			string prn = string.Join(" ", values.Select(v => v.AsString()).ToArray());
 			Console.WriteLine("{0}", prn);
 			return RValue.Nil;
 		}
 
-		static RValue Read(RValue[] values)
+		static RValue Read(IList<RValue> values)
 		{
 			double d = double.Parse(Console.ReadLine());
 			return new RValue(d);

+ 18 - 0
src/MoonSharpTests/MoonSharpTests.csproj

@@ -32,6 +32,24 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="nunit.framework, Version=2.6.3.13283, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>

+ 29 - 6
src/PerformanceComparison/PerformanceComparison.csproj

@@ -9,7 +9,7 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>PerformanceComparison</RootNamespace>
     <AssemblyName>PerformanceComparison</AssemblyName>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <SccProjectName>
     </SccProjectName>
@@ -19,6 +19,8 @@
     </SccAuxPath>
     <SccProvider>
     </SccProvider>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -38,20 +40,38 @@
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="KeraLua, Version=1.3.0.0, Culture=neutral, PublicKeyToken=04d04586786c6f34, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\prg\NLua\KeraLua.dll</HintPath>
+    <Reference Include="KeraLua">
+      <HintPath>..\..\..\..\prg\NLua\KeraLua.dll</HintPath>
     </Reference>
     <Reference Include="NLua">
-      <HintPath>..\..\prg\NLua\NLua.dll</HintPath>
+      <HintPath>..\..\..\..\prg\NLua\NLua.dll</HintPath>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
   </ItemGroup>
@@ -65,6 +85,9 @@
       <Name>MoonSharp.Interpreter</Name>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.

+ 7 - 4
src/PerformanceComparison/Program.cs

@@ -13,18 +13,20 @@ namespace PerformanceComparison
 {
 	class Program
 	{
-		const int ITERATIONS = 10000;
+		const int ITERATIONS = 1;
 
 		static  string scriptText = @"
 			function move(n, src, dst, via)
 				if n > 0 then
 					move(n - 1, src, via, dst)
-					--print(src, 'to', dst)
+					print(src, 'to', dst)
 					move(n - 1, via, dst, src)
 				end
 			end
  
-			move(4, 1, 2, 3)
+			for i = 1, 10000 do
+				move(4, 1, 2, 3)
+			end
 			";
 		static  string scriptText2 = @"
 N = 8
@@ -78,7 +80,7 @@ end
 		static StringBuilder g_MoonSharpStr = new StringBuilder();
 		static StringBuilder g_NLuaStr = new StringBuilder();
 
-		public static RValue Print(RValue[] values)
+		public static RValue Print(IList<RValue> values)
 		{
 			foreach (var val in values)
 			{
@@ -152,6 +154,7 @@ end
 
 			File.WriteAllText(@"c:\temp\hanoi.lua", scriptText);
 
+
 			var fn = lua.LoadFile(@"c:\temp\hanoi.lua");
 
 			sw = Stopwatch.StartNew();

+ 3 - 0
src/PerformanceComparison/app.config

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

+ 26 - 0
src/moonsharp.sln

@@ -24,33 +24,59 @@ EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
+		Debug|x86 = Debug|x86
 		Release|Any CPU = Release|Any CPU
+		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Debug|x86.ActiveCfg = Debug|x86
+		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Debug|x86.Build.0 = Debug|x86
 		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Release|x86.ActiveCfg = Release|x86
+		{2A4BD262-D6EB-4611-A28B-27B6DAEB089B}.Release|x86.Build.0 = Release|x86
 		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Debug|x86.ActiveCfg = Debug|x86
+		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Debug|x86.Build.0 = Debug|x86
 		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Release|Any CPU.Build.0 = Release|Any CPU
+		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Release|x86.ActiveCfg = Release|x86
+		{91EA9B9D-FE03-4273-BDAF-8AD42EDE1E59}.Release|x86.Build.0 = Release|x86
 		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Debug|x86.ActiveCfg = Debug|x86
+		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Debug|x86.Build.0 = Debug|x86
 		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Release|x86.ActiveCfg = Release|x86
+		{4AD350E6-E296-43EF-9FEA-CB70358467E4}.Release|x86.Build.0 = Release|x86
 		{01C3C379-C816-4779-942D-0263763F8EA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{01C3C379-C816-4779-942D-0263763F8EA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{01C3C379-C816-4779-942D-0263763F8EA5}.Debug|x86.ActiveCfg = Debug|x86
+		{01C3C379-C816-4779-942D-0263763F8EA5}.Debug|x86.Build.0 = Debug|x86
 		{01C3C379-C816-4779-942D-0263763F8EA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{01C3C379-C816-4779-942D-0263763F8EA5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{01C3C379-C816-4779-942D-0263763F8EA5}.Release|x86.ActiveCfg = Release|x86
+		{01C3C379-C816-4779-942D-0263763F8EA5}.Release|x86.Build.0 = Release|x86
 		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Debug|x86.ActiveCfg = Debug|x86
+		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Debug|x86.Build.0 = Debug|x86
 		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Release|x86.ActiveCfg = Release|x86
+		{470C034F-1F1F-499C-9499-DC00B9EEEDE9}.Release|x86.Build.0 = Release|x86
 		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Debug|x86.ActiveCfg = Debug|x86
+		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Debug|x86.Build.0 = Debug|x86
 		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Release|x86.ActiveCfg = Release|x86
+		{F4F82CCE-2E13-441B-939C-63CF2343B1C9}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE