@@ -21,13 +21,14 @@ var kWasmH1 = 0x61;
21
21
var kWasmH2 = 0x73 ;
22
22
var kWasmH3 = 0x6d ;
23
23
24
- var kWasmV0 = 1 ;
24
+ var kWasmV0 = 0x1 ;
25
25
var kWasmV1 = 0 ;
26
26
var kWasmV2 = 0 ;
27
27
var kWasmV3 = 0 ;
28
28
29
29
var kHeaderSize = 8 ;
30
30
var kPageSize = 65536 ;
31
+ var kSpecMaxPages = 65535 ;
31
32
32
33
function bytesWithHeader ( ) {
33
34
var buffer = new ArrayBuffer ( kHeaderSize + arguments . length ) ;
@@ -52,22 +53,27 @@ let kDeclNoLocals = 0;
52
53
53
54
// Section declaration constants
54
55
let kUnknownSectionCode = 0 ;
55
- let kTypeSectionCode = 1 ; // Function signature declarations
56
- let kImportSectionCode = 2 ; // Import declarations
57
- let kFunctionSectionCode = 3 ; // Function declarations
58
- let kTableSectionCode = 4 ; // Indirect function table and other tables
59
- let kMemorySectionCode = 5 ; // Memory attributes
60
- let kGlobalSectionCode = 6 ; // Global declarations
61
- let kExportSectionCode = 7 ; // Exports
62
- let kStartSectionCode = 8 ; // Start function declaration
63
- let kElementSectionCode = 9 ; // Elements section
64
- let kCodeSectionCode = 10 ; // Function code
65
- let kDataSectionCode = 11 ; // Data segments
66
- let kNameSectionCode = 12 ; // Name section (encoded as string)
56
+ let kTypeSectionCode = 1 ; // Function signature declarations
57
+ let kImportSectionCode = 2 ; // Import declarations
58
+ let kFunctionSectionCode = 3 ; // Function declarations
59
+ let kTableSectionCode = 4 ; // Indirect function table and other tables
60
+ let kMemorySectionCode = 5 ; // Memory attributes
61
+ let kGlobalSectionCode = 6 ; // Global declarations
62
+ let kExportSectionCode = 7 ; // Exports
63
+ let kStartSectionCode = 8 ; // Start function declaration
64
+ let kElementSectionCode = 9 ; // Elements section
65
+ let kCodeSectionCode = 10 ; // Function code
66
+ let kDataSectionCode = 11 ; // Data segments
67
+
68
+ // Name section types
69
+ let kModuleNameCode = 0 ;
70
+ let kFunctionNamesCode = 1 ;
71
+ let kLocalNamesCode = 2 ;
67
72
68
73
let kWasmFunctionTypeForm = 0x60 ;
69
74
let kWasmAnyFunctionTypeForm = 0x70 ;
70
75
76
+ let kHasMaximumFlag = 1 ;
71
77
let kResizableMaximumFlag = 1 ;
72
78
73
79
// Function declaration flags
@@ -98,13 +104,15 @@ let kSig_l_l = makeSig([kWasmI64], [kWasmI64]);
98
104
let kSig_i_l = makeSig ( [ kWasmI64 ] , [ kWasmI32 ] ) ;
99
105
let kSig_i_ii = makeSig ( [ kWasmI32 , kWasmI32 ] , [ kWasmI32 ] ) ;
100
106
let kSig_i_iii = makeSig ( [ kWasmI32 , kWasmI32 , kWasmI32 ] , [ kWasmI32 ] ) ;
107
+ let kSig_v_iiii = makeSig ( [ kWasmI32 , kWasmI32 , kWasmI32 , kWasmI32 ] , [ ] ) ;
108
+ let kSig_f_ff = makeSig ( [ kWasmF32 , kWasmF32 ] , [ kWasmF32 ] ) ;
101
109
let kSig_d_dd = makeSig ( [ kWasmF64 , kWasmF64 ] , [ kWasmF64 ] ) ;
102
110
let kSig_l_ll = makeSig ( [ kWasmI64 , kWasmI64 ] , [ kWasmI64 ] ) ;
103
111
let kSig_i_dd = makeSig ( [ kWasmF64 , kWasmF64 ] , [ kWasmI32 ] ) ;
104
112
let kSig_v_v = makeSig ( [ ] , [ ] ) ;
105
113
let kSig_i_v = makeSig ( [ ] , [ kWasmI32 ] ) ;
106
114
let kSig_l_v = makeSig ( [ ] , [ kWasmI64 ] ) ;
107
- let kSig_f_v = makeSig ( [ ] , [ kWasmF64 ] ) ;
115
+ let kSig_f_v = makeSig ( [ ] , [ kWasmF32 ] ) ;
108
116
let kSig_d_v = makeSig ( [ ] , [ kWasmF64 ] ) ;
109
117
let kSig_v_i = makeSig ( [ kWasmI32 ] , [ ] ) ;
110
118
let kSig_v_ii = makeSig ( [ kWasmI32 , kWasmI32 ] , [ ] ) ;
@@ -113,7 +121,11 @@ let kSig_v_l = makeSig([kWasmI64], []);
113
121
let kSig_v_d = makeSig ( [ kWasmF64 ] , [ ] ) ;
114
122
let kSig_v_dd = makeSig ( [ kWasmF64 , kWasmF64 ] , [ ] ) ;
115
123
let kSig_v_ddi = makeSig ( [ kWasmF64 , kWasmF64 , kWasmI32 ] , [ ] ) ;
116
- let kSig_s_v = makeSig ( [ ] , [ kWasmS128 ] ) ;
124
+
125
+ let kSig_v_f = makeSig ( [ kWasmF32 ] , [ ] ) ;
126
+ let kSig_f_f = makeSig ( [ kWasmF32 ] , [ kWasmF32 ] ) ;
127
+ let kSig_f_d = makeSig ( [ kWasmF64 ] , [ kWasmF32 ] ) ;
128
+ let kSig_d_d = makeSig ( [ kWasmF64 ] , [ kWasmF64 ] ) ;
117
129
118
130
function makeSig ( params , results ) {
119
131
return { params : params , results : results } ;
@@ -191,7 +203,7 @@ let kExprI64StoreMem8 = 0x3c;
191
203
let kExprI64StoreMem16 = 0x3d ;
192
204
let kExprI64StoreMem32 = 0x3e ;
193
205
let kExprMemorySize = 0x3f ;
194
- let kExprGrowMemory = 0x40 ;
206
+ let kExprMemoryGrow = 0x40 ;
195
207
let kExprI32Eqz = 0x45 ;
196
208
let kExprI32Eq = 0x46 ;
197
209
let kExprI32Ne = 0x47 ;
@@ -339,36 +351,34 @@ let kTrapMsgs = [
339
351
] ;
340
352
341
353
function assertTraps ( trap , code ) {
342
- var threwException = true ;
343
- try {
344
- if ( typeof code === 'function' ) {
345
- code ( ) ;
346
- } else {
347
- eval ( code ) ;
348
- }
349
- threwException = false ;
350
- } catch ( e ) {
351
- assertEquals ( "object" , typeof e ) ;
352
- assertEquals ( kTrapMsgs [ trap ] , e . message ) ;
353
- // Success.
354
- return ;
354
+ try {
355
+ if ( typeof code === 'function' ) {
356
+ code ( ) ;
357
+ } else {
358
+ eval ( code ) ;
355
359
}
356
- throw new MjsUnitAssertionError ( "Did not trap, expected: " + kTrapMsgs [ trap ] ) ;
360
+ } catch ( e ) {
361
+ assertEquals ( 'object' , typeof e ) ;
362
+ assertEquals ( kTrapMsgs [ trap ] , e . message ) ;
363
+ // Success.
364
+ return ;
365
+ }
366
+ throw new MjsUnitAssertionError ( 'Did not trap, expected: ' + kTrapMsgs [ trap ] ) ;
357
367
}
358
368
359
- function assertWasmThrows ( value , code ) {
360
- assertEquals ( "number" , typeof ( value ) ) ;
361
- try {
362
- if ( typeof code === 'function' ) {
363
- code ( ) ;
364
- } else {
365
- eval ( code ) ;
366
- }
367
- } catch ( e ) {
368
- assertEquals ( "number" , typeof e ) ;
369
- assertEquals ( value , e ) ;
370
- // Success.
371
- return ;
372
- }
373
- throw new MjsUnitAssertionError ( "Did not throw at all, expected: " + value ) ;
369
+ function wasmI32Const ( val ) {
370
+ let bytes = [ kExprI32Const ] ;
371
+ for ( let i = 0 ; i < 4 ; ++ i ) {
372
+ bytes . push ( 0x80 | ( ( val >> ( 7 * i ) ) & 0x7f ) ) ;
373
+ }
374
+ bytes . push ( ( val >> ( 7 * 4 ) ) & 0x7f ) ;
375
+ return bytes ;
376
+ }
377
+
378
+ function wasmF32Const ( f ) {
379
+ return [ kExprF32Const ] . concat ( Array . from ( new Uint8Array ( ( new Float32Array ( [ f ] ) ) . buffer ) ) ) ;
380
+ }
381
+
382
+ function wasmF64Const ( f ) {
383
+ return [ kExprF64Const ] . concat ( Array . from ( new Uint8Array ( ( new Float64Array ( [ f ] ) ) . buffer ) ) ) ;
374
384
}
0 commit comments