From cc4c0df2c4e53572abe7dcced51c1f4b7c6f41f2 Mon Sep 17 00:00:00 2001 From: algochoi <86622919+algochoi@users.noreply.github.com> Date: Wed, 29 Jun 2022 08:37:20 -0400 Subject: [PATCH 1/3] Fix source map mappings key and use line deltas --- data/transactions/logic/sourcemap.go | 35 ++++++++++++++++------- data/transactions/logic/sourcemap_test.go | 13 +++++++++ test/scripts/e2e_subs/tealprogs/quine.map | 2 +- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/data/transactions/logic/sourcemap.go b/data/transactions/logic/sourcemap.go index 3ffafd5e50..6914e5fd94 100644 --- a/data/transactions/logic/sourcemap.go +++ b/data/transactions/logic/sourcemap.go @@ -36,7 +36,9 @@ type SourceMap struct { SourceRoot string `json:"sourceRoot,omitempty"` Sources []string `json:"sources"` Names []string `json:"names"` - Mapping string `json:"mapping"` + // Mapping field is deprecated. Use `Mappings` field instead. + Mapping string `json:"mapping"` + Mappings string `json:"mappings"` } // GetSourceMap returns a struct containing details about @@ -49,24 +51,35 @@ func GetSourceMap(sourceNames []string, offsetToLine map[int]int) SourceMap { } } - // Array where index is the PC and value is the line. - pcToLine := make([]string, maxPC+1) + // Backwards compatibility for `mapping` field. + oldPcToLine := make([]string, maxPC+1) + for pc := range oldPcToLine { + if line, ok := offsetToLine[pc]; ok { + oldPcToLine[pc] = MakeSourceMapLine(0, 0, line, 0) + } else { + oldPcToLine[pc] = "" + } + } + oldEncodedMapping := strings.Join(oldPcToLine, ";") + + // Array where index is the PC and value is the line for `mappings` field. + prevSourceLine := 0 + pcToLine := make([]string, maxPC) for pc := range pcToLine { if line, ok := offsetToLine[pc]; ok { - pcToLine[pc] = MakeSourceMapLine(0, 0, line, 0) + pcToLine[pc] = MakeSourceMapLine(0, 0, line-prevSourceLine, 0) + prevSourceLine = line } else { pcToLine[pc] = "" } } - // Encode the source map into a string - encodedMapping := strings.Join(pcToLine, ";") - return SourceMap{ - Version: sourceMapVersion, - Sources: sourceNames, - Names: []string{}, // TEAL code does not generate any names. - Mapping: encodedMapping, + Version: sourceMapVersion, + Sources: sourceNames, + Names: []string{}, // TEAL code does not generate any names. + Mapping: oldEncodedMapping, + Mappings: strings.Join(pcToLine, ";"), } } diff --git a/data/transactions/logic/sourcemap_test.go b/data/transactions/logic/sourcemap_test.go index 718535ec44..0ada131570 100644 --- a/data/transactions/logic/sourcemap_test.go +++ b/data/transactions/logic/sourcemap_test.go @@ -40,6 +40,7 @@ func TestGetSourceMap(t *testing.T) { a.Equal(sourceNames, actualSourceMap.Sources) a.Equal([]string{}, actualSourceMap.Names) + // Backwards compatibility for `mapping` field: // Check encoding for each line. splitMapping := strings.Split(actualSourceMap.Mapping, ";") for pc := range splitMapping { @@ -49,6 +50,18 @@ func TestGetSourceMap(t *testing.T) { a.Equal("", splitMapping[pc]) } } + + // Check encoding for `mappings` field. + splitMappings := strings.Split(actualSourceMap.Mappings, ";") + prevLine := 0 + for pc := range splitMappings { + if line, ok := offsetToLine[pc]; ok { + a.Equal(MakeSourceMapLine(0, 0, line-prevLine, 0), splitMappings[pc]) + prevLine = line + } else { + a.Equal("", splitMappings[pc]) + } + } } func TestVLQ(t *testing.T) { diff --git a/test/scripts/e2e_subs/tealprogs/quine.map b/test/scripts/e2e_subs/tealprogs/quine.map index 02e426d14b..03d42d04d1 100644 --- a/test/scripts/e2e_subs/tealprogs/quine.map +++ b/test/scripts/e2e_subs/tealprogs/quine.map @@ -1 +1 @@ -{"version":3,"sources":["test/scripts/e2e_subs/tealprogs/quine.teal"],"names":[],"mapping":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AASA;;;AAUA;;;AAWA;AAYA;;AAaA;AAcA;;;AAeA;AAgBA;AAiBA;;AAkBA;;AAmBA;AAoBA;AAqBA"} \ No newline at end of file +{"version":3,"sources":["test/scripts/e2e_subs/tealprogs/quine.teal"],"names":[],"mapping":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AASA;;;AAUA;;;AAWA;AAYA;;AAaA;AAcA;;;AAeA;AAgBA;AAiBA;;AAkBA;;AAmBA;AAoBA;AAqBA","mappings":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;;;AACA;;;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;AACA;;AACA;AACA"} \ No newline at end of file From 464f099fcd9425f24796d7bd5c608420ff89288b Mon Sep 17 00:00:00 2001 From: algochoi <86622919+algochoi@users.noreply.github.com> Date: Wed, 29 Jun 2022 09:10:31 -0400 Subject: [PATCH 2/3] Fix PC offset --- data/transactions/logic/sourcemap.go | 2 +- test/scripts/e2e_subs/tealprogs/quine.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/transactions/logic/sourcemap.go b/data/transactions/logic/sourcemap.go index 6914e5fd94..f060058c32 100644 --- a/data/transactions/logic/sourcemap.go +++ b/data/transactions/logic/sourcemap.go @@ -64,7 +64,7 @@ func GetSourceMap(sourceNames []string, offsetToLine map[int]int) SourceMap { // Array where index is the PC and value is the line for `mappings` field. prevSourceLine := 0 - pcToLine := make([]string, maxPC) + pcToLine := make([]string, maxPC+1) for pc := range pcToLine { if line, ok := offsetToLine[pc]; ok { pcToLine[pc] = MakeSourceMapLine(0, 0, line-prevSourceLine, 0) diff --git a/test/scripts/e2e_subs/tealprogs/quine.map b/test/scripts/e2e_subs/tealprogs/quine.map index 03d42d04d1..c0352395f8 100644 --- a/test/scripts/e2e_subs/tealprogs/quine.map +++ b/test/scripts/e2e_subs/tealprogs/quine.map @@ -1 +1 @@ -{"version":3,"sources":["test/scripts/e2e_subs/tealprogs/quine.teal"],"names":[],"mapping":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AASA;;;AAUA;;;AAWA;AAYA;;AAaA;AAcA;;;AAeA;AAgBA;AAiBA;;AAkBA;;AAmBA;AAoBA;AAqBA","mappings":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;;;AACA;;;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;AACA;;AACA;AACA"} \ No newline at end of file +{"version":3,"sources":["test/scripts/e2e_subs/tealprogs/quine.teal"],"names":[],"mapping":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AASA;;;AAUA;;;AAWA;AAYA;;AAaA;AAcA;;;AAeA;AAgBA;AAiBA;;AAkBA;;AAmBA;AAoBA;AAqBA","mappings":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;;;AACA;;;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;AACA;;AACA;AACA;AACA"} \ No newline at end of file From 0914f8098485526140694c7a4bd0f394766ffd43 Mon Sep 17 00:00:00 2001 From: algochoi <86622919+algochoi@users.noreply.github.com> Date: Wed, 29 Jun 2022 14:15:50 -0400 Subject: [PATCH 3/3] Remove old behavior for mapping field --- data/transactions/logic/sourcemap.go | 20 +++++--------------- data/transactions/logic/sourcemap_test.go | 11 ----------- test/scripts/e2e_subs/tealprogs/quine.map | 2 +- 3 files changed, 6 insertions(+), 27 deletions(-) diff --git a/data/transactions/logic/sourcemap.go b/data/transactions/logic/sourcemap.go index f060058c32..f78a1b88e4 100644 --- a/data/transactions/logic/sourcemap.go +++ b/data/transactions/logic/sourcemap.go @@ -51,17 +51,6 @@ func GetSourceMap(sourceNames []string, offsetToLine map[int]int) SourceMap { } } - // Backwards compatibility for `mapping` field. - oldPcToLine := make([]string, maxPC+1) - for pc := range oldPcToLine { - if line, ok := offsetToLine[pc]; ok { - oldPcToLine[pc] = MakeSourceMapLine(0, 0, line, 0) - } else { - oldPcToLine[pc] = "" - } - } - oldEncodedMapping := strings.Join(oldPcToLine, ";") - // Array where index is the PC and value is the line for `mappings` field. prevSourceLine := 0 pcToLine := make([]string, maxPC+1) @@ -75,10 +64,11 @@ func GetSourceMap(sourceNames []string, offsetToLine map[int]int) SourceMap { } return SourceMap{ - Version: sourceMapVersion, - Sources: sourceNames, - Names: []string{}, // TEAL code does not generate any names. - Mapping: oldEncodedMapping, + Version: sourceMapVersion, + Sources: sourceNames, + Names: []string{}, // TEAL code does not generate any names. + // Mapping is deprecated, and only for backwards compatibility. + Mapping: strings.Join(pcToLine, ";"), Mappings: strings.Join(pcToLine, ";"), } } diff --git a/data/transactions/logic/sourcemap_test.go b/data/transactions/logic/sourcemap_test.go index 0ada131570..7407f39ddd 100644 --- a/data/transactions/logic/sourcemap_test.go +++ b/data/transactions/logic/sourcemap_test.go @@ -40,17 +40,6 @@ func TestGetSourceMap(t *testing.T) { a.Equal(sourceNames, actualSourceMap.Sources) a.Equal([]string{}, actualSourceMap.Names) - // Backwards compatibility for `mapping` field: - // Check encoding for each line. - splitMapping := strings.Split(actualSourceMap.Mapping, ";") - for pc := range splitMapping { - if line, ok := offsetToLine[pc]; ok { - a.Equal(MakeSourceMapLine(0, 0, line, 0), splitMapping[pc]) - } else { - a.Equal("", splitMapping[pc]) - } - } - // Check encoding for `mappings` field. splitMappings := strings.Split(actualSourceMap.Mappings, ";") prevLine := 0 diff --git a/test/scripts/e2e_subs/tealprogs/quine.map b/test/scripts/e2e_subs/tealprogs/quine.map index c0352395f8..a7584274e1 100644 --- a/test/scripts/e2e_subs/tealprogs/quine.map +++ b/test/scripts/e2e_subs/tealprogs/quine.map @@ -1 +1 @@ -{"version":3,"sources":["test/scripts/e2e_subs/tealprogs/quine.teal"],"names":[],"mapping":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA;AASA;;;AAUA;;;AAWA;AAYA;;AAaA;AAcA;;;AAeA;AAgBA;AAiBA;;AAkBA;;AAmBA;AAoBA;AAqBA","mappings":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;;;AACA;;;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;AACA;;AACA;AACA;AACA"} \ No newline at end of file +{"version":3,"sources":["test/scripts/e2e_subs/tealprogs/quine.teal"],"names":[],"mapping":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;;;AACA;;;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;AACA;;AACA;AACA;AACA","mappings":";AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;AACA;;;AACA;;;AACA;AACA;;AACA;AACA;;;AACA;AACA;AACA;;AACA;;AACA;AACA;AACA"} \ No newline at end of file