From 4e85be0717d298e2cd406c84cf321cd856f1e94f Mon Sep 17 00:00:00 2001
From: Felix Lange <fjl@twurst.com>
Date: Tue, 12 Apr 2016 17:42:14 +0200
Subject: jsre: print BigNumber objects with custom constructor as number

---
 jsre/pretty.go | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

(limited to 'jsre/pretty.go')

diff --git a/jsre/pretty.go b/jsre/pretty.go
index d0b42cd01..8b2b35e8e 100644
--- a/jsre/pretty.go
+++ b/jsre/pretty.go
@@ -227,12 +227,20 @@ func iterOwnKeys(vm *otto.Otto, obj *otto.Object, f func(string)) {
 }
 
 func (ctx ppctx) isBigNumber(v *otto.Object) bool {
-	BigNumber, err := ctx.vm.Run("BigNumber.prototype")
-	if err != nil {
-		panic(err)
+	// Handle numbers with custom constructor.
+	if v, _ := v.Get("constructor"); v.Object() != nil {
+		if strings.HasPrefix(toString(v.Object()), "function BigNumber") {
+			return true
+		}
+	}
+	// Handle default constructor.
+	BigNumber, _ := ctx.vm.Object("BigNumber.prototype")
+	if BigNumber == nil {
+		return false
 	}
-	cp := constructorPrototype(v)
-	return cp != nil && cp.Value() == BigNumber
+	bv, _ := BigNumber.Call("isPrototypeOf", v)
+	b, _ := bv.ToBoolean()
+	return b
 }
 
 func toString(obj *otto.Object) string {
-- 
cgit v1.2.3