aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2016-04-12 23:42:14 +0800
committerFelix Lange <fjl@twurst.com>2016-04-12 23:42:14 +0800
commit4e85be0717d298e2cd406c84cf321cd856f1e94f (patch)
tree81234b558c398430a6c3f820eacbd83e9677c7cc
parentf460b0217fd8de6de90814e53e7ba4e2e86aff15 (diff)
downloaddexon-4e85be0717d298e2cd406c84cf321cd856f1e94f.tar.gz
dexon-4e85be0717d298e2cd406c84cf321cd856f1e94f.tar.zst
dexon-4e85be0717d298e2cd406c84cf321cd856f1e94f.zip
jsre: print BigNumber objects with custom constructor as number
-rw-r--r--jsre/pretty.go18
1 files changed, 13 insertions, 5 deletions
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 {