From b5ed9db83fbf41b937824795876668fc8d31335a Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Mon, 24 Oct 2016 12:53:56 -0400 Subject: [PATCH] go/gcexportdata: support old export data (again), needed by AE1.6 + test Change-Id: I0842795ece634e4441b17a10009d26bfc2a8481a Reviewed-on: https://go-review.googlesource.com/31818 Reviewed-by: Robert Griesemer --- go/gcexportdata/gcexportdata.go | 8 +++++ go/gcexportdata/gcexportdata_test.go | 41 +++++++++++++++++++++++++ go/gcexportdata/testdata/errors-ae16.a | Bin 0 -> 5494 bytes 3 files changed, 49 insertions(+) create mode 100644 go/gcexportdata/gcexportdata_test.go create mode 100644 go/gcexportdata/testdata/errors-ae16.a diff --git a/go/gcexportdata/gcexportdata.go b/go/gcexportdata/gcexportdata.go index 99d79d81..99a1eca1 100644 --- a/go/gcexportdata/gcexportdata.go +++ b/go/gcexportdata/gcexportdata.go @@ -25,6 +25,7 @@ package gcexportdata // import "golang.org/x/tools/go/gcexportdata" import ( "bufio" + "bytes" "fmt" "go/token" "go/types" @@ -76,6 +77,13 @@ func Read(in io.Reader, fset *token.FileSet, imports map[string]*types.Package, if err != nil { return nil, fmt.Errorf("reading export data for %q: %v", path, err) } + + // The App Engine Go runtime v1.6 uses the old export data format. + // TODO(adonovan): delete once v1.7 has been around for a while. + if bytes.HasPrefix(data, []byte("package ")) { + return gcimporter.ImportData(imports, path, path, bytes.NewReader(data)) + } + _, pkg, err := gcimporter.BImportData(fset, imports, data, path) return pkg, err } diff --git a/go/gcexportdata/gcexportdata_test.go b/go/gcexportdata/gcexportdata_test.go new file mode 100644 index 00000000..69133db9 --- /dev/null +++ b/go/gcexportdata/gcexportdata_test.go @@ -0,0 +1,41 @@ +package gcexportdata_test + +import ( + "go/token" + "go/types" + "log" + "os" + "testing" + + "golang.org/x/tools/go/gcexportdata" +) + +// Test to ensure that gcexportdata can read files produced by App +// Engine Go runtime v1.6. +func TestAppEngine16(t *testing.T) { + // Open and read the file. + f, err := os.Open("testdata/errors-ae16.a") + if err != nil { + t.Fatal(err) + } + defer f.Close() + r, err := gcexportdata.NewReader(f) + if err != nil { + log.Fatalf("reading export data: %v", err) + } + + // Decode the export data. + fset := token.NewFileSet() + imports := make(map[string]*types.Package) + pkg, err := gcexportdata.Read(r, fset, imports, "errors") + if err != nil { + log.Fatal(err) + } + + // Print package information. + got := pkg.Scope().Lookup("New").Type().String() + want := "func(text string) error" + if got != want { + t.Errorf("New.Type = %s, want %s", got, want) + } +} diff --git a/go/gcexportdata/testdata/errors-ae16.a b/go/gcexportdata/testdata/errors-ae16.a new file mode 100644 index 0000000000000000000000000000000000000000..3f1dad54f074503fb14d9ddf702553f41e696a4c GIT binary patch literal 5494 zcmb^#&2QUO{KYL*7D{K0YLsbAUdXDnfM@4BWo*^d4I|K2X*+CEMe8_r8k#1N9(8^@tYXqg z<}w8}V_7*Pl`7=ZYQj*}yro*%v>J^>VzEeFH9%B>&Wc@?;^T-&`COw|w<(Lpl$ZX_gmfoz z#JN>BDbRzBtXIHrm&%od*i;*;g^4Om`ou_4vtdjrYl%d3Lb`-zNO7tl*R`b~B?J~S zZW_QE9YE$wwRySbhM*NA_B|+GseGOVPI{SmMNUTufxsp!#SqyQhMBVoxj%saMQvmF z41q^`Ul)(w`w@3{|BS1@Y0bIVG=6B>S8q{-=E>Moy4jeCg|+5POwu+gv7FXi4C6*w z{{W$6<)+q*yWm&wK>bV0KXpd6jX9v841so9yZbo)$iup|odf1v;#^E@i5z?Olhz!J zY0XM3+&Yw=eM9%Zr}p;teud|FBzzKu67os-1R>*?0CH!x0PNH7Fdi@I%>O&g#;1C)@dQcW&9dO@D-WXw_$(7q55Ely?oZ~*!( zg^p4vO-nf2qGvrBKNe7NiE9Te5+8vgz~FBRkvW9wU0{0G9aR0^0Fo*kVYz0T4F^hc zzFIS!H3u-JX9)?P0+aL=r{*lz=M_a!$x$KL4j-aINEbv*xX*2sNP}LJN8l7ooshxf z)Dx_R$Z_F~S?g+OcIN5`2@5+RB96W-d>;yp5MhMKLPI!92CtWlO3lzKjfW4cR8~o6 zlj)Rcq%#>Mld*D{Tux8rvx;F^X`Og*6(gtXIWwoIc~ws;rfwvXmZ~SzoT|Vk11=Ec zQtfQRHqO$xG~5Lag<>)O)gh>tew)vsOBnO&OR}2e{*Wk6aZ*peMVc zSGivP7bM7S0mwo~3lCj8c=U{Si^rf#zn@1>!%=sU>)^AYmxF~dLdK95x+~ZJ7=#n% z8)Pe?tN}tFfrwyjt09A=RF@p-@$i-fak?lp=>KG>0INl+yxfdO`0ScQCq)j30`kSv8Zcd#c z;c$}23WVOwAc(9$qHT((i;d<491lTn9Cqj4u82dx z+efIy+ybA(*W8q15)*AoR+4Qhlzadf+tSGnK}Zm5R~F|)FxF&!Un%{t{L87ADJ9pA zeG4xkzH)?-7cQY5?se-W1FrPfOUnnX0ts>us|cu`U?3}jeMx==DOR_zC6QrLACzVKWR4?Iwlw)wu3c)C2A`TfGo= z#hG?np{0^SK&H$Ik1~LX z417n}j0YPCc(;w~vD?RfsKeG+o5Z!1$p|_}K_kp2Zbx~!UbCIL?kr-&2)%c^{7HX; zuy1*X2j$OhLq5e{?NA(E$2c8RoYSCcU4b|@#ylbrIk;AKAendA`wPhB7qID>JrSDD zo7~2JR~}Qo_Dk0<9yXut7rLPJQ!8%o>DD)}