@@ -23,17 +23,24 @@ function getStringImpl(U32, U16, ptr) {
23
23
function preInstantiate ( imports ) {
24
24
var baseModule = { } ;
25
25
26
- // add the internal abort function that is called when an assertion fails or an error is thrown
27
- if ( ! imports . env ) imports . env = { } ;
28
- if ( ! imports . env . abort ) imports . env . abort = function abort ( mesg , file , line , colm ) {
29
- var memory = baseModule . memory || imports . env . memory ; // prefer exported, otherwise try imported
30
- function getString ( memory , ptr ) {
31
- if ( ! memory ) return "<yet unknown>" ;
32
- var buffer = memory . buffer ;
33
- return getStringImpl ( new Uint32Array ( buffer ) , new Uint16Array ( buffer ) , ptr ) ;
34
- }
26
+ function getString ( memory , ptr ) {
27
+ if ( ! memory ) return "<yet unknown>" ;
28
+ var buffer = memory . buffer ;
29
+ return getStringImpl ( new Uint32Array ( buffer ) , new Uint16Array ( buffer ) , ptr ) ;
30
+ }
31
+
32
+ // add common imports used by stdlib for convenience
33
+ var env = ( imports . env = imports . env || { } ) ;
34
+ env . abort = env . abort || function abort ( mesg , file , line , colm ) {
35
+ var memory = baseModule . memory || env . memory ; // prefer exported, otherwise try imported
35
36
throw Error ( "abort: " + getString ( memory , mesg ) + " at " + getString ( memory , file ) + ":" + line + ":" + colm ) ;
36
37
}
38
+ env . trace = env . trace || function trace ( mesg , n ) {
39
+ var memory = baseModule . memory || env . memory ;
40
+ console . log ( "trace: " + getString ( memory , mesg ) + ( n ? " " : "" ) + Array . prototype . slice . call ( arguments , 2 , 2 + n ) . join ( ", " ) ) ;
41
+ }
42
+ imports . Math = imports . Math || Math ;
43
+ imports . Date = imports . Date || Date ;
37
44
38
45
return baseModule ;
39
46
}
@@ -176,6 +183,10 @@ function postInstantiate(baseModule, instance) {
176
183
177
184
baseModule . getFunction = getFunction ;
178
185
186
+ // Pull basic exports to baseModule so code in preInstantiate can use them
187
+ baseModule . memory = baseModule . memory || memory ;
188
+ baseModule . table = baseModule . table || table ;
189
+
179
190
// Demangle exports and provide the usual utility on the prototype
180
191
return demangle ( rawExports , Object . defineProperties ( baseModule , {
181
192
I8 : { get : function ( ) { checkMem ( ) ; return I8 ; } } ,
0 commit comments