@@ -129,6 +129,20 @@ function loadAssemblyScriptWasm(binaryPath) {
129
129
return exports ;
130
130
}
131
131
132
+ /**
133
+ * Wraps object in WASM environment, returns untouched otherwise.
134
+ * @template T
135
+ * @param {number | T } ptrOrObj Pointer in WASM environment, object otherwise
136
+ * @param {typeof T } type Object type that provides wrap method in WASM environment
137
+ * @returns {T | null }
138
+ */
139
+ function __wrap ( ptrOrObj , type ) {
140
+ if ( typeof ptrOrObj === "number" ) {
141
+ return ptrOrObj === 0 ? null : type . wrap ( ptrOrObj ) ;
142
+ }
143
+ return ptrOrObj ;
144
+ }
145
+
132
146
var assemblyscript , __newString , __getString , __pin , __unpin , __collect ;
133
147
134
148
function loadAssemblyScript ( ) {
@@ -702,7 +716,7 @@ exports.main = function main(argv, options, callback) {
702
716
} ) ;
703
717
}
704
718
}
705
- var numErrors = checkDiagnostics ( program , stderr ) ;
719
+ var numErrors = checkDiagnostics ( program , stderr , options . reportDiagnostic ) ;
706
720
if ( numErrors ) {
707
721
const err = Error ( numErrors + " parse error(s)" ) ;
708
722
err . stack = err . message ; // omit stack
@@ -816,7 +830,7 @@ exports.main = function main(argv, options, callback) {
816
830
} ;
817
831
}
818
832
} ) ;
819
- var numErrors = checkDiagnostics ( program , stderr ) ;
833
+ var numErrors = checkDiagnostics ( program , stderr , options . reportDiagnostic ) ;
820
834
if ( numErrors ) {
821
835
if ( module ) module . dispose ( ) ;
822
836
const err = Error ( numErrors + " compile error(s)" ) ;
@@ -1155,7 +1169,7 @@ function getAsconfig(file, baseDir, readFile) {
1155
1169
exports . getAsconfig = getAsconfig ;
1156
1170
1157
1171
/** Checks diagnostics emitted so far for errors. */
1158
- function checkDiagnostics ( program , stderr ) {
1172
+ function checkDiagnostics ( program , stderr , reportDiagnostic ) {
1159
1173
var numErrors = 0 ;
1160
1174
do {
1161
1175
let diagnosticPtr = assemblyscript . nextDiagnostic ( program ) ;
@@ -1167,6 +1181,33 @@ function checkDiagnostics(program, stderr) {
1167
1181
EOL + EOL
1168
1182
) ;
1169
1183
}
1184
+ if ( reportDiagnostic ) {
1185
+ const diagnostic = __wrap ( diagnosticPtr , assemblyscript . DiagnosticMessage ) ;
1186
+ const range = __wrap ( diagnostic . range , assemblyscript . Range ) ;
1187
+ const relatedRange = __wrap ( diagnostic . relatedRange , assemblyscript . Range ) ;
1188
+ const rangeSource = range ? __wrap ( range . source , assemblyscript . Source ) : null ;
1189
+ const relatedRangeSource = relatedRange ? __wrap ( relatedRange . source , assemblyscript . Source ) : null ;
1190
+
1191
+ reportDiagnostic ( {
1192
+ message : __getString ( diagnostic . message ) ,
1193
+ code : diagnostic . code ,
1194
+ category : diagnostic . category ,
1195
+ range : range ? {
1196
+ start : range . start ,
1197
+ end : range . end ,
1198
+ source : rangeSource ? {
1199
+ normalizedPath : __getString ( rangeSource . normalizedPath )
1200
+ } : null ,
1201
+ } : null ,
1202
+ relatedRange : relatedRange ? {
1203
+ start : relatedRange . start ,
1204
+ end : relatedRange . end ,
1205
+ source : relatedRangeSource ? {
1206
+ normalizedPath : __getString ( relatedRangeSource . normalizedPath )
1207
+ } : null
1208
+ } : null
1209
+ } ) ;
1210
+ }
1170
1211
if ( assemblyscript . isError ( diagnosticPtr ) ) ++ numErrors ;
1171
1212
__unpin ( diagnosticPtr ) ;
1172
1213
} while ( true ) ;
0 commit comments