Skip to content

Commit 9893de8

Browse files
committed
added $ prefix to variable and _. prefix to reference the previous variable prefixed with $. makes OOP without using class cleaner.
1 parent 4875b06 commit 9893de8

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

sunsnake_compiler.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,23 @@ function compile(script) {
2424
script = script.replaceAll('+\n', '+')
2525
script = script.replaceAll(' == ', ' === ')
2626
script = script.replaceAll('.index(', '.indexOf(')
27-
script = script.replaceAll(' self.', ' this.')
28-
script = script.replaceAll('(self.', '(this.')
27+
// script = script.replaceAll(' self.', ' this.')
28+
// script = script.replaceAll('(self.', '(this.')
2929
// script = script.replaceAll('(self.', '(this.')
3030

31-
var all_lines = script.split('\n');
31+
var all_lines = script.split('\n')
3232
var lines = []
3333
lines.push('\n')
3434

3535
strings = []
3636
string_index = 0
37-
const regexp = '\'(.*?)\'';
38-
const regexp_backtick = '\`(.*?)\`';
37+
const regexp = '\'(.*?)\''
38+
const regexp_backtick = '\`(.*?)\`'
3939

4040
extra_replacements = []
41-
is_in_multiline_string = false;
41+
is_in_multiline_string = false
42+
43+
prev_created_variable = null // for storing the recently defined variable starting with $, so it can be references with '_.'
4244

4345
for (var i=0; i<all_lines.length; i++) {
4446
if (!all_lines[i].trim()) {
@@ -266,7 +268,23 @@ function compile(script) {
266268
lines[i] = lines[i].replace('```', '``)')
267269
}
268270

271+
if (lines[i].startsWith('$')) {
272+
prev_created_variable = lines[i].substring(1).split('=')[0].trimEnd()
273+
lines[i] = lines[i].split('$')[1]
274+
}
275+
else if (lines[i].includes('_.') && prev_created_variable) {
276+
// indent = get_indent(lines[i])
277+
// start = ' '.repeat(indent)
278+
// end = lines[i].trimStart().substring(1)
279+
// end = end.replaceAll('_.', prev_created_variable)
280+
// print('---:', lines[i].trimStart().substring(1))
281+
282+
// lines[i] = start + prev_created_variable + end
283+
lines[i] = lines[i].replaceAll('_.', prev_created_variable+'.')
284+
lines[i] = lines[i].replaceAll('_,', prev_created_variable+',')
285+
}
269286

287+
// convert dict(...) to {...}
270288
for (var class_name of ['dict', ]) {
271289
if (lines[i].includes(`${class_name}({`)) {
272290
continue
@@ -276,6 +294,7 @@ function compile(script) {
276294
}
277295
}
278296

297+
// add 'new' in front of class initializations
279298
for (var class_name of _class_names) {
280299
is_first_word = lines[i].startsWith(`${class_name}(`) ? '' : ' ' // don't add space if line starts with 'Entity(', do add otherwise, to ensure we match the whole name
281300
if (lines[i].includes(`${is_first_word}${class_name}(`)) {
@@ -287,6 +306,8 @@ function compile(script) {
287306
}
288307
}
289308

309+
310+
// units
290311
for (var n=0; n<10; n++) {
291312
lines[i] = lines[i].replaceAll(`${n}ms`, `${n}*.001`)
292313
lines[i] = lines[i].replaceAll(`${n}s`, `${n}`)

0 commit comments

Comments
 (0)