34963
34963
34964
34964
var py = pylib;
34965
34965
var prevfun = "";
34966
- var prevfunpublic = false;
34967
34966
var prevobj = "";
34968
34967
var prevobjpublic = false;
34969
34968
var curlvl = 0;
35203
35202
py += `${a.iden[j]}=${f}.${a.iden[j]};`;
35204
35203
}
35205
35204
imports.push(f);
35206
- } else if (a.op == "try") {
35207
- // TODO!
35208
- curlvl++;
35209
- } else if (a.op == "catch") {
35210
- // TODO!
35211
- strayvar = [];
35212
- } else if (a.op == "catcherr") {
35213
- // TODO!
35214
- } else if (a.op == "tryend") {
35215
- // TODO!
35216
- curlvl--;
35217
- strayvar = [];
35218
- } else if (a.op == "throw") {
35219
- // TODO!
35220
35205
} else if (a.op == "length") {
35221
35206
var vname = this.nextTmpVar();
35222
35207
py += `${vname}=${a.container}.length;`;
35307
35292
rename(name) {
35308
35293
return name && `${name.toLowerCase()}`;
35309
35294
}
35310
- prevTmpVar() {}
35311
35295
lowerAllPinYinAndMakeItGlobal(asc) {
35312
35296
for (let i = 0; i < asc.length; i++) {
35313
35297
var item = asc[i];
@@ -35378,17 +35362,20 @@
35378
35362
"&&": " and "
35379
35363
};
35380
35364
let rb = rblib;
35381
- let prevfun = "";
35365
+ var prevfun = "";
35366
+ var prevobj = "";
35367
+ var prevobjpublic = false;
35382
35368
let curlvl = 0;
35383
- let strayvar = 0 ;
35369
+ let strayvar = [] ;
35384
35370
let lambdaList = [];
35385
35371
let methodIndex = 0;
35386
35372
asc = this.lowerAllPinYinAndMakeItGlobal(asc);
35387
35373
var getval = x => {
35388
35374
if (!x) return "";
35389
35375
if (x[0] == "ans") {
35390
- strayvar = 0;
35391
- return this.currTmpVar();
35376
+ var ans = strayvar[strayvar.length - 1];
35377
+ strayvar = [];
35378
+ return ans;
35392
35379
}
35393
35380
if (x[0] == "iden") return this.rename(x[1]);
35394
35381
if (x[1] == undefined) return "nil";
35409
35396
let value = getval(a.values[j]);
35410
35397
if (name == undefined) {
35411
35398
name = this.nextTmpVar();
35412
- strayvar++ ;
35399
+ strayvar.push(name) ;
35413
35400
}
35414
35401
if ([undefined, "nil"].includes(value)) {
35415
35402
if (a.type == "arr") {
35428
35415
} else if (a.op == "print") {
35429
35416
rb += "\t".repeat(curlvl);
35430
35417
rb += `p([`;
35431
- for (let j = 0; j < strayvar; j++) {
35432
- rb += `${this.prevTmpVar(strayvar - j)}.to_s`;
35433
- if (j != strayvar - 1) {
35434
- rb += ",";
35435
- }
35436
- }
35418
+ rb += strayvar.join(", ")
35437
35419
rb += "].join)\n";
35438
35420
strayvar = 0;
35439
35421
} else if (a.op == "fun") {
@@ -35508,52 +35490,61 @@
35508
35490
rb += `return ${getval(a.value)}\n`;
35509
35491
} else if (a.op.startsWith("op")) {
35510
35492
rb += "\t".repeat(curlvl);
35511
- let lhs = getval(a.lhs);
35512
- let rhs = getval(a.rhs);
35513
-
35514
- let op = a.op.slice(2);
35515
- if (op in lop) {
35516
- op = lop[op];
35517
- }
35518
- rb += `${this.nextTmpVar()}=${lhs}${op}${rhs}\n`;
35519
- strayvar++;
35493
+ var lhs = getval(a.lhs);
35494
+ var rhs = getval(a.rhs);
35495
+ var vname = this.nextTmpVar();
35496
+ rb += `${vname}=${lhs}${a.op.slice(2)}${rhs};`;
35497
+ strayvar.push(vname);
35520
35498
} else if (a.op == "name") {
35521
- for (let j = 0; j < a.names.length; j++) {
35499
+ for (var j = 0; j < a.names.length; j++) {
35500
+ rb += "\n";
35522
35501
rb += "\t".repeat(curlvl);
35523
- rb += `${a.names[j]}=${this.prevTmpVar(strayvar - j)}\n`;
35502
+ rb += `${a.names[j]}=${
35503
+ strayvar[strayvar.length - a.names.length + j]
35504
+ };`;
35524
35505
}
35525
- strayvar -= a.names.length;
35506
+ strayvar = strayvar.slice(0, strayvar.length - a.names.length) ;
35526
35507
} else if (a.op == "call") {
35527
35508
rb += "\t".repeat(curlvl);
35528
- let functionCallStr = `${a.fun}(${a.args
35529
- .map(x => getval(x))
35530
- .join(",")})`;
35531
- if (lambdaList.includes(a.fun)) {
35532
- functionCallStr = `${a.fun}.call(${a.args
35533
- .map(x => getval(x))
35534
- .join(",")})`;
35509
+ if (a.pop) {
35510
+ var jj = "";
35511
+ for (var j = 0; j < took; j++) {
35512
+ jj += `(${strayvar[strayvar.length - took + j]})`;
35513
+ }
35514
+ strayvar = strayvar.slice(0, strayvar.length - took);
35515
+ took = 0;
35516
+ var vname = this.nextTmpVar();
35517
+ if (!jj.length) {
35518
+ jj = "()";
35519
+ }
35520
+ rb += `${vname}=${a.fun}` + jj + ";";
35521
+ strayvar.push(vname);
35522
+ } else {
35523
+ var vname = this.nextTmpVar();
35524
+ rb += `${vname}=${a.fun}(${a.args.map(x => getval(x)).join(")(")});`;
35525
+ strayvar.push(vname);
35535
35526
}
35536
- rb += `${this.nextTmpVar()}=${functionCallStr}\n`;
35537
- strayvar++;
35538
35527
} else if (a.op == "subscript") {
35539
- rb += "\t".repeat(curlvl );
35540
- let idx = getval(a.value );
35528
+ var idx = getval(a.value );
35529
+ var vname = this.nextTmpVar( );
35541
35530
if (idx == "rest") {
35542
- rb += `${this.nextTmpVar()}=${a.container}.slice(1)\n`;
35543
- strayvar++;
35531
+ rb += `${vname}=${a.container}.slice(1);`;
35544
35532
} else {
35545
- rb += `${this.nextTmpVar() }=${a.container}[${idx}${
35533
+ rb += `${vname }=${a.container}[${idx}${
35546
35534
a.value[0] == "lit" ? "" : "-1"
35547
- }]\n`;
35548
- strayvar++;
35535
+ }];`;
35549
35536
}
35537
+ strayvar.push(vname);
35550
35538
} else if (a.op == "cat") {
35551
- rb += "\t".repeat(curlvl );
35539
+ var vname = this.nextTmpVar( );
35552
35540
rb +=
35553
- `${this.nextTmpVar()}=${a.containers[0]}.concat(` +
35554
- a.containers.slice(1).join(").concat(") +
35555
- ")\n";
35556
- strayvar++;
35541
+ `${vname}=${getval(a.containers[0])}.concat(` +
35542
+ a.containers
35543
+ .slice(1)
35544
+ .map(x => x[1])
35545
+ .join(").concat(") +
35546
+ ");";
35547
+ strayvar.push(vname);
35557
35548
} else if (a.op == "push") {
35558
35549
rb += "\t".repeat(curlvl);
35559
35550
rb += `${a.container}.push(${a.values
35577
35568
rb += "break\n";
35578
35569
} else if (a.op == "not") {
35579
35570
rb += "\t".repeat(curlvl);
35580
- let v = getval(a.value);
35581
- rb += `${this.nextTmpVar()}=!${v}\n`;
35582
- strayvar++;
35571
+ var v = getval(a.value);
35572
+ var vname = this.nextTmpVar();
35573
+ rb += `${vname}=!${v};`;
35574
+ strayvar.push(vname);
35583
35575
} else if (a.op == "reassign") {
35584
35576
rb += "\t".repeat(curlvl);
35585
35577
let rhs = getval(a.rhs);
@@ -35588,11 +35580,24 @@
35588
35580
lhs += `[${a.lhssubs[1]}${a.lhssubs[0] == "lit" ? "" : "-1"}]`;
35589
35581
}
35590
35582
rb += `${lhs}=${rhs}\n`;
35583
+ } else if (a.op == "temp") {
35584
+ var vname = this.nextTmpVar();
35585
+ rb += `${vname}=${a.iden[1]};`;
35586
+ strayvar.push(vname);
35591
35587
} else if (a.op == "discard") {
35592
- strayvar = 0;
35588
+ strayvar = [];
35589
+ } else if (a.op == "take") {
35590
+ took = a.count;
35591
+ } else if (a.op == "import") {
35592
+ var f = a.file.replace(/"/g, "");
35593
+ for (var j = 0; j < a.iden.length; j++) {
35594
+ rb += `${a.iden[j]}=${f}.${a.iden[j]};`;
35595
+ }
35596
+ imports.push(f);
35593
35597
} else if (a.op == "length") {
35594
- rb += `${this.nextTmpVar()}=${a.container}.length;`;
35595
- strayvar++;
35598
+ var vname = this.nextTmpVar();
35599
+ rb += `${vname}=${a.container}.length;`;
35600
+ strayvar.push(vname);
35596
35601
} else if (a.op == "comment") {
35597
35602
rb += "\t".repeat(curlvl);
35598
35603
rb += `# ${getval(a.value)}\n`;
0 commit comments