public void Set_Value(numbers.value value_index, numbers.value v) { if (!numbers_pkg.is_integer(value_index)) { throw new Exception(numbers_pkg.msstring_image(value_index) + " is not a valid array index."); } int index = numbers_pkg.integer_of(value_index); if (index > values.Count) { for (int i = values.Count; i <= index - 1; i++) { values.Add(numbers_pkg.make_value__2(0.0)); } } try { values[index - 1] = v._deep_clone(); } catch { System.Exception f = new System.Exception("can't do array assign to: " + (index - 1)); throw f; } }
public static void Set_Value_String( numbers.value s, numbers.value value_index, numbers.value v) { if (!numbers_pkg.is_integer(value_index)) { throw new Exception(numbers_pkg.msstring_image(value_index) + " is not a valid string index."); } int index = numbers_pkg.integer_of(value_index); if (index > s.s.Length) { s.s = s.s + new String(' ', index - s.s.Length - 1) + (char)numbers_pkg.integer_of(v); } else { s.s = s.s.Remove(index - 1, 1) .Insert(index - 1, "" + (char)numbers_pkg.integer_of(v)); } }
public void Set_Value(numbers.value value_index1, numbers.value value_index2, numbers.value v) { if (!numbers_pkg.is_integer(value_index1)) { throw new Exception(numbers_pkg.msstring_image(value_index1) + " is not a valid array index."); } if (!numbers_pkg.is_integer(value_index2)) { throw new Exception(numbers_pkg.msstring_image(value_index2) + " is not a valid array index."); } int index1 = numbers_pkg.integer_of(value_index1); int index2 = numbers_pkg.integer_of(value_index2); int num_rows = values.Count; int num_cols = 0; if (num_rows > 0) { num_cols = ((System.Collections.ArrayList)values[0]).Count; } // add rows as needed if (index1 > num_rows) { for (int i = num_rows; i <= index1 - 1; i++) { values.Add(new System.Collections.ArrayList()); for (int j = 0; j < num_cols; j++) { ((System.Collections.ArrayList)values[i]).Add(numbers_pkg.make_value__2(0.0)); } } num_rows = index1; } // add columns as needed if (index2 > num_cols) { for (int i = 0; i < num_rows; i++) { for (int j = num_cols; j <= index2 - 1; j++) { ((System.Collections.ArrayList)values[i]).Add(numbers_pkg.make_value__2(0.0)); } } } try { ((System.Collections.ArrayList)values[index1 - 1])[index2 - 1] = v._deep_clone(); } catch { System.Exception f = new System.Exception("can't do 2D assign to: " + (index1 - 1) + "," + (index2 - 1)); throw f; } }
public numbers.value Get_Value(numbers.value value_index) { if (!numbers_pkg.is_integer(value_index)) { throw new Exception(numbers_pkg.msstring_image(value_index) + " is not a valid array index."); } int index = numbers_pkg.integer_of(value_index); return((numbers.value)values[index - 1]); }
public static numbers.value Get_Value_String( numbers.value s, numbers.value value_index) { if (!numbers_pkg.is_integer(value_index)) { throw new Exception(numbers_pkg.msstring_image(value_index) + " is not a valid string index."); } int index = numbers_pkg.integer_of(value_index); char c = s.s[index - 1]; return(numbers_pkg.make_value__4(c)); }
public numbers.value Get_Value(numbers.value value_index1, numbers.value value_index2) { if (!numbers_pkg.is_integer(value_index1)) { throw new Exception(numbers_pkg.msstring_image(value_index1) + " is not a valid array index."); } if (!numbers_pkg.is_integer(value_index2)) { throw new Exception(numbers_pkg.msstring_image(value_index2) + " is not a valid array index."); } int index1 = numbers_pkg.integer_of(value_index1); int index2 = numbers_pkg.integer_of(value_index2); return((numbers.value)((System.Collections.ArrayList)values[index1 - 1])[index2 - 1]); }
internal void addValue(numbers.value v) { values.Add(v); }
internal static Component Step_Once(Component currentObj, Visual_Flow_Form form) { Component next; if (currentObj.need_to_decrease_scope) { Runtime.Decrease_Scope(); currentObj.need_to_decrease_scope = false; if (parse_tree_pkg.did_function_call) { if (Runtime.method_return_value != null) { currentObj.values.Add(Runtime.method_return_value); } Runtime.method_return_value = null; } } while (currentObj.number_method_expressions_run < currentObj.method_expressions.Count) { CallStack.Push(currentObj, (Subchart)form.running_tab); Step_Helpers.Set_State_Entering(); bool b = interpreter_pkg.run_expon( currentObj.method_expressions[currentObj.number_method_expressions_run] as parse_tree.expon, currentObj.Text, currentObj); currentObj.number_method_expressions_run++; if (b) { currentObj.need_to_decrease_scope = true; form.Possible_Tab_Update(form.running_tab); form.currentObj = ((Subchart)form.running_tab).Start; form.currentObj.running = true; return(form.currentObj); } else { CallStack.Pop(); } } if (currentObj.Name == "Oval") { if (currentObj.Successor != null) { next = currentObj.Successor.First_Of(); next.reset_this_method_expressions_run(); return(next); } else { return(null); } } else if (currentObj.Name == "Return") { numbers.value v = interpreter_pkg.run_return_value(currentObj.parse_tree, currentObj.Text); Runtime.method_return_value = v; return(null); } else if (currentObj.Name == "Rectangle") { // when running belownormal, upgrade priority to close graphics window if (currentObj.Text.ToLower() == "close_graph_window") { System.Threading.ThreadPriority p = System.Threading.Thread.CurrentThread.Priority; System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.AboveNormal; interpreter_pkg.run_assignment(currentObj.parse_tree, currentObj.Text); System.Threading.Thread.CurrentThread.Priority = p; } else { interpreter_pkg.run_assignment(currentObj.parse_tree, currentObj.Text); } next = Find_Successor(currentObj); next.reset_this_method_expressions_run(); return(next); } else if (currentObj.Name == "IF_Control") { bool choice = interpreter_pkg.run_boolean( currentObj.parse_tree, currentObj.Text); if (choice == true) { // go to left child if possible, otherwise // go to the successor of the if if (((IF_Control)currentObj).yes_child != null) { next = ((IF_Control)currentObj). yes_child.First_Of(); next.reset_this_method_expressions_run(); return(next); } else { next = Find_Successor(currentObj); next.reset_this_method_expressions_run(); return(next); } } else { if (((IF_Control)currentObj).no_child != null) { next = ((IF_Control)currentObj). no_child.First_Of(); next.reset_this_method_expressions_run(); return(next); } else { next = Find_Successor(currentObj); next.reset_this_method_expressions_run(); return(next); } } } else if (currentObj.Name == "Parallelogram") { if (((Parallelogram)currentObj).is_input) { interpreter_pkg.run_input(currentObj.parse_tree, currentObj.Text, ((Parallelogram)currentObj).prompt, ((Parallelogram)currentObj).input_is_expression, ((Parallelogram)currentObj).prompt_tree); } else { interpreter_pkg.run_output(currentObj.parse_tree, currentObj.Text); } next = Find_Successor(currentObj); next.reset_this_method_expressions_run(); return(next); } else if ((currentObj.Name == "Loop") && (((Loop)currentObj).light_head)) { ((Loop)currentObj).light_head = false; if (((Loop)currentObj).before_Child != null) { next = ((Loop)currentObj).before_Child.First_Of(); next.reset_this_method_expressions_run(); return(next); } else { return(currentObj); } } else if (currentObj.Name == "Loop") { bool choice = interpreter_pkg.run_boolean( currentObj.parse_tree, currentObj.Text); // keep going on yes if loop logic reversed, no if not if ((!choice && !Component.reverse_loop_logic) || (choice && Component.reverse_loop_logic)) { // on false, go to first of after_child if // we can, otherwise back to the top of the loop! if (((Loop)currentObj).after_Child != null) { next = ((Loop)currentObj).after_Child.First_Of(); next.reset_this_method_expressions_run(); return(next); } else { next = currentObj.First_Of(); next.reset_this_method_expressions_run(); return(next); } } else { // on true, go to successor of loop next = Find_Successor(currentObj); next.reset_this_method_expressions_run(); return(next); } } else { throw new System.Exception("unrecognized object: " + currentObj.Name); } }
private static void Invoke_Tab_Procedure_Enter( parse_tree.parameter_list parameters, Procedure_Chart chart, Runtime.Variable this_value) { parse_tree.parameter_list walk; int num_parameters = chart.num_params; numbers.value[] the_values = new numbers.value[num_parameters]; //string[] param_strings = new string[num_parameters]; bool[] is_array = new bool[num_parameters]; bool[] is_2d_array = new bool[num_parameters]; object[] array_values = new object[num_parameters]; int call_site_param_count = 0; // count the parameters walk = parameters; while (walk != null) { call_site_param_count++; walk = walk.next; } // start walk at beginning again walk = parameters; if (call_site_param_count != num_parameters) { string paramstr, verb; if (num_parameters != 1) { paramstr = "parameters"; } else { paramstr = "parameter"; } if (call_site_param_count != 1) { verb = "were"; } else { verb = "was"; } throw new System.Exception(chart.Text + " requires " + num_parameters + " " + paramstr + " but " + call_site_param_count + " " + verb + " provided."); } for (int i = 0; i < num_parameters; i++) { if (chart.is_input_parameter(i)) { try { raptor.Runtime.processing_parameter_list = true; the_values[i] = ((parse_tree.expr_output) walk.parameter).expr.execute(); } catch { raptor.Runtime.processing_parameter_list = false; throw; } raptor.Runtime.processing_parameter_list = false; if (numbers_pkg.is_ref_1d(the_values[i])) { is_array[i] = true; is_2d_array[i] = false; array_values[i] = Runtime.getValueArray( numbers_pkg.object_of(the_values[i]) as Runtime.Variable); } else if (numbers_pkg.is_ref_2d(the_values[i])) { is_array[i] = false; is_2d_array[i] = true; array_values[i] = Runtime.get2DValueArray( numbers_pkg.object_of(the_values[i]) as Runtime.Variable); } else { is_array[i] = false; is_2d_array[i] = false; } } walk = walk.next; } Runtime.Increase_Scope(chart.Text); if (this_value != null) { if (chart.method.IsStatic) { if (this_value.Kind != Runtime.Variable_Kind.Class_Value) { throw new System.Exception("can't call static method " + chart.Text + " with object"); } } else if (this_value.Kind == Runtime.Variable_Kind.Heap_Object) { Runtime.setVariable("this", this_value.Variable_Value); } else { throw new System.Exception("can't call dispatching method " + chart.Text + " without object"); } } for (int i = 0; i < num_parameters; i++) { if (chart.is_input_parameter(i)) { if (is_array[i]) { numbers.value[] values = array_values[i] as numbers.value[]; for (int ind1 = values.Length - 1; ind1 >= 0; ind1--) { Runtime.setArrayElement(chart.parameter_name(i), ind1 + 1, values[ind1]); } } else if (is_2d_array[i]) { numbers.value[][] values = array_values[i] as numbers.value[][]; for (int ind1 = values.Length - 1; ind1 >= 0; ind1--) { for (int ind2 = values[0].Length - 1; ind2 >= 0; ind2--) { Runtime.set2DArrayElement(chart.parameter_name(i), ind1 + 1, ind2 + 1, values[ind1][ind2]); } } } else { Runtime.setVariable(chart.parameter_name(i), the_values[i]); } } } }
private static void Invoke_Tab_Procedure_Exit( parse_tree.parameter_list parameters, Procedure_Chart chart) { end_oval.running = true; call_rect.running = false; Runtime.parent.currentObj = end_oval; parse_tree.parameter_list walk; int num_parameters = chart.num_params; walk = parameters; numbers.value[] the_values = new numbers.value[num_parameters]; string[] param_strings = new string[num_parameters]; bool[] is_array = new bool[num_parameters]; bool[] is_2d_array = new bool[num_parameters]; object[] old_values = new object[num_parameters]; for (int i = 0; i < num_parameters; i++) { if (chart.is_output_parameter(i)) { try { param_strings[i] = ((parse_tree.expr_output) walk.parameter).get_string(); } catch { param_strings[i] = ""; } if (Runtime.isArray(chart.parameter_name(i))) { is_array[i] = true; is_2d_array[i] = false; old_values[i] = Runtime.getValueArray(chart.parameter_name(i)); } else if (Runtime.is_2D_Array(chart.parameter_name(i))) { is_array[i] = false; is_2d_array[i] = true; old_values[i] = Runtime.get2DValueArray(chart.parameter_name(i)); } else { is_array[i] = false; is_2d_array[i] = false; old_values[i] = Runtime.getVariable(chart.parameter_name(i)); } } walk = walk.next; } Runtime.Decrease_Scope(); end_oval.running = false; call_rect.running = true; Runtime.parent.currentObj = call_rect; Runtime.parent.Possible_Tab_Update(next_chart); walk = parameters; for (int i = 0; i < num_parameters; i++) { if (chart.is_output_parameter(i)) { if (is_array[i]) { numbers.value[] values = (numbers.value [])old_values[i]; for (int ind1 = values.Length - 1; ind1 >= 0; ind1--) { Runtime.setArrayElement(param_strings[i], ind1 + 1, values[ind1]); } } else if (is_2d_array[i]) { numbers.value[][] values = old_values[i] as numbers.value[][]; for (int ind1 = values.Length - 1; ind1 >= 0; ind1--) { for (int ind2 = values[0].Length - 1; ind2 >= 0; ind2--) { Runtime.set2DArrayElement(param_strings[i], ind1 + 1, ind2 + 1, values[ind1][ind2]); } } } else { numbers.value t = (numbers.value)old_values[i]; parse_tree_pkg.ms_assign_to(walk.parameter, t, "Parameter " + (i + 1) + ":"); //Runtime.setVariable(param_strings[i], // t); } } walk = walk.next; } call_rect.running = false; }
public static void addValue(object o, numbers.value v) { (o as Component).addValue(v); }