@@ -258,7 +258,12 @@ func makeObjectDestructForOfLoopGenerator(
258258// These insert one or more instructions into a program.
259259//
260260public let CodeGenerators : [ CodeGenerator ] = [
261- // Code generators with useInPrefix: true are used to "bootstrap" code generation by creating some initial variables
261+ //
262+ // Value Generators: Code Generators that generate one or more new values, i.e. they have a `produces` annotation.
263+ //
264+ // These behave like any other CodeGenerator in that they will be randomly chosen to generate code
265+ // and have a weight assigned to them to determine how frequently they are selected, but in addition
266+ // ValueGenerators are also used to "bootstrap" code generation by creating some initial variables
262267 // that following code can then operate on.
263268 //
264269 // These:
@@ -268,19 +273,19 @@ public let CodeGenerators: [CodeGenerator] = [
268273 // - Should generate |n| different values of the same type, but may generate fewer.
269274 // - May be recursive, for example to fill bodies of newly created blocks.
270275 //
271- CodeGenerator ( " IntegerGenerator " , produces: [ . integer] , useInPrefix : true ) { b in
276+ CodeGenerator ( " IntegerGenerator " , produces: [ . integer] ) { b in
272277 b. loadInt ( b. randomInt ( ) )
273278 } ,
274279
275- CodeGenerator ( " BigIntGenerator " , produces: [ . bigint] , useInPrefix : true ) { b in
280+ CodeGenerator ( " BigIntGenerator " , produces: [ . bigint] ) { b in
276281 b. loadBigInt ( b. randomInt ( ) )
277282 } ,
278283
279- CodeGenerator ( " FloatGenerator " , produces: [ . float] , useInPrefix : true ) { b in
284+ CodeGenerator ( " FloatGenerator " , produces: [ . float] ) { b in
280285 b. loadFloat ( b. randomFloat ( ) )
281286 } ,
282287
283- CodeGenerator ( " StringGenerator " , produces: [ . string] , useInPrefix : true ) { b in
288+ CodeGenerator ( " StringGenerator " , produces: [ . string] ) { b in
284289 b. loadString ( b. randomString ( ) )
285290 } ,
286291
@@ -301,22 +306,22 @@ public let CodeGenerators: [CodeGenerator] = [
301306 }
302307 } ,
303308
304- CodeGenerator ( " BooleanGenerator " , produces: [ . boolean] , useInPrefix : true ) { b in
309+ CodeGenerator ( " BooleanGenerator " , produces: [ . boolean] ) { b in
305310 // It's probably not too useful to generate multiple boolean values here.
306311 b. loadBool ( Bool . random ( ) )
307312 } ,
308313
309- CodeGenerator ( " UndefinedGenerator " , produces: [ . undefined] , useInPrefix : true ) { b in
314+ CodeGenerator ( " UndefinedGenerator " , produces: [ . undefined] ) { b in
310315 // There is only one 'undefined' value, so don't generate it multiple times.
311316 b. loadUndefined ( )
312317 } ,
313318
314- CodeGenerator ( " NullGenerator " , produces: [ . undefined] , useInPrefix : true ) { b in
319+ CodeGenerator ( " NullGenerator " , produces: [ . undefined] ) { b in
315320 // There is only one 'null' value, so don't generate it multiple times.
316321 b. loadNull ( )
317322 } ,
318323
319- CodeGenerator ( " ArrayGenerator " , produces: [ . jsArray] , useInPrefix : true ) { b in
324+ CodeGenerator ( " ArrayGenerator " , produces: [ . jsArray] ) { b in
320325 // If we can only generate empty arrays, then only create one such array.
321326 if !b. hasVisibleJsVariables {
322327 b. createArray ( with: [ ] )
@@ -328,12 +333,12 @@ public let CodeGenerators: [CodeGenerator] = [
328333 }
329334 } ,
330335
331- CodeGenerator ( " IntArrayGenerator " , produces: [ . jsArray] , useInPrefix : true ) { b in
336+ CodeGenerator ( " IntArrayGenerator " , produces: [ . jsArray] ) { b in
332337 let values = ( 0 ..< Int . random ( in: 1 ... 10 ) ) . map ( { _ in b. randomInt ( ) } )
333338 b. createIntArray ( with: values)
334339 } ,
335340
336- CodeGenerator ( " FloatArrayGenerator " , produces: [ . jsArray] , useInPrefix : true ) { b in
341+ CodeGenerator ( " FloatArrayGenerator " , produces: [ . jsArray] ) { b in
337342 let values = ( 0 ..< Int . random ( in: 1 ... 10 ) ) . map ( { _ in b. randomFloat ( ) } )
338343 b. createFloatArray ( with: values)
339344 } ,
@@ -381,7 +386,7 @@ public let CodeGenerators: [CodeGenerator] = [
381386 b. callMethod ( transitionMethod, on: Object, withArgs: [ obj] )
382387 } ,
383388
384- CodeGenerator ( " BuiltinObjectInstanceGenerator " , produces: [ . object( ) ] , useInPrefix : true ) {
389+ CodeGenerator ( " BuiltinObjectInstanceGenerator " , produces: [ . object( ) ] ) {
385390 b in
386391 let builtin = chooseUniform ( from: [
387392 " Array " , " Map " , " WeakMap " , " Set " , " WeakSet " , " Date " ,
@@ -438,7 +443,7 @@ public let CodeGenerators: [CodeGenerator] = [
438443 b. constructTemporalDate, b. constructTemporalDateTime, b. constructTemporalZonedDateTime,
439444 ] ) ( )
440445 } ,
441- CodeGenerator ( " TypedArrayGenerator " , produces: [ . object( ) ] , useInPrefix : true ) { b in
446+ CodeGenerator ( " TypedArrayGenerator " , produces: [ . object( ) ] ) { b in
442447 let size = b. loadInt ( b. randomSize ( upTo: 0x1000 ) )
443448 let constructor = b. createNamedVariable (
444449 forBuiltin: chooseUniform (
@@ -614,7 +619,7 @@ public let CodeGenerators: [CodeGenerator] = [
614619 )
615620 } ,
616621
617- CodeGenerator ( " RegExpGenerator " , produces: [ . jsRegExp] , useInPrefix : true ) { b in
622+ CodeGenerator ( " RegExpGenerator " , produces: [ . jsRegExp] ) { b in
618623 let ( regexpPattern, flags) = b. randomRegExpPatternAndFlags ( )
619624 b. loadRegExp ( regexpPattern, flags)
620625 } ,
@@ -658,7 +663,7 @@ public let CodeGenerators: [CodeGenerator] = [
658663 }
659664 } ,
660665
661- CodeGenerator ( " ObjectConstructorGenerator " , produces: [ . constructor( ) ] , useInPrefix : true ) {
666+ CodeGenerator ( " ObjectConstructorGenerator " , produces: [ . constructor( ) ] ) {
662667 b in
663668 let maxProperties = 3
664669 assert ( b. fuzzer. environment. customProperties. count >= maxProperties)
@@ -740,7 +745,7 @@ public let CodeGenerators: [CodeGenerator] = [
740745 ]
741746 ) ,
742747
743- CodeGenerator ( " TrivialFunctionGenerator " , produces: [ . function( ) ] , useInPrefix : true ) { b in
748+ CodeGenerator ( " TrivialFunctionGenerator " , produces: [ . function( ) ] ) { b in
744749 // Generating more than one function has a fairly high probability of generating
745750 // essentially identical functions, so we just generate one.
746751 let maybeReturnValue =
@@ -1603,7 +1608,7 @@ public let CodeGenerators: [CodeGenerator] = [
16031608
16041609 CodeGenerator (
16051610 " StringNormalizeGenerator " ,
1606- produces: [ . jsString] , useInPrefix : true
1611+ produces: [ . jsString]
16071612 ) { b in
16081613 let form = b. loadString (
16091614 chooseUniform (
@@ -3366,8 +3371,7 @@ public let CodeGenerators: [CodeGenerator] = [
33663371 // assert(b.type(of: imitation) == b.type(of: orig))
33673372 } ,
33683373
3369- CodeGenerator ( " ResizableArrayBufferGenerator " , produces: [ . jsArrayBuffer] , useInPrefix: true ) {
3370- b in
3374+ CodeGenerator ( " ResizableArrayBufferGenerator " , produces: [ . jsArrayBuffer] ) { b in
33713375 let size = b. randomSize ( upTo: 0x1000 )
33723376 var maxSize = b. randomSize ( )
33733377 if maxSize < size {
@@ -3392,9 +3396,7 @@ public let CodeGenerators: [CodeGenerator] = [
33923396 b. construct ( View, withArgs: [ ab] )
33933397 } ,
33943398
3395- CodeGenerator (
3396- " GrowableSharedArrayBufferGenerator " , produces: [ . jsSharedArrayBuffer] , useInPrefix: true
3397- ) { b in
3399+ CodeGenerator ( " GrowableSharedArrayBufferGenerator " , produces: [ . jsSharedArrayBuffer] ) { b in
33983400 let size = b. randomSize ( upTo: 0x1000 )
33993401 var maxSize = b. randomSize ( )
34003402 if maxSize < size {
@@ -3467,7 +3469,7 @@ public let CodeGenerators: [CodeGenerator] = [
34673469 }
34683470 } ,
34693471
3470- CodeGenerator ( " IteratorGenerator " , produces: [ . iterable( ) ] , useInPrefix : true ) { b in
3472+ CodeGenerator ( " IteratorGenerator " , produces: [ . iterable( ) ] ) { b in
34713473 let iteratorSymbol = b. createSymbolProperty ( " iterator " )
34723474 b. hide ( iteratorSymbol)
34733475 let iterableObject = b. buildObjectLiteral { obj in
@@ -3494,7 +3496,7 @@ public let CodeGenerators: [CodeGenerator] = [
34943496 b. setType ( ofVariable: iterableObject, to: . iterable( ) + . object( ) )
34953497 } ,
34963498
3497- CodeGenerator ( " DisposableGenerator " , produces: [ . disposable( ) ] , useInPrefix : true ) { b in
3499+ CodeGenerator ( " DisposableGenerator " , produces: [ . disposable( ) ] ) { b in
34983500 let disposeSymbol = b. createSymbolProperty ( " dispose " )
34993501 b. hide ( disposeSymbol)
35003502 b. buildObjectLiteral { obj in
@@ -3503,8 +3505,7 @@ public let CodeGenerators: [CodeGenerator] = [
35033505 }
35043506 } ,
35053507
3506- CodeGenerator ( " AsyncDisposableGenerator " , produces: [ . asyncDisposable( ) ] , useInPrefix: true ) {
3507- b in
3508+ CodeGenerator ( " AsyncDisposableGenerator " , produces: [ . asyncDisposable( ) ] ) { b in
35083509 let asyncDisposeSymbol = b. createSymbolProperty ( " asyncDispose " )
35093510 b. hide ( asyncDisposeSymbol)
35103511 b. buildObjectLiteral { obj in
0 commit comments