import * as Models from "../ivprog_elements"; import { LocalizedStrings } from "../../services/localizedStringsService"; import * as AttribuitionsManagement from "./attribution"; import * as RepeatNTimesManagement from "./repeatNtimes"; export const VAR_OR_VALUE_TYPES = Object.freeze({ only_variable: 1, only_value: 2, only_function: 3, variable_and_function: 4, variable_and_value_opt: 5, value_and_function: 6, all: 7, }); export function renderMenu ( command, ref_object, dom_object, function_obj, size_field = 2, expression_element ) { // Verificar se o objeto atual trata-se de uma chamada de função e conferir se possui a quantidade correta de parâmetros // Caso não possua, tem que adicionar as variáveis que servirão de parâmetros: if (ref_object.function_called) { if (ref_object.function_called.parameters_list) { while ( ref_object.function_called.parameters_list.length != ref_object.parameters_list.length ) { if ( ref_object.parameters_list.length > ref_object.function_called.parameters_list.length ) { ref_object.parameters_list.pop(); } else { ref_object.parameters_list.push( new Models.VariableValueMenu( VAR_OR_VALUE_TYPES.all, null, null, null, true ) ); } } } } // Verificar agora, quando trata-se de chamada de função, se a passagem de parâmetro é // por referência ou por cópia: var index_references = []; if (ref_object.function_called) { if (ref_object.function_called.parameters_list) { for (var i = 0; i < ref_object.function_called.parameters_list.length; i++) { if (ref_object.function_called.parameters_list[i].reference) { index_references.push(i) ref_object.parameters_list[i].reference = true ref_object.parameters_list[i].variable_and_value = VAR_OR_VALUE_TYPES.only_variable; if (ref_object.parameters_list[i].column) ref_object.parameters_list[i].column.reference_parent = true if (ref_object.parameters_list[i].row) ref_object.parameters_list[i].row.reference_parent = true } else { ref_object.parameters_list[i].reference = false; ref_object.parameters_list[i].variable_and_value = VAR_OR_VALUE_TYPES.all; if (ref_object.parameters_list[i].column) ref_object.parameters_list[i].column.reference_parent = false if (ref_object.parameters_list[i].row) ref_object.parameters_list[i].row.reference_parent = false } ref_object.parameters_list[i].reference_dimensions = ref_object.function_called.parameters_list[i].dimensions } } } let menu_var_or_value = '