From 8923325d5c9e14e33478261b6c191e8fb092e1c4 Mon Sep 17 00:00:00 2001
From: Nick Johnson <arachnid@notdot.net>
Date: Wed, 24 Aug 2016 15:50:38 +0100
Subject: internal/ethapi: Fix bug in opCodeWrapper usage

---
 internal/ethapi/tracer.go      |  4 +++-
 internal/ethapi/tracer_test.go | 25 ++++++++++++++++++++-----
 2 files changed, 23 insertions(+), 6 deletions(-)

(limited to 'internal')

diff --git a/internal/ethapi/tracer.go b/internal/ethapi/tracer.go
index 37cb7ec36..16ec6ebf0 100644
--- a/internal/ethapi/tracer.go
+++ b/internal/ethapi/tracer.go
@@ -284,8 +284,10 @@ func (jst *JavascriptTracer) CaptureState(env vm.Environment, pc uint64, op vm.O
 		jst.stack.stack = stack
 		jst.db.db = env.Db()
 
+		ocw := &opCodeWrapper{op}
+
 		jst.log["pc"] = pc
-		jst.log["op"] = &opCodeWrapper{op}
+		jst.log["op"] = ocw.toValue(jst.vm)
 		jst.log["gas"] = gas.Int64()
 		jst.log["gasPrice"] = cost.Int64()
 		jst.log["memory"] = jst.memvalue
diff --git a/internal/ethapi/tracer_test.go b/internal/ethapi/tracer_test.go
index dbc38bbbc..301ff4840 100644
--- a/internal/ethapi/tracer_test.go
+++ b/internal/ethapi/tracer_test.go
@@ -19,6 +19,7 @@ package ethapi
 import (
 	"errors"
 	"math/big"
+	"reflect"
 	"testing"
 	"time"
 
@@ -140,12 +141,26 @@ func TestStack(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	value, ok := ret.([]int)
-	if !ok {
-		t.Errorf("Expected return value to be []int, was %T", ret)
+	expected := []int{0, 1, 2}
+	if !reflect.DeepEqual(ret, expected) {
+		t.Errorf("Expected return value to be %#v, got %#v", expected, ret)
+	}
+}
+
+func TestOpcodes(t *testing.T) {
+	tracer, err := NewJavascriptTracer("{opcodes: [], step: function(log) { this.opcodes.push(log.op.toString()); }, result: function() { return this.opcodes; }}")
+	if err != nil {
+		t.Fatal(err)
 	}
-	if len(value) != 3 || value[0] != 0 || value[1] != 1 || value[2] != 2 {
-		t.Errorf("Expected return value to be [0 1 2], got %v", value)
+
+	ret, err := runTrace(tracer)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	expected := []string{"PUSH1", "PUSH1", "STOP"}
+	if !reflect.DeepEqual(ret, expected) {
+		t.Errorf("Expected return value to be %#v, got %#v", expected, ret)
 	}
 }
 
-- 
cgit v1.2.3