瀏覽代碼

Sourcemap fixes.

Dmitry Panov 7 年之前
父節點
當前提交
26e5c57fef
共有 3 個文件被更改,包括 19 次插入16 次删除
  1. 1 1
      compiler.go
  2. 17 14
      parser/statement.go
  3. 1 1
      srcfile.go

+ 1 - 1
compiler.go

@@ -9,7 +9,7 @@ import (
 )
 )
 
 
 const (
 const (
-	blockLoop   = iota
+	blockLoop = iota
 	blockTry
 	blockTry
 	blockBranch
 	blockBranch
 	blockSwitch
 	blockSwitch

+ 17 - 14
parser/statement.go

@@ -9,6 +9,7 @@ import (
 	"strings"
 	"strings"
 	"os"
 	"os"
 	"io/ioutil"
 	"io/ioutil"
+	"net/url"
 )
 )
 
 
 func (self *_parser) parseBlockStatement() *ast.BlockStatement {
 func (self *_parser) parseBlockStatement() *ast.BlockStatement {
@@ -557,25 +558,27 @@ func (self *_parser) parseSourceMap() *sourcemap.Consumer {
 	lastLine := self.str[strings.LastIndexByte(self.str, '\n') + 1:]
 	lastLine := self.str[strings.LastIndexByte(self.str, '\n') + 1:]
 	if strings.HasPrefix(lastLine, "//# sourceMappingURL") {
 	if strings.HasPrefix(lastLine, "//# sourceMappingURL") {
 		urlIndex := strings.Index(lastLine, "=")
 		urlIndex := strings.Index(lastLine, "=")
-		url := lastLine[urlIndex+1:]
+		urlStr := lastLine[urlIndex+1:]
 
 
 		var data []byte
 		var data []byte
-		if strings.HasPrefix(url, "data:application/json;base64") {
-			b64Index := strings.Index(url, ",")
-			b64 := url[b64Index+1:]
+		if strings.HasPrefix(urlStr, "data:application/json") {
+			b64Index := strings.Index(urlStr, ",")
+			b64 := urlStr[b64Index+1:]
 			if d, err := base64.StdEncoding.DecodeString(b64); err == nil {
 			if d, err := base64.StdEncoding.DecodeString(b64); err == nil {
 				data = d
 				data = d
 			}
 			}
-		}
-
-		if strings.HasPrefix(strings.ToLower(url), "http") {
-			// Not implemented - compile error?
-			return nil
-		}
-
-		if f, err := os.Open(url); err == nil {
-			if d, err := ioutil.ReadAll(f); err == nil {
-				data = d
+		} else {
+			if smUrl, err := url.Parse(urlStr); err == nil {
+				if smUrl.Scheme == "" || smUrl.Scheme == "file" {
+					if f, err := os.Open(smUrl.Path); err == nil {
+						if d, err := ioutil.ReadAll(f); err == nil {
+							data = d
+						}
+					}
+				} else {
+					// Not implemented - compile error?
+					return nil
+				}
 			}
 			}
 		}
 		}
 
 

+ 1 - 1
srcfile.go

@@ -2,9 +2,9 @@ package goja
 
 
 import (
 import (
 	"fmt"
 	"fmt"
+	"github.com/go-sourcemap/sourcemap"
 	"sort"
 	"sort"
 	"strings"
 	"strings"
-	"github.com/go-sourcemap/sourcemap"
 )
 )
 
 
 type Position struct {
 type Position struct {