34818
34818
34819
34819
var py = pylib;
34820
34820
var prevfun = "";
34821
- var prevfunpublic = false;
34822
34821
var prevobj = "";
34823
34822
var prevobjpublic = false;
34824
34823
var curlvl = 0;
35058
35057
py += `${a.iden[j]}=${f}.${a.iden[j]};`;
35059
35058
}
35060
35059
imports.push(f);
35061
- } else if (a.op == "try") {
35062
- // TODO!
35063
- curlvl++;
35064
- } else if (a.op == "catch") {
35065
- // TODO!
35066
- strayvar = [];
35067
- } else if (a.op == "catcherr") {
35068
- // TODO!
35069
- } else if (a.op == "tryend") {
35070
- // TODO!
35071
- curlvl--;
35072
- strayvar = [];
35073
- } else if (a.op == "throw") {
35074
- // TODO!
35075
35060
} else if (a.op == "length") {
35076
35061
var vname = this.nextTmpVar();
35077
35062
py += `${vname}=${a.container}.length;`;
35162
35147
rename(name) {
35163
35148
return name && `${name.toLowerCase()}`;
35164
35149
}
35165
- prevTmpVar() {}
35166
35150
lowerAllPinYinAndMakeItGlobal(asc) {
35167
35151
for (let i = 0; i < asc.length; i++) {
35168
35152
var item = asc[i];
@@ -35233,17 +35217,20 @@
35233
35217
"&&": " and "
35234
35218
};
35235
35219
let rb = rblib;
35236
- let prevfun = "";
35220
+ var prevfun = "";
35221
+ var prevobj = "";
35222
+ var prevobjpublic = false;
35237
35223
let curlvl = 0;
35238
- let strayvar = 0 ;
35224
+ let strayvar = [] ;
35239
35225
let lambdaList = [];
35240
35226
let methodIndex = 0;
35241
35227
asc = this.lowerAllPinYinAndMakeItGlobal(asc);
35242
35228
var getval = x => {
35243
35229
if (!x) return "";
35244
35230
if (x[0] == "ans") {
35245
- strayvar = 0;
35246
- return this.currTmpVar();
35231
+ var ans = strayvar[strayvar.length - 1];
35232
+ strayvar = [];
35233
+ return ans;
35247
35234
}
35248
35235
if (x[0] == "iden") return this.rename(x[1]);
35249
35236
if (x[1] == undefined) return "nil";
35264
35251
let value = getval(a.values[j]);
35265
35252
if (name == undefined) {
35266
35253
name = this.nextTmpVar();
35267
- strayvar++ ;
35254
+ strayvar.push(name) ;
35268
35255
}
35269
35256
if ([undefined, "nil"].includes(value)) {
35270
35257
if (a.type == "arr") {
35283
35270
} else if (a.op == "print") {
35284
35271
rb += "\t".repeat(curlvl);
35285
35272
rb += `p([`;
35286
- for (let j = 0; j < strayvar; j++) {
35287
- rb += `${this.prevTmpVar(strayvar - j)}.to_s`;
35288
- if (j != strayvar - 1) {
35289
- rb += ",";
35290
- }
35291
- }
35273
+ rb += strayvar.join(", ");
35292
35274
rb += "].join)\n";
35293
35275
strayvar = 0;
35294
35276
} else if (a.op == "fun") {
@@ -35363,52 +35345,61 @@
35363
35345
rb += `return ${getval(a.value)}\n`;
35364
35346
} else if (a.op.startsWith("op")) {
35365
35347
rb += "\t".repeat(curlvl);
35366
- let lhs = getval(a.lhs);
35367
- let rhs = getval(a.rhs);
35368
-
35369
- let op = a.op.slice(2);
35370
- if (op in lop) {
35371
- op = lop[op];
35372
- }
35373
- rb += `${this.nextTmpVar()}=${lhs}${op}${rhs}\n`;
35374
- strayvar++;
35348
+ var lhs = getval(a.lhs);
35349
+ var rhs = getval(a.rhs);
35350
+ var vname = this.nextTmpVar();
35351
+ rb += `${vname}=${lhs}${a.op.slice(2)}${rhs};`;
35352
+ strayvar.push(vname);
35375
35353
} else if (a.op == "name") {
35376
- for (let j = 0; j < a.names.length; j++) {
35354
+ for (var j = 0; j < a.names.length; j++) {
35355
+ rb += "\n";
35377
35356
rb += "\t".repeat(curlvl);
35378
- rb += `${a.names[j]}=${this.prevTmpVar(strayvar - j)}\n`;
35357
+ rb += `${a.names[j]}=${
35358
+ strayvar[strayvar.length - a.names.length + j]
35359
+ };`;
35379
35360
}
35380
- strayvar -= a.names.length;
35361
+ strayvar = strayvar.slice(0, strayvar.length - a.names.length) ;
35381
35362
} else if (a.op == "call") {
35382
35363
rb += "\t".repeat(curlvl);
35383
- let functionCallStr = `${a.fun}(${a.args
35384
- .map(x => getval(x))
35385
- .join(",")})`;
35386
- if (lambdaList.includes(a.fun)) {
35387
- functionCallStr = `${a.fun}.call(${a.args
35388
- .map(x => getval(x))
35389
- .join(",")})`;
35364
+ if (a.pop) {
35365
+ var jj = "";
35366
+ for (var j = 0; j < took; j++) {
35367
+ jj += `(${strayvar[strayvar.length - took + j]})`;
35368
+ }
35369
+ strayvar = strayvar.slice(0, strayvar.length - took);
35370
+ took = 0;
35371
+ var vname = this.nextTmpVar();
35372
+ if (!jj.length) {
35373
+ jj = "()";
35374
+ }
35375
+ rb += `${vname}=${a.fun}` + jj + ";";
35376
+ strayvar.push(vname);
35377
+ } else {
35378
+ var vname = this.nextTmpVar();
35379
+ rb += `${vname}=${a.fun}(${a.args.map(x => getval(x)).join(")(")});`;
35380
+ strayvar.push(vname);
35390
35381
}
35391
- rb += `${this.nextTmpVar()}=${functionCallStr}\n`;
35392
- strayvar++;
35393
35382
} else if (a.op == "subscript") {
35394
- rb += "\t".repeat(curlvl );
35395
- let idx = getval(a.value );
35383
+ var idx = getval(a.value );
35384
+ var vname = this.nextTmpVar( );
35396
35385
if (idx == "rest") {
35397
- rb += `${this.nextTmpVar()}=${a.container}.slice(1)\n`;
35398
- strayvar++;
35386
+ rb += `${vname}=${a.container}.slice(1);`;
35399
35387
} else {
35400
- rb += `${this.nextTmpVar() }=${a.container}[${idx}${
35388
+ rb += `${vname }=${a.container}[${idx}${
35401
35389
a.value[0] == "lit" ? "" : "-1"
35402
- }]\n`;
35403
- strayvar++;
35390
+ }];`;
35404
35391
}
35392
+ strayvar.push(vname);
35405
35393
} else if (a.op == "cat") {
35406
- rb += "\t".repeat(curlvl );
35394
+ var vname = this.nextTmpVar( );
35407
35395
rb +=
35408
- `${this.nextTmpVar()}=${a.containers[0]}.concat(` +
35409
- a.containers.slice(1).join(").concat(") +
35410
- ")\n";
35411
- strayvar++;
35396
+ `${vname}=${getval(a.containers[0])}.concat(` +
35397
+ a.containers
35398
+ .slice(1)
35399
+ .map(x => x[1])
35400
+ .join(").concat(") +
35401
+ ");";
35402
+ strayvar.push(vname);
35412
35403
} else if (a.op == "push") {
35413
35404
rb += "\t".repeat(curlvl);
35414
35405
rb += `${a.container}.push(${a.values
35432
35423
rb += "break\n";
35433
35424
} else if (a.op == "not") {
35434
35425
rb += "\t".repeat(curlvl);
35435
- let v = getval(a.value);
35436
- rb += `${this.nextTmpVar()}=!${v}\n`;
35437
- strayvar++;
35426
+ var v = getval(a.value);
35427
+ var vname = this.nextTmpVar();
35428
+ rb += `${vname}=!${v};`;
35429
+ strayvar.push(vname);
35438
35430
} else if (a.op == "reassign") {
35439
35431
rb += "\t".repeat(curlvl);
35440
35432
let rhs = getval(a.rhs);
@@ -35443,11 +35435,24 @@
35443
35435
lhs += `[${a.lhssubs[1]}${a.lhssubs[0] == "lit" ? "" : "-1"}]`;
35444
35436
}
35445
35437
rb += `${lhs}=${rhs}\n`;
35438
+ } else if (a.op == "temp") {
35439
+ var vname = this.nextTmpVar();
35440
+ rb += `${vname}=${a.iden[1]};`;
35441
+ strayvar.push(vname);
35446
35442
} else if (a.op == "discard") {
35447
- strayvar = 0;
35443
+ strayvar = [];
35444
+ } else if (a.op == "take") {
35445
+ took = a.count;
35446
+ } else if (a.op == "import") {
35447
+ var f = a.file.replace(/"/g, "");
35448
+ for (var j = 0; j < a.iden.length; j++) {
35449
+ rb += `${a.iden[j]}=${f}.${a.iden[j]};`;
35450
+ }
35451
+ imports.push(f);
35448
35452
} else if (a.op == "length") {
35449
- rb += `${this.nextTmpVar()}=${a.container}.length;`;
35450
- strayvar++;
35453
+ var vname = this.nextTmpVar();
35454
+ rb += `${vname}=${a.container}.length;`;
35455
+ strayvar.push(vname);
35451
35456
} else if (a.op == "comment") {
35452
35457
rb += "\t".repeat(curlvl);
35453
35458
rb += `# ${getval(a.value)}\n`;
0 commit comments