Skip to content

Commit af292fe

Browse files
committed
finish phase 1
1 parent 6d7a9b9 commit af292fe

File tree

3 files changed

+142
-132
lines changed

3 files changed

+142
-132
lines changed

site/index.html

Lines changed: 71 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -34963,7 +34963,6 @@
3496334963

3496434964
var py = pylib;
3496534965
var prevfun = "";
34966-
var prevfunpublic = false;
3496734966
var prevobj = "";
3496834967
var prevobjpublic = false;
3496934968
var curlvl = 0;
@@ -35203,20 +35202,6 @@
3520335202
py += `${a.iden[j]}=${f}.${a.iden[j]};`;
3520435203
}
3520535204
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!
3522035205
} else if (a.op == "length") {
3522135206
var vname = this.nextTmpVar();
3522235207
py += `${vname}=${a.container}.length;`;
@@ -35307,7 +35292,6 @@
3530735292
rename(name) {
3530835293
return name && `${name.toLowerCase()}`;
3530935294
}
35310-
prevTmpVar() {}
3531135295
lowerAllPinYinAndMakeItGlobal(asc) {
3531235296
for (let i = 0; i < asc.length; i++) {
3531335297
var item = asc[i];
@@ -35378,17 +35362,20 @@
3537835362
"&&": " and "
3537935363
};
3538035364
let rb = rblib;
35381-
let prevfun = "";
35365+
var prevfun = "";
35366+
var prevobj = "";
35367+
var prevobjpublic = false;
3538235368
let curlvl = 0;
35383-
let strayvar = 0;
35369+
let strayvar = [];
3538435370
let lambdaList = [];
3538535371
let methodIndex = 0;
3538635372
asc = this.lowerAllPinYinAndMakeItGlobal(asc);
3538735373
var getval = x => {
3538835374
if (!x) return "";
3538935375
if (x[0] == "ans") {
35390-
strayvar = 0;
35391-
return this.currTmpVar();
35376+
var ans = strayvar[strayvar.length - 1];
35377+
strayvar = [];
35378+
return ans;
3539235379
}
3539335380
if (x[0] == "iden") return this.rename(x[1]);
3539435381
if (x[1] == undefined) return "nil";
@@ -35409,7 +35396,7 @@
3540935396
let value = getval(a.values[j]);
3541035397
if (name == undefined) {
3541135398
name = this.nextTmpVar();
35412-
strayvar++;
35399+
strayvar.push(name);
3541335400
}
3541435401
if ([undefined, "nil"].includes(value)) {
3541535402
if (a.type == "arr") {
@@ -35428,12 +35415,7 @@
3542835415
} else if (a.op == "print") {
3542935416
rb += "\t".repeat(curlvl);
3543035417
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(", ")
3543735419
rb += "].join)\n";
3543835420
strayvar = 0;
3543935421
} else if (a.op == "fun") {
@@ -35508,52 +35490,61 @@
3550835490
rb += `return ${getval(a.value)}\n`;
3550935491
} else if (a.op.startsWith("op")) {
3551035492
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);
3552035498
} 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";
3552235501
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+
};`;
3552435505
}
35525-
strayvar -= a.names.length;
35506+
strayvar = strayvar.slice(0, strayvar.length - a.names.length);
3552635507
} else if (a.op == "call") {
3552735508
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);
3553535526
}
35536-
rb += `${this.nextTmpVar()}=${functionCallStr}\n`;
35537-
strayvar++;
3553835527
} 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();
3554135530
if (idx == "rest") {
35542-
rb += `${this.nextTmpVar()}=${a.container}.slice(1)\n`;
35543-
strayvar++;
35531+
rb += `${vname}=${a.container}.slice(1);`;
3554435532
} else {
35545-
rb += `${this.nextTmpVar()}=${a.container}[${idx}${
35533+
rb += `${vname}=${a.container}[${idx}${
3554635534
a.value[0] == "lit" ? "" : "-1"
35547-
}]\n`;
35548-
strayvar++;
35535+
}];`;
3554935536
}
35537+
strayvar.push(vname);
3555035538
} else if (a.op == "cat") {
35551-
rb += "\t".repeat(curlvl);
35539+
var vname = this.nextTmpVar();
3555235540
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);
3555735548
} else if (a.op == "push") {
3555835549
rb += "\t".repeat(curlvl);
3555935550
rb += `${a.container}.push(${a.values
@@ -35577,9 +35568,10 @@
3557735568
rb += "break\n";
3557835569
} else if (a.op == "not") {
3557935570
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);
3558335575
} else if (a.op == "reassign") {
3558435576
rb += "\t".repeat(curlvl);
3558535577
let rhs = getval(a.rhs);
@@ -35588,11 +35580,24 @@
3558835580
lhs += `[${a.lhssubs[1]}${a.lhssubs[0] == "lit" ? "" : "-1"}]`;
3558935581
}
3559035582
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);
3559135587
} 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);
3559335597
} 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);
3559635601
} else if (a.op == "comment") {
3559735602
rb += "\t".repeat(curlvl);
3559835603
rb += `# ${getval(a.value)}\n`;

src/compiler/py.js

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class PYCompiler extends Base {
1111

1212
var py = pylib;
1313
var prevfun = "";
14-
var prevfunpublic = false;
1514
var prevobj = "";
1615
var prevobjpublic = false;
1716
var curlvl = 0;
@@ -251,20 +250,6 @@ class PYCompiler extends Base {
251250
py += `${a.iden[j]}=${f}.${a.iden[j]};`;
252251
}
253252
imports.push(f);
254-
} else if (a.op == "try") {
255-
// TODO!
256-
curlvl++;
257-
} else if (a.op == "catch") {
258-
// TODO!
259-
strayvar = [];
260-
} else if (a.op == "catcherr") {
261-
// TODO!
262-
} else if (a.op == "tryend") {
263-
// TODO!
264-
curlvl--;
265-
strayvar = [];
266-
} else if (a.op == "throw") {
267-
// TODO!
268253
} else if (a.op == "length") {
269254
var vname = this.nextTmpVar();
270255
py += `${vname}=${a.container}.length;`;

0 commit comments

Comments
 (0)