@@ -129,6 +129,20 @@ function loadAssemblyScriptWasm(binaryPath) {
129129 return exports ;
130130}
131131
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+
132146var assemblyscript , __newString , __getString , __pin , __unpin , __collect ;
133147
134148function loadAssemblyScript ( ) {
@@ -702,7 +716,7 @@ exports.main = function main(argv, options, callback) {
702716 } ) ;
703717 }
704718 }
705- var numErrors = checkDiagnostics ( program , stderr ) ;
719+ var numErrors = checkDiagnostics ( program , stderr , options . reportDiagnostic ) ;
706720 if ( numErrors ) {
707721 const err = Error ( numErrors + " parse error(s)" ) ;
708722 err . stack = err . message ; // omit stack
@@ -816,7 +830,7 @@ exports.main = function main(argv, options, callback) {
816830 } ;
817831 }
818832 } ) ;
819- var numErrors = checkDiagnostics ( program , stderr ) ;
833+ var numErrors = checkDiagnostics ( program , stderr , options . reportDiagnostic ) ;
820834 if ( numErrors ) {
821835 if ( module ) module . dispose ( ) ;
822836 const err = Error ( numErrors + " compile error(s)" ) ;
@@ -1155,7 +1169,7 @@ function getAsconfig(file, baseDir, readFile) {
11551169exports . getAsconfig = getAsconfig ;
11561170
11571171/** Checks diagnostics emitted so far for errors. */
1158- function checkDiagnostics ( program , stderr ) {
1172+ function checkDiagnostics ( program , stderr , reportDiagnostic ) {
11591173 var numErrors = 0 ;
11601174 do {
11611175 let diagnosticPtr = assemblyscript . nextDiagnostic ( program ) ;
@@ -1167,6 +1181,33 @@ function checkDiagnostics(program, stderr) {
11671181 EOL + EOL
11681182 ) ;
11691183 }
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+ }
11701211 if ( assemblyscript . isError ( diagnosticPtr ) ) ++ numErrors ;
11711212 __unpin ( diagnosticPtr ) ;
11721213 } while ( true ) ;
0 commit comments