From fc96db63e7b69e6526eddf810cfb15019d835138 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Tue, 1 Sep 2015 23:33:23 -0700 Subject: [PATCH] Handle t === timePkg.Time case on its own. Refactor based on suggestion at https://github.com/gopherjs/gopherjs/issues/287#issuecomment-136315076. Panic on null or undefined values instead of Date, no support for *time.Time. Remove unneeded declaration. The same variable is already declared in parent scope. --- compiler/prelude/jsmapping.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/compiler/prelude/jsmapping.go b/compiler/prelude/jsmapping.go index 3cba9ead1..ce0691b5a 100644 --- a/compiler/prelude/jsmapping.go +++ b/compiler/prelude/jsmapping.go @@ -181,6 +181,13 @@ var $internalize = function(v, t, recv) { if (t === $jsObjectPtr.elem) { $panic(new $String("cannot internalize js.Object, use *js.Object instead")); } + var timePkg = $packages["time"]; + if (timePkg !== undefined && t === timePkg.Time) { + if (!(v !== null && v !== undefined && v.constructor === Date)) { + $panic(new $String("cannot internalize time.Time from " + typeof v + ", must be Date")); + } + return timePkg.Unix(new $Int64(0, 0), new $Int64(0, v.getTime() * 1000000)); + } switch (t.kind) { case $kindBool: return !!v; @@ -270,12 +277,11 @@ var $internalize = function(v, t, recv) { case Boolean: return new $Bool(!!v); case Date: - var timePkg = $packages["time"]; if (timePkg === undefined) { /* time package is not present, internalize as &js.Object{Date} so it can be externalized into original Date. */ return new $jsObjectPtr(v); } - return new timePkg.Time(timePkg.Unix(new $Int64(0, 0), new $Int64(0, v.getTime() * 1000000))); + return new timePkg.Time($internalize(v, timePkg.Time)); case Function: var funcType = $funcType([$sliceType($emptyInterface)], [$jsObjectPtr], true); return new funcType($internalize(v, funcType)); @@ -315,13 +321,6 @@ var $internalize = function(v, t, recv) { } return s; case $kindStruct: - if (v !== null && v !== undefined && v.constructor === Date) { - var timePkg = $packages["time"]; - if (timePkg !== undefined && t === timePkg.Time) { - return timePkg.Unix(new $Int64(0, 0), new $Int64(0, v.getTime() * 1000000)); - } - } - var noJsObject = {}; var searchJsObject = function(t) { if (t === $jsObjectPtr) {