@@ -56,12 +56,15 @@ func FuzzTranspiling(f *testing.F) {
56
56
// to run, that we report this as problematic.
57
57
doneCh := make (chan bool , 1 )
58
58
readyCh := make (chan bool )
59
+ isGnoTypeCheckError := false
59
60
defer func () {
60
61
goRunErr := checkIfGoCompilesProgram (t , gnoSrc )
61
62
r := recover ()
62
63
if r == nil {
63
64
if goRunErr != nil {
64
- panic (fmt .Sprintf ("Runs alright in Gno but fails in Go:\n %v\n %s" , goRunErr , gnoSrc ))
65
+ if ! isGnoTypeCheckError {
66
+ panic (fmt .Sprintf ("Runs alright in Gno but fails in Go:\n %v\n %s" , goRunErr , gnoSrc ))
67
+ }
65
68
}
66
69
return
67
70
}
@@ -81,6 +84,7 @@ func FuzzTranspiling(f *testing.F) {
81
84
strings .Contains (sr , "not defined in fileset with" ),
82
85
strings .Contains (sr , "literal not terminated" ),
83
86
strings .Contains (sr , "illegal character" ),
87
+ strings .Contains (sr , "expected 1 expression" ),
84
88
strings .Contains (sr , "expected 'IDENT', found " ),
85
89
strings .Contains (sr , "expected declaration, found" ),
86
90
strings .Contains (sr , "expected 'package', found" ),
@@ -99,15 +103,39 @@ func FuzzTranspiling(f *testing.F) {
99
103
strings .Contains (sr , "required in 3-index slice" ),
100
104
strings .Contains (sr , "comment not terminated" ),
101
105
strings .Contains (sr , "missing field" ),
106
+ strings .Contains (sr , "expected operand, found" ),
107
+ strings .Contains (sr , "expected statement, found" ),
108
+ strings .Contains (sr , "m.NumValues <= 0" ),
102
109
strings .Contains (sr , "missing ',' in composite literal" ),
103
110
strings .Contains (sr , "no new variables on left side of" ),
104
111
strings .Contains (sr , "expected boolean or range expression, found assignment (missing parentheses around composite" ),
105
112
strings .Contains (sr , "must separate successive digits" ),
106
113
strings .Contains (sr , "runtime error: invalid memory address" ) && strings .Contains (gnoSrc , " int." ),
107
114
strings .Contains (sr , "expected '{', found " ),
115
+ strings .Contains (sr , "ast.FuncDecl has missing receiver" ),
108
116
strings .Contains (sr , "expected '}', found " ),
117
+ strings .Contains (sr , "dot imports not allowed" ),
109
118
strings .Contains (sr , "expected '(', found " ),
110
119
strings .Contains (sr , "expected ')', found " ),
120
+ strings .Contains (sr , "expected '[', found " ),
121
+ strings .Contains (sr , "expected ']', found " ),
122
+ strings .Contains (sr , "invalid digit" ),
123
+ strings .Contains (sr , "missing ',' before newline in argument list" ),
124
+ strings .Contains (sr , "import path must be a string" ),
125
+ strings .Contains (sr , "cannot indirect" ),
126
+ strings .Contains (sr , "invalid radix point in" ),
127
+ strings .Contains (sr , "invalid column number" ),
128
+ strings .Contains (sr , "unknown Go type *ast.IndexListExpr" ),
129
+ strings .Contains (sr , "expected selector or type assertion" ),
130
+ strings .Contains (sr , "cannot take address of" ),
131
+ strings .Contains (sr , "unexpected selector expression type" ),
132
+ strings .Contains (sr , "hexadecimal mantissa requires a 'p' exponent" ),
133
+ strings .Contains (sr , "invalid operation: operator" ),
134
+ strings .Contains (sr , "operator" ) && strings .Contains (sr , "not defined on" ),
135
+ strings .Contains (sr , "illegal rune literal" ),
136
+ strings .Contains (sr , "DeclaredType method named" ),
137
+ strings .Contains (sr , "unknown Go type *ast.GoStmt" ),
138
+ strings .Contains (sr , "invalid line number" ),
111
139
strings .Contains (sr , "missing ',' before newline in parameter list" ),
112
140
strings .Contains (sr , "expected ';', found " ):
113
141
return
@@ -154,13 +182,18 @@ func FuzzTranspiling(f *testing.F) {
154
182
iavlStore := iavl .StoreConstructor (db , stypes.StoreOptions {})
155
183
store := gnolang .NewStore (nil , baseStore , iavlStore )
156
184
m := gnolang .NewMachine (string (fn .PkgName ), store )
157
- m . RunMemPackage ( & gnovm.MemPackage {
185
+ memPkg := & gnovm.MemPackage {
158
186
Name : string (fn .PkgName ),
159
187
Path : string (fn .Name ),
160
188
Files : []* gnovm.MemFile {
161
189
{Name : "a.gno" , Body : gnoSrc },
162
190
},
163
- }, true )
191
+ }
192
+ if err := gnolang .TypeCheckMemPackage (memPkg , nil , false ); err != nil {
193
+ isGnoTypeCheckError = true
194
+ return
195
+ }
196
+ m .RunMemPackage (memPkg , true )
164
197
})
165
198
}
166
199
0 commit comments