@@ -7,7 +7,6 @@ import be.ugent.topl.mio.debugger.ConstraintParser
77import be.ugent.topl.mio.debugger.Debugger
88import be.ugent.topl.mio.debugger.ExecutionState
99import be.ugent.topl.mio.debugger.MultiverseDebugger
10- import be.ugent.topl.mio.debugger.MultiverseNode
1110import be.ugent.topl.mio.debugger.PrimitiveNode
1211import be.ugent.topl.mio.sourcemap.SourceMap
1312import be.ugent.topl.mio.woodstate.Checkpoint
@@ -479,7 +478,7 @@ interface MultiverseAction {
479478
480479class OverrideAction (val debugger : Debugger , val node : PrimitiveNode , val index : Int ) : MultiverseAction {
481480 override fun doAction () {
482- debugger.addPrimitiveOverride(node.primitive, node.arg.first() , node.values[index])
481+ debugger.addPrimitiveOverride(node.primitive, node.arg, node.values[index])
483482 }
484483
485484}
@@ -638,32 +637,55 @@ class MultiversePanel(private val multiverseDebugger: MultiverseDebugger, config
638637 customButton.addActionListener {
639638 val currentNode = multiverseDebugger.graph.currentNode
640639 val mainPanel = JPanel ()
641- val primitiveNameTextField = JComboBox <String >()
640+ val primitiveSelector = JComboBox <String >()
642641 multiverseDebugger.wasmBinary.metadata.primitive_fidx_mapping.forEach {
643- primitiveNameTextField .addItem(it)
642+ primitiveSelector .addItem(it)
644643 }
645- mainPanel.add(primitiveNameTextField )
644+ mainPanel.add(primitiveSelector )
646645 mainPanel.add(JLabel (" (" ))
647- val argTextField = JTextField ()
648- mainPanel.add(argTextField)
646+ val argBox = Box .createHorizontalBox()
647+ mainPanel.add(argBox)
648+
649+ val argTextFields = mutableListOf<JTextField >()
650+ fun updateArgFields () {
651+ argTextFields.clear()
652+ // TODO: Determine the count based on binary info from WARDuino
653+ val argCount = if (
654+ primitiveSelector.selectedItem.toString() == " display_width" ||
655+ primitiveSelector.selectedItem.toString() == " display_height" ||
656+ primitiveSelector.selectedItem.toString() == " random_int" ) 0 else 1
657+ repeat(argCount) {
658+ argTextFields.add(JTextField ())
659+ }
660+ argBox.removeAll()
661+ for (textField in argTextFields) {
662+ argBox.add(textField)
663+ }
664+ argBox.revalidate()
665+ argBox.repaint()
666+ }
667+ updateArgFields()
668+
649669 mainPanel.add(JLabel (" ) = " ))
650670 val returnValueTextField = JTextField ()
651671 mainPanel.add(returnValueTextField)
652672
653673 if (currentNode is PrimitiveNode ) {
654- argTextField.isEnabled = false
655- argTextField.text = currentNode.arg.toString()
656- primitiveNameTextField.isEnabled = false
657- primitiveNameTextField.selectedItem = currentNode.primitive
674+ for (i in currentNode.arg.indices) {
675+ argTextFields[i].isEnabled = false
676+ argTextFields[i].text = currentNode.arg[i].toString()
677+ }
678+ primitiveSelector.isEnabled = false
679+ primitiveSelector.selectedItem = currentNode.primitive
658680 }
659681
660682 val relations = if (File (DebuggerConfig .configDir + " /program.constraints" ).exists()) ConstraintParser .parseFile(" test.constraints" ) else listOf ()
661683
662684 fun handleRelations () {
663685 returnValueTextField.isEnabled = true
664686 for (relation in relations) {
665- if (primitiveNameTextField .selectedItem == relation.override .primName &&
666- argTextField .text == relation.override .arg.toString()
687+ if (primitiveSelector .selectedItem == relation.override .primName &&
688+ argTextFields[ 0 ] .text == relation.override .arg.toString()
667689 ) {
668690 val state = multiverseDebugger.getCurrentState()
669691 val realValue = state.io!! .find { it.key == relation.io.key }?.value
@@ -676,22 +698,25 @@ class MultiversePanel(private val multiverseDebugger: MultiverseDebugger, config
676698 }
677699
678700 // Re-check relations when changing primitive or argument.
679- primitiveNameTextField .addActionListener {
701+ primitiveSelector .addActionListener {
680702 handleRelations()
703+ updateArgFields()
681704 }
682- argTextField.document.addDocumentListener(object : DocumentListener {
683- override fun insertUpdate (e : DocumentEvent ? ) {
684- handleRelations()
685- }
705+ for (textField in argTextFields) {
706+ textField.document.addDocumentListener(object : DocumentListener {
707+ override fun insertUpdate (e : DocumentEvent ? ) {
708+ handleRelations()
709+ }
686710
687- override fun removeUpdate (e : DocumentEvent ? ) {
688- handleRelations()
689- }
711+ override fun removeUpdate (e : DocumentEvent ? ) {
712+ handleRelations()
713+ }
690714
691- override fun changedUpdate (e : DocumentEvent ? ) {
692- handleRelations()
693- }
694- })
715+ override fun changedUpdate (e : DocumentEvent ? ) {
716+ handleRelations()
717+ }
718+ })
719+ }
695720
696721 val pauseIcon = ImageIcon (javaClass.getResource(" /logo-small.png" ))
697722
@@ -720,10 +745,13 @@ class MultiversePanel(private val multiverseDebugger: MultiverseDebugger, config
720745 dialog.isVisible = true
721746 val x = optionPane.value
722747 if (x == allOptions[1 ]) {
723- val primitiveName = primitiveNameTextField.selectedItem as String
724- val arg = argTextField.text.toInt()
748+ val primitiveName = primitiveSelector.selectedItem as String
749+ val args = mutableListOf<Int >()
750+ for (textField in argTextFields) {
751+ args.add(textField.text.toInt())
752+ }
725753 val returnValue = (returnValueTextField.text as String ).toInt()
726- multiverseDebugger.addPrimitiveOverride(primitiveName, arg , returnValue)
754+ multiverseDebugger.addPrimitiveOverride(primitiveName, args , returnValue)
727755 } else if (x == allOptions[0 ]) {
728756 showPathRangeWindow()
729757 }
@@ -772,7 +800,7 @@ class MultiversePanel(private val multiverseDebugger: MultiverseDebugger, config
772800 mockPanel.clear()
773801 for (primMocks in multiverseDebugger.overrides) {
774802 for (argResultPair in primMocks.value) {
775- mockPanel.addItem(primMocks.key, listOf ( argResultPair.key) , argResultPair.value) {
803+ mockPanel.addItem(primMocks.key, argResultPair.key, argResultPair.value) {
776804 multiverseDebugger.removePrimitiveOverride(primMocks.key, argResultPair.key)
777805 }
778806 }
0 commit comments