Skip to content

Commit d393663

Browse files
committed
finish phase 1
1 parent af292fe commit d393663

File tree

1 file changed

+71
-66
lines changed

1 file changed

+71
-66
lines changed

site/ide.html

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

3481934819
var py = pylib;
3482034820
var prevfun = "";
34821-
var prevfunpublic = false;
3482234821
var prevobj = "";
3482334822
var prevobjpublic = false;
3482434823
var curlvl = 0;
@@ -35058,20 +35057,6 @@
3505835057
py += `${a.iden[j]}=${f}.${a.iden[j]};`;
3505935058
}
3506035059
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!
3507535060
} else if (a.op == "length") {
3507635061
var vname = this.nextTmpVar();
3507735062
py += `${vname}=${a.container}.length;`;
@@ -35162,7 +35147,6 @@
3516235147
rename(name) {
3516335148
return name && `${name.toLowerCase()}`;
3516435149
}
35165-
prevTmpVar() {}
3516635150
lowerAllPinYinAndMakeItGlobal(asc) {
3516735151
for (let i = 0; i < asc.length; i++) {
3516835152
var item = asc[i];
@@ -35233,17 +35217,20 @@
3523335217
"&&": " and "
3523435218
};
3523535219
let rb = rblib;
35236-
let prevfun = "";
35220+
var prevfun = "";
35221+
var prevobj = "";
35222+
var prevobjpublic = false;
3523735223
let curlvl = 0;
35238-
let strayvar = 0;
35224+
let strayvar = [];
3523935225
let lambdaList = [];
3524035226
let methodIndex = 0;
3524135227
asc = this.lowerAllPinYinAndMakeItGlobal(asc);
3524235228
var getval = x => {
3524335229
if (!x) return "";
3524435230
if (x[0] == "ans") {
35245-
strayvar = 0;
35246-
return this.currTmpVar();
35231+
var ans = strayvar[strayvar.length - 1];
35232+
strayvar = [];
35233+
return ans;
3524735234
}
3524835235
if (x[0] == "iden") return this.rename(x[1]);
3524935236
if (x[1] == undefined) return "nil";
@@ -35264,7 +35251,7 @@
3526435251
let value = getval(a.values[j]);
3526535252
if (name == undefined) {
3526635253
name = this.nextTmpVar();
35267-
strayvar++;
35254+
strayvar.push(name);
3526835255
}
3526935256
if ([undefined, "nil"].includes(value)) {
3527035257
if (a.type == "arr") {
@@ -35283,12 +35270,7 @@
3528335270
} else if (a.op == "print") {
3528435271
rb += "\t".repeat(curlvl);
3528535272
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(", ");
3529235274
rb += "].join)\n";
3529335275
strayvar = 0;
3529435276
} else if (a.op == "fun") {
@@ -35363,52 +35345,61 @@
3536335345
rb += `return ${getval(a.value)}\n`;
3536435346
} else if (a.op.startsWith("op")) {
3536535347
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);
3537535353
} 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";
3537735356
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+
};`;
3537935360
}
35380-
strayvar -= a.names.length;
35361+
strayvar = strayvar.slice(0, strayvar.length - a.names.length);
3538135362
} else if (a.op == "call") {
3538235363
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);
3539035381
}
35391-
rb += `${this.nextTmpVar()}=${functionCallStr}\n`;
35392-
strayvar++;
3539335382
} 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();
3539635385
if (idx == "rest") {
35397-
rb += `${this.nextTmpVar()}=${a.container}.slice(1)\n`;
35398-
strayvar++;
35386+
rb += `${vname}=${a.container}.slice(1);`;
3539935387
} else {
35400-
rb += `${this.nextTmpVar()}=${a.container}[${idx}${
35388+
rb += `${vname}=${a.container}[${idx}${
3540135389
a.value[0] == "lit" ? "" : "-1"
35402-
}]\n`;
35403-
strayvar++;
35390+
}];`;
3540435391
}
35392+
strayvar.push(vname);
3540535393
} else if (a.op == "cat") {
35406-
rb += "\t".repeat(curlvl);
35394+
var vname = this.nextTmpVar();
3540735395
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);
3541235403
} else if (a.op == "push") {
3541335404
rb += "\t".repeat(curlvl);
3541435405
rb += `${a.container}.push(${a.values
@@ -35432,9 +35423,10 @@
3543235423
rb += "break\n";
3543335424
} else if (a.op == "not") {
3543435425
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);
3543835430
} else if (a.op == "reassign") {
3543935431
rb += "\t".repeat(curlvl);
3544035432
let rhs = getval(a.rhs);
@@ -35443,11 +35435,24 @@
3544335435
lhs += `[${a.lhssubs[1]}${a.lhssubs[0] == "lit" ? "" : "-1"}]`;
3544435436
}
3544535437
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);
3544635442
} 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);
3544835452
} 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);
3545135456
} else if (a.op == "comment") {
3545235457
rb += "\t".repeat(curlvl);
3545335458
rb += `# ${getval(a.value)}\n`;

0 commit comments

Comments
 (0)