fix markdown issues in 2024/maffiodo, update tarballs and sitemap
This commit is contained in:
1 parent
5148d705d3
commit
8425b83ee9
6 files changed
+77
-71
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
+25
-21
@@ -34,7 +34,7 @@ Can you write one in the implemented subset of the language?
|
|||||||
|
|
||||||
#### What's this?
|
#### What's this?
|
||||||
|
|
||||||
Jav*script interpreter with Object, Array, String, Number, Functions and
|
Jav\*script interpreter with Object, Array, String, Number, Functions and
|
||||||
Garbage Collector. Batteries are not included.
|
Garbage Collector. Batteries are not included.
|
||||||
|
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ Included files via Makefile (to reduce number of tokens, lower than 5006/2):
|
|||||||
### Features
|
### Features
|
||||||
|
|
||||||
Supported and unsupported features (everything else that is not listed is
|
Supported and unsupported features (everything else that is not listed is
|
||||||
probaly unsupported, but who knows...):
|
probably unsupported, but who knows...):
|
||||||
|
|
||||||
- supported binary operators (in execution priority order from lower to higher);
|
- supported binary operators (in execution priority order from lower to higher);
|
||||||
<pre>, = == != & &= && | |= || > >= >> < <= << - -= + += * \*= / /= % %= [ ( .</pre>
|
<pre>, = == != & &= && | |= || > >= >> < <= << - -= + += * \*= / /= % %= [ ( .</pre>
|
||||||
@@ -171,7 +171,7 @@ probaly unsupported, but who knows...):
|
|||||||
- **only** single line comments are supported
|
- **only** single line comments are supported
|
||||||
- multi line comments are not supported. Use only single line comments
|
- multi line comments are not supported. Use only single line comments
|
||||||
- any unary operator on String value will convert String to Number
|
- any unary operator on String value will convert String to Number
|
||||||
- NaN is not implemented so invalid number convertion will generate a 0 Number
|
- NaN is not implemented so invalid number conversion will generate a 0 Number
|
||||||
- division by zero is not handled
|
- division by zero is not handled
|
||||||
- there is no error handling, so if something goes wrong, interpreter will
|
- there is no error handling, so if something goes wrong, interpreter will
|
||||||
crash. If some of the unsupported language features are used, parser will
|
crash. If some of the unsupported language features are used, parser will
|
||||||
@@ -199,9 +199,9 @@ probaly unsupported, but who knows...):
|
|||||||
- **length** on String variables (or literal) return the number of characters
|
- **length** on String variables (or literal) return the number of characters
|
||||||
in the string
|
in the string
|
||||||
- there is no slice or splice in String and Array (but these feature can be
|
- there is no slice or splice in String and Array (but these feature can be
|
||||||
partially implemented in plain Javascript -- see **Useful things** chapter)
|
partially implemented in plain JavaScript -- see **Useful things** chapter)
|
||||||
- there is no Date RegEx or Math (but some of Math methods can be implemented
|
- there is no Date RegEx or Math (but some of Math methods can be implemented
|
||||||
in plain Javascript)
|
in plain JavaScript)
|
||||||
- subscript operation like
|
- subscript operation like
|
||||||
|
|
||||||
``` <!---js-->
|
``` <!---js-->
|
||||||
@@ -228,15 +228,19 @@ probaly unsupported, but who knows...):
|
|||||||
```
|
```
|
||||||
|
|
||||||
but something different will happen when you perform some comparisons:
|
but something different will happen when you perform some comparisons:
|
||||||
|
|
||||||
* null == 0 will be equal to 1
|
* null == 0 will be equal to 1
|
||||||
* undefined == 0 will be equal to 1
|
* undefined == 0 will be equal to 1
|
||||||
* undefined == null will be equal to 0
|
* undefined == null will be equal to 0
|
||||||
* null == {} will be false (correctly)
|
* null == {} will be false (correctly)
|
||||||
* ... some other edge cases, can you spot them?
|
* ... some other edge cases, can you spot them?
|
||||||
- there is not **typeof** or **instanceof**. You need to know the types of your
|
|
||||||
|
- there is no `typeof` nor `instanceof`. You need to know the types of your
|
||||||
variables or track its type inside other data structures.
|
variables or track its type inside other data structures.
|
||||||
- **this** is missing. Inside Function you need to remember *this*
|
|
||||||
- **function** declaration is supported ONLY inside expression and not as a
|
- `this` is missing. Inside Function you need to remember `this`.
|
||||||
|
|
||||||
|
- Function declaration is supported ONLY inside expression and not as a
|
||||||
standalone declarator, so instead of this:
|
standalone declarator, so instead of this:
|
||||||
|
|
||||||
``` <!---js-->
|
``` <!---js-->
|
||||||
@@ -249,7 +253,7 @@ probaly unsupported, but who knows...):
|
|||||||
var x = function () {};
|
var x = function () {};
|
||||||
```
|
```
|
||||||
|
|
||||||
and please look at the final semicolon! It is very important beacuse every
|
and please look at the final semicolon! It is very important because every
|
||||||
expression need to terminate with that and without that strange parsing
|
expression need to terminate with that and without that strange parsing
|
||||||
things will happen (also probably some segmentation fault).
|
things will happen (also probably some segmentation fault).
|
||||||
Functions need to be unnamed by itself.
|
Functions need to be unnamed by itself.
|
||||||
@@ -303,10 +307,10 @@ probaly unsupported, but who knows...):
|
|||||||
|
|
||||||
because internally **arguments** array will be re-declared locally, with a
|
because internally **arguments** array will be re-declared locally, with a
|
||||||
stack based approach, for the next function call and can cause some variable
|
stack based approach, for the next function call and can cause some variable
|
||||||
resolving missmatch. This is a little annoying but is also better to always
|
resolving mismatch. This is a little annoying but is also better to always
|
||||||
remap each arguments value to a dedicated local variable.
|
remap each arguments value to a dedicated local variable.
|
||||||
- early exit inside logical expression is not implemented so this code will not
|
- early exit inside logical expression is not implemented so this code will not
|
||||||
be interrupted before the execution of the foo2 function:
|
be interrupted before the execution of the `foo2` function:
|
||||||
|
|
||||||
``` <!---js-->
|
``` <!---js-->
|
||||||
if (0 && foo2(123)) { print("hello\n"); }
|
if (0 && foo2(123)) { print("hello\n"); }
|
||||||
@@ -442,11 +446,11 @@ The interpreter uses the same struct to hold values and variables. The same
|
|||||||
struct (c) is also used to store a linked list for global variables and a linked
|
struct (c) is also used to store a linked list for global variables and a linked
|
||||||
list for all properties contained inside a variable.
|
list for all properties contained inside a variable.
|
||||||
|
|
||||||
Using the same struct has been usefull to strip down the code for a lesser number
|
Using the same struct has been useful to strip down the code for a lesser number
|
||||||
of tokens.
|
of tokens.
|
||||||
|
|
||||||
This is a semi obfuscated struct that holds variables or values (NOTE: obfuscated
|
This is a semi obfuscated struct that holds variables or values (NOTE: obfuscated
|
||||||
symbols can be slightly differents from the final obfuscated ones):
|
symbols can be slightly different from the final obfuscated ones):
|
||||||
|
|
||||||
``` <!---c-->
|
``` <!---c-->
|
||||||
typedef struct c*d;
|
typedef struct c*d;
|
||||||
@@ -469,10 +473,10 @@ symbols can be slightly differents from the final obfuscated ones):
|
|||||||
```
|
```
|
||||||
|
|
||||||
This struct is huge! It uses 72 bytes on 64bit X86 architecture. This struct is
|
This struct is huge! It uses 72 bytes on 64bit X86 architecture. This struct is
|
||||||
big to fit all the usefull data inside it and also something else that is
|
big to fit all the useful data inside it and also something else that is
|
||||||
needed to compress the code. In theory can be much smaller but the final code
|
needed to compress the code. In theory can be much smaller but the final code
|
||||||
will uses more tokens (I have tried multiple times to implement this interpreter
|
will uses more tokens (I have tried multiple times to implement this interpreter
|
||||||
but this is the only solution that i've found to match the 2503 limitation.. with
|
but this is the only solution that I've found to match the 2503 limitation.. with
|
||||||
the previous limit of 2053 was really hard to stay under the limits -- for me!).
|
the previous limit of 2053 was really hard to stay under the limits -- for me!).
|
||||||
Keep in mind also that on 64bit X86 architecture each pointer cost 8 bytes...
|
Keep in mind also that on 64bit X86 architecture each pointer cost 8 bytes...
|
||||||
|
|
||||||
@@ -640,7 +644,7 @@ Strange things can happen or can be found when using this interpreter:
|
|||||||
- many other unknown strange things can happen in Hawkins, Indiana...
|
- many other unknown strange things can happen in Hawkins, Indiana...
|
||||||
|
|
||||||
|
|
||||||
### Usefull Things
|
### Useful Things
|
||||||
|
|
||||||
Console prototype is not implemented but console.log can be implemented using
|
Console prototype is not implemented but console.log can be implemented using
|
||||||
only native **print** function. The following is an example of Console
|
only native **print** function. The following is an example of Console
|
||||||
@@ -1146,7 +1150,7 @@ been stripped down in the final (light) obfuscated version of the code*
|
|||||||
atmp[0 + 1];", 20);
|
atmp[0 + 1];", 20);
|
||||||
```
|
```
|
||||||
|
|
||||||
Some of these tests has also been ported in plain javascript; take a look inside
|
Some of these tests has also been ported in plain JavaScript; take a look inside
|
||||||
the **verify.js** script. These tests uses **eval()** function to execute a test
|
the **verify.js** script. These tests uses **eval()** function to execute a test
|
||||||
source code string and verify its execution results. These other tests can be
|
source code string and verify its execution results. These other tests can be
|
||||||
executed with this command:
|
executed with this command:
|
||||||
@@ -1181,16 +1185,16 @@ little mambo jumbo interpreter:
|
|||||||
### Final Thoughts
|
### Final Thoughts
|
||||||
|
|
||||||
I've tried multiple time to rewrite this interpreter and compress the final
|
I've tried multiple time to rewrite this interpreter and compress the final
|
||||||
obfuscated sourcecode to match the previous IOCCC limit but without success.
|
obfuscated source code to match the previous IOCCC limit but without success.
|
||||||
|
|
||||||
The increased limitation of tokens from 2053 to 2503 has made possible to use
|
The increased limitation of tokens from 2053 to 2503 has made possible to use
|
||||||
this iteration of the interpreter without continue to retry to rewrite that to
|
this iteration of the interpreter without continue to retry to rewrite that to
|
||||||
compress the final sourcecode. Probably with more iterations the 2053 limit
|
compress the final source code. Probably with more iterations the 2053 limit
|
||||||
should be reached, who knows.
|
should be reached, who knows.
|
||||||
|
|
||||||
The most tricky part in the development process has been to find out a minimal
|
The most tricky part in the development process has been to find out a minimal
|
||||||
barebone subset of Javascript features, small enought to allow to build some
|
bare bones subset of JavaScript features, small enough to allow to build some
|
||||||
other standard features on top of the barebone interpreter.
|
other standard features on top of the bare bones interpreter.
|
||||||
|
|
||||||
In many tests I've tried to include the Object.keys features (to obtain the
|
In many tests I've tried to include the Object.keys features (to obtain the
|
||||||
list of property keys inside a given Object) but, in all of my attempts, the
|
list of property keys inside a given Object) but, in all of my attempts, the
|
||||||
|
|||||||
+37
-35
@@ -25,14 +25,14 @@
|
|||||||
<!-- END: this line ends content from: inc/head.default.html -->
|
<!-- END: this line ends content from: inc/head.default.html -->
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- This web page was formed via the tool: bin/readme2index.sh -->
|
<!-- This web page was formed via the tool: unspecified -->
|
||||||
<!-- The content of main section of this web page came from: 2024/maffiodo/README.md -->
|
<!-- The main section of this web page came from JSON and other data files -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
|
||||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||||
<!-- !!! Do not modify this web page, instead modify the file: 2024/maffiodo/README.md !!! -->
|
<!-- The main section of this web page was generated via the tool: unspecified -->
|
||||||
<!-- !!! Do not modify this web page, instead modify the file: 2024/maffiodo/README.md !!! -->
|
<!-- The main section of this web page was generated via the tool: unspecified -->
|
||||||
<!-- !!! Do not modify this web page, instead modify the file: 2024/maffiodo/README.md !!! -->
|
<!-- The main section of this web page was generated via the tool: unspecified -->
|
||||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||||
|
|
||||||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||||||
@@ -447,7 +447,7 @@
|
|||||||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/maffiodo/prog.c">C code</a>
|
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/maffiodo/prog.c">C code</a>
|
||||||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/maffiodo/Makefile">Makefile</a>
|
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/maffiodo/Makefile">Makefile</a>
|
||||||
<a class="Right" href="#inventory">Inventory</a>
|
<a class="Right" href="#inventory">Inventory</a>
|
||||||
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2024%2Fmaffiodo%2Findex.html">✓</a>
|
<a class="Right" href="https://validator.w3.org/nu/?doc=#">✓</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- END: this line ends content from: inc/navbar.mid.html -->
|
<!-- END: this line ends content from: inc/navbar.mid.html -->
|
||||||
@@ -533,7 +533,7 @@ declared without a full prototype</li>
|
|||||||
</ul>
|
</ul>
|
||||||
<h3 id="features">Features</h3>
|
<h3 id="features">Features</h3>
|
||||||
<p>Supported and unsupported features (everything else that is not listed is
|
<p>Supported and unsupported features (everything else that is not listed is
|
||||||
probaly unsupported, but who knows…):</p>
|
probably unsupported, but who knows…):</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>supported binary operators (in execution priority order from lower to higher);
|
<li>supported binary operators (in execution priority order from lower to higher);
|
||||||
<pre>, = == != & &= && | |= || > >= >> < <= << - -= + += * \*= / /= % %= [ ( .</pre>
|
<pre>, = == != & &= && | |= || > >= >> < <= << - -= + += * \*= / /= % %= [ ( .</pre>
|
||||||
@@ -603,7 +603,7 @@ statement ends)</li>
|
|||||||
<li><strong>only</strong> single line comments are supported</li>
|
<li><strong>only</strong> single line comments are supported</li>
|
||||||
<li>multi line comments are not supported. Use only single line comments</li>
|
<li>multi line comments are not supported. Use only single line comments</li>
|
||||||
<li>any unary operator on String value will convert String to Number</li>
|
<li>any unary operator on String value will convert String to Number</li>
|
||||||
<li>NaN is not implemented so invalid number convertion will generate a 0 Number</li>
|
<li>NaN is not implemented so invalid number conversion will generate a 0 Number</li>
|
||||||
<li>division by zero is not handled</li>
|
<li>division by zero is not handled</li>
|
||||||
<li>there is no error handling, so if something goes wrong, interpreter will
|
<li>there is no error handling, so if something goes wrong, interpreter will
|
||||||
crash. If some of the unsupported language features are used, parser will
|
crash. If some of the unsupported language features are used, parser will
|
||||||
@@ -629,9 +629,9 @@ also true for Array (see <strong>Strange(r) Things</strong> chapter)</li>
|
|||||||
<li><strong>length</strong> on String variables (or literal) return the number of characters
|
<li><strong>length</strong> on String variables (or literal) return the number of characters
|
||||||
in the string</li>
|
in the string</li>
|
||||||
<li>there is no slice or splice in String and Array (but these feature can be
|
<li>there is no slice or splice in String and Array (but these feature can be
|
||||||
partially implemented in plain Javascript – see <strong>Useful things</strong> chapter)</li>
|
partially implemented in plain JavaScript – see <strong>Useful things</strong> chapter)</li>
|
||||||
<li>there is no Date RegEx or Math (but some of Math methods can be implemented
|
<li>there is no Date RegEx or Math (but some of Math methods can be implemented
|
||||||
in plain Javascript)</li>
|
in plain JavaScript)</li>
|
||||||
<li>subscript operation like</li>
|
<li>subscript operation like</li>
|
||||||
</ul>
|
</ul>
|
||||||
<pre><code> x[1]</code></pre>
|
<pre><code> x[1]</code></pre>
|
||||||
@@ -646,21 +646,23 @@ value. This is not true in this mini nano tiny puppy ugly interpreter
|
|||||||
- null and undefined are not implemented but can be declared like this:</p>
|
- null and undefined are not implemented but can be declared like this:</p>
|
||||||
<pre><code> var null = {};
|
<pre><code> var null = {};
|
||||||
var undefined = {};</code></pre>
|
var undefined = {};</code></pre>
|
||||||
<p>but something different will happen when you perform some comparisons:
|
<p>but something different will happen when you perform some comparisons:</p>
|
||||||
* null == 0 will be equal to 1
|
<ul>
|
||||||
* undefined == 0 will be equal to 1
|
<li><p>null == 0 will be equal to 1</p></li>
|
||||||
* undefined == null will be equal to 0
|
<li><p>undefined == 0 will be equal to 1</p></li>
|
||||||
* null == {} will be false (correctly)
|
<li><p>undefined == null will be equal to 0</p></li>
|
||||||
* … some other edge cases, can you spot them?
|
<li><p>null == {} will be false (correctly)</p></li>
|
||||||
- there is not <strong>typeof</strong> or <strong>instanceof</strong>. You need to know the types of your
|
<li><p>… some other edge cases, can you spot them?</p></li>
|
||||||
variables or track its type inside other data structures.
|
<li><p>there is no <code>typeof</code> nor <code>instanceof</code>. You need to know the types of your
|
||||||
- <strong>this</strong> is missing. Inside Function you need to remember <em>this</em>
|
variables or track its type inside other data structures.</p></li>
|
||||||
- <strong>function</strong> declaration is supported ONLY inside expression and not as a
|
<li><p><code>this</code> is missing. Inside Function you need to remember <code>this</code>.</p></li>
|
||||||
standalone declarator, so instead of this:</p>
|
<li><p>Function declaration is supported ONLY inside expression and not as a
|
||||||
|
standalone declarator, so instead of this:</p></li>
|
||||||
|
</ul>
|
||||||
<pre><code> function x() {}</code></pre>
|
<pre><code> function x() {}</code></pre>
|
||||||
<p>write this:</p>
|
<p>write this:</p>
|
||||||
<pre><code> var x = function () {};</code></pre>
|
<pre><code> var x = function () {};</code></pre>
|
||||||
<p>and please look at the final semicolon! It is very important beacuse every
|
<p>and please look at the final semicolon! It is very important because every
|
||||||
expression need to terminate with that and without that strange parsing
|
expression need to terminate with that and without that strange parsing
|
||||||
things will happen (also probably some segmentation fault).
|
things will happen (also probably some segmentation fault).
|
||||||
Functions need to be unnamed by itself.
|
Functions need to be unnamed by itself.
|
||||||
@@ -696,10 +698,10 @@ instead of this:</li>
|
|||||||
};</code></pre>
|
};</code></pre>
|
||||||
<p>because internally <strong>arguments</strong> array will be re-declared locally, with a
|
<p>because internally <strong>arguments</strong> array will be re-declared locally, with a
|
||||||
stack based approach, for the next function call and can cause some variable
|
stack based approach, for the next function call and can cause some variable
|
||||||
resolving missmatch. This is a little annoying but is also better to always
|
resolving mismatch. This is a little annoying but is also better to always
|
||||||
remap each arguments value to a dedicated local variable.
|
remap each arguments value to a dedicated local variable.
|
||||||
- early exit inside logical expression is not implemented so this code will not
|
- early exit inside logical expression is not implemented so this code will not
|
||||||
be interrupted before the execution of the foo2 function:</p>
|
be interrupted before the execution of the <code>foo2</code> function:</p>
|
||||||
<pre><code> if (0 && foo2(123)) { print("hello\n"); }</code></pre>
|
<pre><code> if (0 && foo2(123)) { print("hello\n"); }</code></pre>
|
||||||
<p>and this is clearly not standard (in ECMA, Yes you can)
|
<p>and this is clearly not standard (in ECMA, Yes you can)
|
||||||
- accessing properties on literal String or Number is not supported; For
|
- accessing properties on literal String or Number is not supported; For
|
||||||
@@ -809,10 +811,10 @@ tests</strong> chapter):</p>
|
|||||||
<p>The interpreter uses the same struct to hold values and variables. The same
|
<p>The interpreter uses the same struct to hold values and variables. The same
|
||||||
struct (c) is also used to store a linked list for global variables and a linked
|
struct (c) is also used to store a linked list for global variables and a linked
|
||||||
list for all properties contained inside a variable.</p>
|
list for all properties contained inside a variable.</p>
|
||||||
<p>Using the same struct has been usefull to strip down the code for a lesser number
|
<p>Using the same struct has been useful to strip down the code for a lesser number
|
||||||
of tokens.</p>
|
of tokens.</p>
|
||||||
<p>This is a semi obfuscated struct that holds variables or values (NOTE: obfuscated
|
<p>This is a semi obfuscated struct that holds variables or values (NOTE: obfuscated
|
||||||
symbols can be slightly differents from the final obfuscated ones):</p>
|
symbols can be slightly different from the final obfuscated ones):</p>
|
||||||
<pre><code> typedef struct c*d;
|
<pre><code> typedef struct c*d;
|
||||||
struct c{
|
struct c{
|
||||||
union{
|
union{
|
||||||
@@ -831,10 +833,10 @@ symbols can be slightly differents from the final obfuscated ones):</p>
|
|||||||
int r; // array length / properties length
|
int r; // array length / properties length
|
||||||
} ;</code></pre>
|
} ;</code></pre>
|
||||||
<p>This struct is huge! It uses 72 bytes on 64bit X86 architecture. This struct is
|
<p>This struct is huge! It uses 72 bytes on 64bit X86 architecture. This struct is
|
||||||
big to fit all the usefull data inside it and also something else that is
|
big to fit all the useful data inside it and also something else that is
|
||||||
needed to compress the code. In theory can be much smaller but the final code
|
needed to compress the code. In theory can be much smaller but the final code
|
||||||
will uses more tokens (I have tried multiple times to implement this interpreter
|
will uses more tokens (I have tried multiple times to implement this interpreter
|
||||||
but this is the only solution that i’ve found to match the 2503 limitation.. with
|
but this is the only solution that I’ve found to match the 2503 limitation.. with
|
||||||
the previous limit of 2053 was really hard to stay under the limits – for me!).
|
the previous limit of 2053 was really hard to stay under the limits – for me!).
|
||||||
Keep in mind also that on 64bit X86 architecture each pointer cost 8 bytes…</p>
|
Keep in mind also that on 64bit X86 architecture each pointer cost 8 bytes…</p>
|
||||||
<p>The interpreter uses a large amount of RAM, creating many temporary values
|
<p>The interpreter uses a large amount of RAM, creating many temporary values
|
||||||
@@ -950,7 +952,7 @@ instead
|
|||||||
<p>and this will work like var has been typed one time. Can you find out where
|
<p>and this will work like var has been typed one time. Can you find out where
|
||||||
this has been allowed inside the source code? (hint: goto)
|
this has been allowed inside the source code? (hint: goto)
|
||||||
- many other unknown strange things can happen in Hawkins, Indiana…</p>
|
- many other unknown strange things can happen in Hawkins, Indiana…</p>
|
||||||
<h3 id="usefull-things">Usefull Things</h3>
|
<h3 id="useful-things">Useful Things</h3>
|
||||||
<p>Console prototype is not implemented but console.log can be implemented using
|
<p>Console prototype is not implemented but console.log can be implemented using
|
||||||
only native <strong>print</strong> function. The following is an example of Console
|
only native <strong>print</strong> function. The following is an example of Console
|
||||||
implementation (found also inside console.js file):</p>
|
implementation (found also inside console.js file):</p>
|
||||||
@@ -1412,7 +1414,7 @@ been stripped down in the final (light) obfuscated version of the code</em></p>
|
|||||||
atmp[0] = 10; \
|
atmp[0] = 10; \
|
||||||
atmp[1] = 20; \
|
atmp[1] = 20; \
|
||||||
atmp[0 + 1];", 20);</code></pre>
|
atmp[0 + 1];", 20);</code></pre>
|
||||||
<p>Some of these tests has also been ported in plain javascript; take a look inside
|
<p>Some of these tests has also been ported in plain JavaScript; take a look inside
|
||||||
the <strong>verify.js</strong> script. These tests uses <strong>eval()</strong> function to execute a test
|
the <strong>verify.js</strong> script. These tests uses <strong>eval()</strong> function to execute a test
|
||||||
source code string and verify its execution results. These other tests can be
|
source code string and verify its execution results. These other tests can be
|
||||||
executed with this command:</p>
|
executed with this command:</p>
|
||||||
@@ -1439,14 +1441,14 @@ Collector cannot recognize this kind of structure</li>
|
|||||||
</ul>
|
</ul>
|
||||||
<h3 id="final-thoughts">Final Thoughts</h3>
|
<h3 id="final-thoughts">Final Thoughts</h3>
|
||||||
<p>I’ve tried multiple time to rewrite this interpreter and compress the final
|
<p>I’ve tried multiple time to rewrite this interpreter and compress the final
|
||||||
obfuscated sourcecode to match the previous IOCCC limit but without success.</p>
|
obfuscated source code to match the previous IOCCC limit but without success.</p>
|
||||||
<p>The increased limitation of tokens from 2053 to 2503 has made possible to use
|
<p>The increased limitation of tokens from 2053 to 2503 has made possible to use
|
||||||
this iteration of the interpreter without continue to retry to rewrite that to
|
this iteration of the interpreter without continue to retry to rewrite that to
|
||||||
compress the final sourcecode. Probably with more iterations the 2053 limit
|
compress the final source code. Probably with more iterations the 2053 limit
|
||||||
should be reached, who knows.</p>
|
should be reached, who knows.</p>
|
||||||
<p>The most tricky part in the development process has been to find out a minimal
|
<p>The most tricky part in the development process has been to find out a minimal
|
||||||
barebone subset of Javascript features, small enought to allow to build some
|
bare bones subset of JavaScript features, small enough to allow to build some
|
||||||
other standard features on top of the barebone interpreter.</p>
|
other standard features on top of the bare bones interpreter.</p>
|
||||||
<p>In many tests I’ve tried to include the Object.keys features (to obtain the
|
<p>In many tests I’ve tried to include the Object.keys features (to obtain the
|
||||||
list of property keys inside a given Object) but, in all of my attempts, the
|
list of property keys inside a given Object) but, in all of my attempts, the
|
||||||
limitation on tokens count was exceeded. With Object.keys would have been
|
limitation on tokens count was exceeded. With Object.keys would have been
|
||||||
@@ -1568,7 +1570,7 @@ Jump to: <a href="#">top</a>
|
|||||||
|
|
||||||
<div id="coda"><h3>Coda</h3>
|
<div id="coda"><h3>Coda</h3>
|
||||||
<p>
|
<p>
|
||||||
<a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2024%2Fmaffiodo%2Findex.html" rel="nofollow">Nu HTML check this web page</a><br>
|
<a href="https://validator.w3.org/nu/?doc=#" rel="nofollow">Nu HTML check this web page</a><br>
|
||||||
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a><br>
|
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a><br>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+15
-15
@@ -14270,7 +14270,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/2024.tar.bz2</loc>
|
<loc>https://www.ioccc.org/2024/2024.tar.bz2</loc>
|
||||||
<lastmod>2025-08-03T02:31:11+00:00</lastmod>
|
<lastmod>2025-08-03T03:17:16+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/anders/2024_anders.tar.bz2</loc>
|
<loc>https://www.ioccc.org/2024/anders/2024_anders.tar.bz2</loc>
|
||||||
@@ -14742,7 +14742,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/2024_ferguson1.tar.bz2</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/2024_ferguson1.tar.bz2</loc>
|
||||||
<lastmod>2025-08-03T02:30:56+00:00</lastmod>
|
<lastmod>2025-08-03T03:17:03+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/addpadding.c</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/addpadding.c</loc>
|
||||||
@@ -14770,15 +14770,15 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/data.asc.src</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/data.asc.src</loc>
|
||||||
<lastmod>2025-07-05T06:08:05+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/data.scrnshot.src</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/data.scrnshot.src</loc>
|
||||||
<lastmod>2025-07-05T06:08:05+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/data.src</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/data.src</loc>
|
||||||
<lastmod>2025-07-05T06:08:05+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/deobfuscation.html</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/deobfuscation.html</loc>
|
||||||
@@ -14798,7 +14798,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/index.html</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/index.html</loc>
|
||||||
<lastmod>2025-07-26T20:39:36+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/ioccc.jpg</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/ioccc.jpg</loc>
|
||||||
@@ -14810,7 +14810,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/makedata.sh</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/makedata.sh</loc>
|
||||||
<lastmod>2025-07-05T06:08:05+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/Makefile</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/Makefile</loc>
|
||||||
@@ -14846,7 +14846,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/README.md</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/README.md</loc>
|
||||||
<lastmod>2025-07-22T16:09:02+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/spaghetti.png</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/spaghetti.png</loc>
|
||||||
@@ -14854,15 +14854,15 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/strings.asc.loc.txt</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/strings.asc.loc.txt</loc>
|
||||||
<lastmod>2025-07-12T17:44:42+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/strings.loc.txt</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/strings.loc.txt</loc>
|
||||||
<lastmod>2025-07-12T17:44:42+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/strings.scrnshot.loc.txt</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/strings.scrnshot.loc.txt</loc>
|
||||||
<lastmod>2025-07-12T17:44:42+00:00</lastmod>
|
<lastmod>2025-08-03T03:03:49+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/ferguson1/travelguide.jpg</loc>
|
<loc>https://www.ioccc.org/2024/ferguson1/travelguide.jpg</loc>
|
||||||
@@ -15214,7 +15214,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/maffiodo/2024_maffiodo.tar.bz2</loc>
|
<loc>https://www.ioccc.org/2024/maffiodo/2024_maffiodo.tar.bz2</loc>
|
||||||
<lastmod>2025-08-01T19:41:25+00:00</lastmod>
|
<lastmod>2025-08-03T03:17:04+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/maffiodo/array.js</loc>
|
<loc>https://www.ioccc.org/2024/maffiodo/array.js</loc>
|
||||||
@@ -15234,7 +15234,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/maffiodo/index.html</loc>
|
<loc>https://www.ioccc.org/2024/maffiodo/index.html</loc>
|
||||||
<lastmod>2025-07-26T20:39:52+00:00</lastmod>
|
<lastmod>2025-08-03T03:08:08+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/maffiodo/Makefile</loc>
|
<loc>https://www.ioccc.org/2024/maffiodo/Makefile</loc>
|
||||||
@@ -15254,7 +15254,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/maffiodo/README.md</loc>
|
<loc>https://www.ioccc.org/2024/maffiodo/README.md</loc>
|
||||||
<lastmod>2025-07-12T17:44:42+00:00</lastmod>
|
<lastmod>2025-08-03T03:06:58+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/2024/maffiodo/string.js</loc>
|
<loc>https://www.ioccc.org/2024/maffiodo/string.js</loc>
|
||||||
@@ -16918,7 +16918,7 @@
|
|||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/status.html</loc>
|
<loc>https://www.ioccc.org/status.html</loc>
|
||||||
<lastmod>2025-08-03T02:36:53+00:00</lastmod>
|
<lastmod>2025-08-03T03:12:26+00:00</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://www.ioccc.org/status.json</loc>
|
<loc>https://www.ioccc.org/status.json</loc>
|
||||||
|
|||||||
Reference in new issue
Block a user