@@ -181,6 +181,7 @@ exports.main = function main(argv, options, callback) {
181
181
stdout . write ( "Version " + exports . version + ( isDev ? "-dev" : "" ) + EOL ) ;
182
182
return callback ( null ) ;
183
183
}
184
+
184
185
// Print the help message if requested or no source files are provided
185
186
if ( args . help || ! argv . length ) {
186
187
var out = args . help ? stdout : stderr ;
@@ -211,6 +212,77 @@ exports.main = function main(argv, options, callback) {
211
212
// Set up base directory
212
213
const baseDir = args . baseDir ? path . resolve ( args . baseDir ) : "." ;
213
214
215
+ // Set up options
216
+ const compilerOptions = assemblyscript . newOptions ( ) ;
217
+ assemblyscript . setTarget ( compilerOptions , 0 ) ;
218
+ assemblyscript . setNoAssert ( compilerOptions , args . noAssert ) ;
219
+ assemblyscript . setImportMemory ( compilerOptions , args . importMemory ) ;
220
+ assemblyscript . setSharedMemory ( compilerOptions , args . sharedMemory ) ;
221
+ assemblyscript . setImportTable ( compilerOptions , args . importTable ) ;
222
+ assemblyscript . setExplicitStart ( compilerOptions , args . explicitStart ) ;
223
+ assemblyscript . setMemoryBase ( compilerOptions , args . memoryBase >>> 0 ) ;
224
+ assemblyscript . setSourceMap ( compilerOptions , args . sourceMap != null ) ;
225
+ assemblyscript . setNoUnsafe ( compilerOptions , args . noUnsafe ) ;
226
+
227
+ // Initialize default aliases
228
+ assemblyscript . setGlobalAlias ( compilerOptions , "Math" , "NativeMath" ) ;
229
+ assemblyscript . setGlobalAlias ( compilerOptions , "Mathf" , "NativeMathf" ) ;
230
+ assemblyscript . setGlobalAlias ( compilerOptions , "abort" , "~lib/builtins/abort" ) ;
231
+ assemblyscript . setGlobalAlias ( compilerOptions , "trace" , "~lib/builtins/trace" ) ;
232
+
233
+ // Add or override aliases if specified
234
+ if ( args . use ) {
235
+ let aliases = args . use ;
236
+ for ( let i = 0 , k = aliases . length ; i < k ; ++ i ) {
237
+ let part = aliases [ i ] ;
238
+ let p = part . indexOf ( "=" ) ;
239
+ if ( p < 0 ) return callback ( Error ( "Global alias '" + part + "' is invalid." ) ) ;
240
+ let alias = part . substring ( 0 , p ) . trim ( ) ;
241
+ let name = part . substring ( p + 1 ) . trim ( ) ;
242
+ if ( ! alias . length ) return callback ( Error ( "Global alias '" + part + "' is invalid." ) ) ;
243
+ assemblyscript . setGlobalAlias ( compilerOptions , alias , name ) ;
244
+ }
245
+ }
246
+
247
+ // Disable default features if specified
248
+ var features ;
249
+ if ( ( features = args . disable ) != null ) {
250
+ if ( typeof features === "string" ) features = features . split ( "," ) ;
251
+ for ( let i = 0 , k = features . length ; i < k ; ++ i ) {
252
+ let name = features [ i ] . trim ( ) ;
253
+ let flag = assemblyscript [ "FEATURE_" + name . replace ( / \- / g, "_" ) . toUpperCase ( ) ] ;
254
+ if ( ! flag ) return callback ( Error ( "Feature '" + name + "' is unknown." ) ) ;
255
+ assemblyscript . disableFeature ( compilerOptions , flag ) ;
256
+ }
257
+ }
258
+
259
+ // Enable experimental features if specified
260
+ if ( ( features = args . enable ) != null ) {
261
+ if ( typeof features === "string" ) features = features . split ( "," ) ;
262
+ for ( let i = 0 , k = features . length ; i < k ; ++ i ) {
263
+ let name = features [ i ] . trim ( ) ;
264
+ let flag = assemblyscript [ "FEATURE_" + name . replace ( / \- / g, "_" ) . toUpperCase ( ) ] ;
265
+ if ( ! flag ) return callback ( Error ( "Feature '" + name + "' is unknown." ) ) ;
266
+ assemblyscript . enableFeature ( compilerOptions , flag ) ;
267
+ }
268
+ }
269
+
270
+ // Set up optimization levels
271
+ var optimizeLevel = 0 ;
272
+ var shrinkLevel = 0 ;
273
+ if ( args . optimize ) {
274
+ optimizeLevel = exports . defaultOptimizeLevel ;
275
+ shrinkLevel = exports . defaultShrinkLevel ;
276
+ }
277
+ if ( typeof args . optimizeLevel === "number" ) optimizeLevel = args . optimizeLevel ;
278
+ if ( typeof args . shrinkLevel === "number" ) shrinkLevel = args . shrinkLevel ;
279
+ optimizeLevel = Math . min ( Math . max ( optimizeLevel , 0 ) , 3 ) ;
280
+ shrinkLevel = Math . min ( Math . max ( shrinkLevel , 0 ) , 2 ) ;
281
+ assemblyscript . setOptimizeLevelHints ( compilerOptions , optimizeLevel , shrinkLevel ) ;
282
+
283
+ // Initialize the program
284
+ const program = assemblyscript . newProgram ( compilerOptions ) ;
285
+
214
286
// Set up transforms
215
287
const transforms = [ ] ;
216
288
if ( args . transform ) {
@@ -222,6 +294,7 @@ exports.main = function main(argv, options, callback) {
222
294
const classOrModule = require ( require . resolve ( filename , { paths : [ baseDir , process . cwd ( ) ] } ) ) ;
223
295
if ( typeof classOrModule === "function" ) {
224
296
Object . assign ( classOrModule . prototype , {
297
+ program,
225
298
baseDir,
226
299
stdout,
227
300
stderr,
@@ -252,15 +325,12 @@ exports.main = function main(argv, options, callback) {
252
325
}
253
326
}
254
327
255
- // Begin parsing
256
- var parser = null ;
257
-
258
- // Include library files
328
+ // Parse library files
259
329
Object . keys ( exports . libraryFiles ) . forEach ( libPath => {
260
330
if ( libPath . indexOf ( "/" ) >= 0 ) return ; // in sub-directory: imported on demand
261
331
stats . parseCount ++ ;
262
332
stats . parseTime += measure ( ( ) => {
263
- parser = assemblyscript . parseFile ( exports . libraryFiles [ libPath ] , exports . libraryPrefix + libPath + ".ts" , false , parser ) ;
333
+ assemblyscript . parse ( program , exports . libraryFiles [ libPath ] , exports . libraryPrefix + libPath + ".ts" , false ) ;
264
334
} ) ;
265
335
} ) ;
266
336
const customLibDirs = [ ] ;
@@ -284,7 +354,7 @@ exports.main = function main(argv, options, callback) {
284
354
stats . parseCount ++ ;
285
355
exports . libraryFiles [ libPath . replace ( / \. t s $ / , "" ) ] = libText ;
286
356
stats . parseTime += measure ( ( ) => {
287
- parser = assemblyscript . parseFile ( libText , exports . libraryPrefix + libPath , false , parser ) ;
357
+ assemblyscript . parse ( program , libText , exports . libraryPrefix + libPath , false ) ;
288
358
} ) ;
289
359
}
290
360
}
@@ -393,15 +463,15 @@ exports.main = function main(argv, options, callback) {
393
463
// Parses the backlog of imported files after including entry files
394
464
function parseBacklog ( ) {
395
465
var internalPath ;
396
- while ( ( internalPath = parser . nextFile ( ) ) != null ) {
397
- let file = getFile ( internalPath , assemblyscript . getDependee ( parser , internalPath ) ) ;
466
+ while ( ( internalPath = assemblyscript . nextFile ( program ) ) != null ) {
467
+ let file = getFile ( internalPath , assemblyscript . getDependee ( program , internalPath ) ) ;
398
468
if ( ! file ) return callback ( Error ( "Import file '" + internalPath + ".ts' not found." ) )
399
469
stats . parseCount ++ ;
400
470
stats . parseTime += measure ( ( ) => {
401
- assemblyscript . parseFile ( file . sourceText , file . sourcePath , false , parser ) ;
471
+ assemblyscript . parse ( program , file . sourceText , file . sourcePath , false ) ;
402
472
} ) ;
403
473
}
404
- if ( checkDiagnostics ( parser , stderr ) ) return callback ( Error ( "Parse error" ) ) ;
474
+ if ( checkDiagnostics ( program , stderr ) ) return callback ( Error ( "Parse error" ) ) ;
405
475
}
406
476
407
477
// Include runtime template before entry files so its setup runs first
@@ -418,7 +488,7 @@ exports.main = function main(argv, options, callback) {
418
488
}
419
489
stats . parseCount ++ ;
420
490
stats . parseTime += measure ( ( ) => {
421
- parser = assemblyscript . parseFile ( runtimeText , runtimePath , true , parser ) ;
491
+ assemblyscript . parse ( program , runtimeText , runtimePath , true ) ;
422
492
} ) ;
423
493
}
424
494
@@ -442,7 +512,7 @@ exports.main = function main(argv, options, callback) {
442
512
443
513
stats . parseCount ++ ;
444
514
stats . parseTime += measure ( ( ) => {
445
- parser = assemblyscript . parseFile ( sourceText , sourcePath , true , parser ) ;
515
+ assemblyscript . parse ( program , sourceText , sourcePath , true ) ;
446
516
} ) ;
447
517
}
448
518
@@ -454,7 +524,7 @@ exports.main = function main(argv, options, callback) {
454
524
455
525
// Call afterParse transform hook
456
526
{
457
- let error = applyTransform ( "afterParse" , parser ) ;
527
+ let error = applyTransform ( "afterParse" , program . parser ) ;
458
528
if ( error ) return callback ( error ) ;
459
529
}
460
530
@@ -464,9 +534,6 @@ exports.main = function main(argv, options, callback) {
464
534
if ( code ) return code ;
465
535
}
466
536
467
- // Finish parsing
468
- const program = assemblyscript . finishParsing ( parser ) ;
469
-
470
537
// Print files and exit if listFiles
471
538
if ( args . listFiles ) {
472
539
// FIXME: not a proper C-like API
@@ -490,72 +557,16 @@ exports.main = function main(argv, options, callback) {
490
557
optimizeLevel = Math . min ( Math . max ( optimizeLevel , 0 ) , 3 ) ;
491
558
shrinkLevel = Math . min ( Math . max ( shrinkLevel , 0 ) , 2 ) ;
492
559
493
- // Begin compilation
494
- const compilerOptions = assemblyscript . createOptions ( ) ;
495
- assemblyscript . setTarget ( compilerOptions , 0 ) ;
496
- assemblyscript . setNoAssert ( compilerOptions , args . noAssert ) ;
497
- assemblyscript . setImportMemory ( compilerOptions , args . importMemory ) ;
498
- assemblyscript . setSharedMemory ( compilerOptions , args . sharedMemory ) ;
499
- assemblyscript . setImportTable ( compilerOptions , args . importTable ) ;
500
- assemblyscript . setExplicitStart ( compilerOptions , args . explicitStart ) ;
501
- assemblyscript . setMemoryBase ( compilerOptions , args . memoryBase >>> 0 ) ;
502
- assemblyscript . setSourceMap ( compilerOptions , args . sourceMap != null ) ;
503
- assemblyscript . setOptimizeLevelHints ( compilerOptions , optimizeLevel , shrinkLevel ) ;
504
- assemblyscript . setNoUnsafe ( compilerOptions , args . noUnsafe ) ;
505
-
506
- // Initialize default aliases
507
- assemblyscript . setGlobalAlias ( compilerOptions , "Math" , "NativeMath" ) ;
508
- assemblyscript . setGlobalAlias ( compilerOptions , "Mathf" , "NativeMathf" ) ;
509
- assemblyscript . setGlobalAlias ( compilerOptions , "abort" , "~lib/builtins/abort" ) ;
510
- assemblyscript . setGlobalAlias ( compilerOptions , "trace" , "~lib/builtins/trace" ) ;
511
-
512
- // Add or override aliases if specified
513
- if ( args . use ) {
514
- let aliases = args . use ;
515
- for ( let i = 0 , k = aliases . length ; i < k ; ++ i ) {
516
- let part = aliases [ i ] ;
517
- let p = part . indexOf ( "=" ) ;
518
- if ( p < 0 ) return callback ( Error ( "Global alias '" + part + "' is invalid." ) ) ;
519
- let alias = part . substring ( 0 , p ) . trim ( ) ;
520
- let name = part . substring ( p + 1 ) . trim ( ) ;
521
- if ( ! alias . length ) return callback ( Error ( "Global alias '" + part + "' is invalid." ) ) ;
522
- assemblyscript . setGlobalAlias ( compilerOptions , alias , name ) ;
523
- }
524
- }
525
-
526
- // Disable default features if specified
527
- var features ;
528
- if ( ( features = args . disable ) != null ) {
529
- if ( typeof features === "string" ) features = features . split ( "," ) ;
530
- for ( let i = 0 , k = features . length ; i < k ; ++ i ) {
531
- let name = features [ i ] . trim ( ) ;
532
- let flag = assemblyscript [ "FEATURE_" + name . replace ( / \- / g, "_" ) . toUpperCase ( ) ] ;
533
- if ( ! flag ) return callback ( Error ( "Feature '" + name + "' is unknown." ) ) ;
534
- assemblyscript . disableFeature ( compilerOptions , flag ) ;
535
- }
536
- }
537
-
538
- // Enable experimental features if specified
539
- if ( ( features = args . enable ) != null ) {
540
- if ( typeof features === "string" ) features = features . split ( "," ) ;
541
- for ( let i = 0 , k = features . length ; i < k ; ++ i ) {
542
- let name = features [ i ] . trim ( ) ;
543
- let flag = assemblyscript [ "FEATURE_" + name . replace ( / \- / g, "_" ) . toUpperCase ( ) ] ;
544
- if ( ! flag ) return callback ( Error ( "Feature '" + name + "' is unknown." ) ) ;
545
- assemblyscript . enableFeature ( compilerOptions , flag ) ;
546
- }
547
- }
548
-
549
560
var module ;
550
561
stats . compileCount ++ ;
551
562
try {
552
563
stats . compileTime += measure ( ( ) => {
553
- module = assemblyscript . compileProgram ( program , compilerOptions ) ;
564
+ module = assemblyscript . compile ( program ) ;
554
565
} ) ;
555
566
} catch ( e ) {
556
567
return callback ( e ) ;
557
568
}
558
- if ( checkDiagnostics ( parser , stderr ) ) {
569
+ if ( checkDiagnostics ( program , stderr ) ) {
559
570
if ( module ) module . dispose ( ) ;
560
571
return callback ( Error ( "Compile error" ) ) ;
561
572
}
@@ -944,10 +955,10 @@ exports.main = function main(argv, options, callback) {
944
955
}
945
956
946
957
/** Checks diagnostics emitted so far for errors. */
947
- function checkDiagnostics ( emitter , stderr ) {
958
+ function checkDiagnostics ( program , stderr ) {
948
959
var diagnostic ;
949
960
var hasErrors = false ;
950
- while ( ( diagnostic = assemblyscript . nextDiagnostic ( emitter ) ) != null ) {
961
+ while ( ( diagnostic = assemblyscript . nextDiagnostic ( program ) ) != null ) {
951
962
if ( stderr ) {
952
963
stderr . write (
953
964
assemblyscript . formatDiagnostic ( diagnostic , stderr . isTTY , true ) +
0 commit comments