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
      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 have_level = 0;
    var have_integer_level = 0;
    var index_ptr = new Array();
    var err_msg_ptr = new Array();

    if (this.isLevel.test((arg1))) {
      have_level = 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();
      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;
      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) {
        interp.code = this.ERROR;
	return "";
      }
      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) {
        interp.varErrMsg(my_var, null, "create", err_msg_ptr, -1);
	interp.setErrorCode(["TCL", "LOOKUP", "VARNAME", my_name]);
	interp.code = this.ERROR;
	return "";
      }
      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 "";
      }
      my_var_obj.linkVar(var_to_obj);
    }
    interp.in_upvar = 0;
    interp.code = this.OK;
    return "";
  });

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







<
<
<
|
<
<
<
<
|
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
>
|
<
<
|
<
>
>
|
>
|
<
|
|
<
<
>
|
<
<
|
|
|
<
<
<
>
>
|
|

<

<
<
|







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) {



    var i;




    var target_call_frame;

    var idx = 1;























    /* Lookup the target frame pointer */
    if (args.length > 3 && (args.length % 2 == 0)) {


      target_call_frame = interp.getCallFrameByLevel(args[idx]);

      idx++;
    } else {
      target_call_frame = interp.getCallFrameByLevel(null);
    }
    if (target_call_frame == null) {

      return interp.ERROR;
    }


    /* Check for arity */
    if (idx < args.length - 2) {


      interp.wrongNumArgs(1, args, "?level? otherVar localVar ?otherVar localVar ...?");
      return interp.ERROR;
    }



    /* 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;
      }

    }


    return interp.OK;
  });

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