RAPL

Diff
Login

Diff

Differences From Artifact [de74244dfe]:

To Artifact [2953abc805]:


1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093

1094
1095
1096
1097
1098

1099
1100

1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122

1123
1124


1125
1126
1127

1128
1129
1130





1131
1132
1133


1134
1135
1136


1137
1138
1139
1140
1141



1142
1143
1144
1145
1146




1147
1148
1149
1150
1151
1152

1153
1154
1155
1156
1157
1158
1159
1083
1084
1085
1086
1087
1088
1089




1090





1091


1092






















1093


1094
1095



1096



1097
1098
1099
1100
1101



1102
1103



1104
1105





1106
1107
1108





1109
1110
1111
1112
1113

1114



1115
1116
1117
1118
1119
1120
1121
1122







-
-
-
-
+
-
-
-
-
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
-
-
-
+
-
-
-
+
+
+
+
+
-
-
-
+
+
-
-
-
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+

-

-
-
-
+







      interp.wrongNumArgs(1, args, "?level? command ?arg ...?");
      return interp.ERROR;
    }
  });

  /* ==================== command upvar ===================================== */
  interp.registerCommand("::upvar", function (interp, args) {
//print("UPVAR!"+args+"!");
    args.shift();
    this.requireMinArgc(args, 2, "upvar", "");
    var arg1 = args[0];
    var i;
    var have_level = 0;
    var have_integer_level = 0;
    var index_ptr = new Array();
    var err_msg_ptr = new Array();

    var target_call_frame;
    if (this.isLevel.test((arg1))) {
      have_level = 1;
    var idx = 1;
      args.shift();
      if (this.isInteger.test(arg1)) {
        have_integer_level = 1;
      } else {
	arg1 = arg1.substring(1);
      }
    } else {
      have_level = 1;
      have_integer_level = 1;
      arg1 = "1";
    }
    arg1 = parseInt(arg1);
    interp.upvar_dist = parseInt(arg1);
    interp.in_upvar = 1;
    if (interp.eval_statement.level < arg1) {
        throw "bad level \""+arg1+"\" interp level: "+interp.eval_statement.level;
    }
    var my_flags = 0;
    while (args.length > 0) {
      if (args.length == 1) {
        throw "must be an even number of references"
      }

      var create = 1;
      var to_var = args.shift().toString();
    /* Lookup the target frame pointer */
    if (args.length > 3 && (args.length % 2 == 0)) {
      var my_var = args.shift().toString();
//print("upvar to_var!"+to_var+"!my_var!"+my_var+"!arg1!"+arg1+"!intplv!"+interp.eval_statement.level+"!");
      interp.eval_statement.level -= arg1;
      target_call_frame = interp.getCallFrameByLevel(args[idx]);
      var var_to_obj = interp.global_ns_ptr.lookupVariableEx(interp, to_var, interp.FUNCTION_FLAGS_LEAVE_ERR_MSG, "access", 0, 0);
      interp.eval_statement.level += arg1;
      if (var_to_obj == null) {
      idx++;
    } else {
      target_call_frame = interp.getCallFrameByLevel(null);
    }
    if (target_call_frame == null) {
        interp.code = this.ERROR;
	return "";
      }
      return interp.ERROR;
    }
      var my_var_obj = interp.variable_obj_type.lookupSimpleVar(interp, my_var, my_flags|this.VAR_LOOKUP_AVOID_RESOLVERS, create, err_msg_ptr, index_ptr);
      err_msg_ptr = err_msg_ptr[0];
      if (my_var_obj == null) {
    /* Check for arity */
    if (idx < args.length - 2) {
        interp.varErrMsg(my_var, null, "create", err_msg_ptr, -1);
	interp.setErrorCode(["TCL", "LOOKUP", "VARNAME", my_name]);
	interp.code = this.ERROR;
	return "";
      }
      interp.wrongNumArgs(1, args, "?level? otherVar localVar ?otherVar localVar ...?");
      return interp.ERROR;
    }
      if (var_to_obj == my_var_obj) {
        interp.setResult(interp.string_obj_type.newStringObj("can't upvar from variable to itself", -1));
	interp.setErrorCode(["TCL", "UPVAR", "SELF"]);
	interp.code = this.ERROR;
	return "";
    /* Now... for every other/local couple: */
    for (i = idx; i < args.length; i += 2) {
      if (interp.variable_obj_type.setVariableLink(args[i + 1], args[i], target_call_frame) != interp.OK) {
        return interp.ERROR;
      }
      my_var_obj.linkVar(var_to_obj);
    }
    interp.in_upvar = 0;
    interp.code = this.OK;
    return "";
    return interp.OK;
  });

  /* ==================== command unknown ===================================== */
  interp.registerCommand("::unknown", function (interp, args) {
    interp.setResultString("no such command: \""+args[1]+"\"");
    return interp.ERROR;
  });