genish.js
Version:
81 lines (61 loc) • 1.93 kB
JavaScript
let gen = require( './gen.js' )
let proto = {
basename:'ifelse',
gen() {
let conditionals = this.inputs[0],
defaultValue = gen.getInput( conditionals[ conditionals.length - 1] ),
out = ` var ${this.name}_out = ${defaultValue}\n`
//console.log( 'conditionals:', this.name, conditionals )
//console.log( 'defaultValue:', defaultValue )
for( let i = 0; i < conditionals.length - 2; i+= 2 ) {
let isEndBlock = i === conditionals.length - 3,
cond = gen.getInput( conditionals[ i ] ),
preblock = conditionals[ i+1 ],
block, blockName, output
//console.log( 'pb', preblock )
if( typeof preblock === 'number' ){
block = preblock
blockName = null
}else{
if( gen.memo[ preblock.name ] === undefined ) {
// used to place all code dependencies in appropriate blocks
gen.startLocalize()
gen.getInput( preblock )
block = gen.endLocalize()
blockName = block[0]
block = block[ 1 ].join('')
block = ' ' + block.replace( /\n/gi, '\n ' )
}else{
block = ''
blockName = gen.memo[ preblock.name ]
}
}
output = blockName === null ?
` ${this.name}_out = ${block}` :
`${block} ${this.name}_out = ${blockName}`
if( i===0 ) out += ' '
out +=
` if( ${cond} === 1 ) {
${output}
}`
if( !isEndBlock ) {
out += ` else`
}else{
out += `\n`
}
}
gen.memo[ this.name ] = `${this.name}_out`
return [ `${this.name}_out`, out ]
}
}
module.exports = ( ...args ) => {
let ugen = Object.create( proto ),
conditions = Array.isArray( args[0] ) ? args[0] : args
Object.assign( ugen, {
uid: gen.getUID(),
inputs: [ conditions ],
})
ugen.name = `${ugen.basename}${ugen.uid}`
return ugen
}