Skip to content

Commit a7d6d9f

Browse files
committed
Added push and pop
1 parent b771e57 commit a7d6d9f

File tree

6 files changed

+138
-10
lines changed

6 files changed

+138
-10
lines changed

dist/easycoder.js

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ const EasyCoder_Core = {
783783
run: program => {
784784
const command = program[program.pc];
785785
if (program.verifySymbol(command.label)) {
786-
program.stack.push(program.pc + 1);
786+
program.programtack.push(program.pc + 1);
787787
return program.symbols[command.label].pc;
788788
}
789789
program.runtimeError(command.lino, `Unknown symbol '${command.label}'`);
@@ -1129,6 +1129,43 @@ const EasyCoder_Core = {
11291129
}
11301130
},
11311131

1132+
Pop: {
1133+
1134+
compile: compiler => {
1135+
const lino = compiler.getLino();
1136+
if (compiler.nextIsSymbol()) {
1137+
const target = compiler.getToken();
1138+
compiler.next();
1139+
compiler.addCommand({
1140+
domain: `core`,
1141+
keyword: `pop`,
1142+
lino,
1143+
target
1144+
});
1145+
}
1146+
return true;
1147+
},
1148+
1149+
run: program => {
1150+
const command = program[program.pc];
1151+
const target = program.getSymbolRecord(command.target);
1152+
if (!target.isVHolder) {
1153+
program.variableDoesNotHoldAValueError(command.lino, target.name);
1154+
}
1155+
target.value = program.dataStack.pop();
1156+
target.value[target.index] = {
1157+
type: value.type,
1158+
numeric: value.numeric,
1159+
content: value.content
1160+
};
1161+
if (target.imported) {
1162+
const exporterRecord = EasyCoder.scripts[target.exporter].getSymbolRecord(target.exportedName);
1163+
exporterRecord.value[exporterRecord.index] = value;
1164+
}
1165+
return true;
1166+
}
1167+
},
1168+
11321169
Print: {
11331170

11341171
compile: compiler => {
@@ -1152,6 +1189,27 @@ const EasyCoder_Core = {
11521189
}
11531190
},
11541191

1192+
Push: {
1193+
1194+
compile: compiler => {
1195+
const lino = compiler.getLino();
1196+
const value = compiler.getNextValue();
1197+
compiler.addCommand({
1198+
domain: `core`,
1199+
keyword: `push`,
1200+
lino,
1201+
value
1202+
});
1203+
return true;
1204+
},
1205+
1206+
run: program => {
1207+
const command = program[program.pc];
1208+
program.dataStack.push(command.value);
1209+
return true;
1210+
}
1211+
},
1212+
11551213
Put: {
11561214

11571215
compile: compiler => {
@@ -1298,7 +1356,7 @@ const EasyCoder_Core = {
12981356
// runtime
12991357

13001358
run: program => {
1301-
return program.stack.pop();
1359+
return program.programStack.pop();
13021360
}
13031361
},
13041362

@@ -2246,8 +2304,12 @@ const EasyCoder_Core = {
22462304
return EasyCoder_Core.Negate;
22472305
case `on`:
22482306
return EasyCoder_Core.On;
2307+
case `pop`:
2308+
return EasyCoder_Core.Pop;
22492309
case `print`:
22502310
return EasyCoder_Core.Print;
2311+
case `push`:
2312+
return EasyCoder_Core.Push;
22512313
case `put`:
22522314
return EasyCoder_Core.Put;
22532315
case `replace`:
@@ -8667,7 +8729,8 @@ const EasyCoder = {
86678729
program.unblocked = false;
86688730
program.encoding = `ec`;
86698731
program.popups = [];
8670-
program.stack = [];
8732+
program.programStack = [];
8733+
program.dataStack = [];
86718734
program.queue = [0];
86728735
program.module = module;
86738736
program.parent = parent;
@@ -8787,7 +8850,7 @@ const EasyCoder = {
87878850
}
87888851
},
87898852
};
8790-
EasyCoder.version = `221206`;
8853+
EasyCoder.version = `221226`;
87918854
EasyCoder.timestamp = Date.now();
87928855
console.log(`EasyCoder loaded; waiting for page`);
87938856

dist/plugins/codemirror-ecs.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// This contains the code for color-highlighting .ecs scripts
2+
13
(function (mod) {
24
if (typeof exports == `object` && typeof module == `object`) // CommonJS
35
mod(require(`../../lib/codemirror`));
@@ -8,7 +10,6 @@
810
})(function (CodeMirror) {
911
"use strict";
1012

11-
1213
CodeMirror.defineMode(`ecs`, function () {
1314
return {
1415
startState: function () {

js/easycoder/Core.js

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ const EasyCoder_Core = {
783783
run: program => {
784784
const command = program[program.pc];
785785
if (program.verifySymbol(command.label)) {
786-
program.stack.push(program.pc + 1);
786+
program.programtack.push(program.pc + 1);
787787
return program.symbols[command.label].pc;
788788
}
789789
program.runtimeError(command.lino, `Unknown symbol '${command.label}'`);
@@ -1129,6 +1129,43 @@ const EasyCoder_Core = {
11291129
}
11301130
},
11311131

1132+
Pop: {
1133+
1134+
compile: compiler => {
1135+
const lino = compiler.getLino();
1136+
if (compiler.nextIsSymbol()) {
1137+
const target = compiler.getToken();
1138+
compiler.next();
1139+
compiler.addCommand({
1140+
domain: `core`,
1141+
keyword: `pop`,
1142+
lino,
1143+
target
1144+
});
1145+
}
1146+
return true;
1147+
},
1148+
1149+
run: program => {
1150+
const command = program[program.pc];
1151+
const target = program.getSymbolRecord(command.target);
1152+
if (!target.isVHolder) {
1153+
program.variableDoesNotHoldAValueError(command.lino, target.name);
1154+
}
1155+
target.value = program.dataStack.pop();
1156+
target.value[target.index] = {
1157+
type: value.type,
1158+
numeric: value.numeric,
1159+
content: value.content
1160+
};
1161+
if (target.imported) {
1162+
const exporterRecord = EasyCoder.scripts[target.exporter].getSymbolRecord(target.exportedName);
1163+
exporterRecord.value[exporterRecord.index] = value;
1164+
}
1165+
return true;
1166+
}
1167+
},
1168+
11321169
Print: {
11331170

11341171
compile: compiler => {
@@ -1152,6 +1189,27 @@ const EasyCoder_Core = {
11521189
}
11531190
},
11541191

1192+
Push: {
1193+
1194+
compile: compiler => {
1195+
const lino = compiler.getLino();
1196+
const value = compiler.getNextValue();
1197+
compiler.addCommand({
1198+
domain: `core`,
1199+
keyword: `push`,
1200+
lino,
1201+
value
1202+
});
1203+
return true;
1204+
},
1205+
1206+
run: program => {
1207+
const command = program[program.pc];
1208+
program.dataStack.push(command.value);
1209+
return true;
1210+
}
1211+
},
1212+
11551213
Put: {
11561214

11571215
compile: compiler => {
@@ -1298,7 +1356,7 @@ const EasyCoder_Core = {
12981356
// runtime
12991357

13001358
run: program => {
1301-
return program.stack.pop();
1359+
return program.programStack.pop();
13021360
}
13031361
},
13041362

@@ -2246,8 +2304,12 @@ const EasyCoder_Core = {
22462304
return EasyCoder_Core.Negate;
22472305
case `on`:
22482306
return EasyCoder_Core.On;
2307+
case `pop`:
2308+
return EasyCoder_Core.Pop;
22492309
case `print`:
22502310
return EasyCoder_Core.Print;
2311+
case `push`:
2312+
return EasyCoder_Core.Push;
22512313
case `put`:
22522314
return EasyCoder_Core.Put;
22532315
case `replace`:

js/easycoder/EasyCoder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
EasyCoder.version = `221206`;
1+
EasyCoder.version = `221226`;
22
EasyCoder.timestamp = Date.now();
33
console.log(`EasyCoder loaded; waiting for page`);
44

js/easycoder/Main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ const EasyCoder = {
263263
program.unblocked = false;
264264
program.encoding = `ec`;
265265
program.popups = [];
266-
program.stack = [];
266+
program.programStack = [];
267+
program.dataStack = [];
267268
program.queue = [0];
268269
program.module = module;
269270
program.parent = parent;

js/plugins/codemirror-ecs.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// This contains the code for color-highlighting .ecs scripts
2+
13
(function (mod) {
24
if (typeof exports == `object` && typeof module == `object`) // CommonJS
35
mod(require(`../../lib/codemirror`));
@@ -8,7 +10,6 @@
810
})(function (CodeMirror) {
911
"use strict";
1012

11-
1213
CodeMirror.defineMode(`ecs`, function () {
1314
return {
1415
startState: function () {

0 commit comments

Comments
 (0)