Menu

Deprecated_GML

Hugh Greene

Mostly because GML is for novices and also for
efficiency, some of GML's behaviours have been discarded.

Deprecated GM Functions can be found on the
:Category:Function:Obsolete
list.

Things we're never looking back at

This is so foul, no one wants to touch it (meaning, Josh doesn't)

for(;;;) Syntax

In GML, for (i = 0; i < 10; i += 1;) {} is valid code, however, for (i = 0; i < 10; i += 1); is not (in early versions, it passes the
syntax check but fails at tree build time during load). Additionally,
the following is
valid:

for ({statement1 = 0; statement2 = 0; statement3 = 0; i = 0;}; i < 10; {statement1 += 1; statement2 += 2; statement3 += 3; i += 1; }) {}

{{-}}

Stuff we might add a setting for

Some of these are useful to people and/or are easy to implement. They
may be added if it's requested by someone in a pickle.

Worthless do Syntax

In GML as of GM8, do is extraneous when following with() or
while(). with(all) do { x += 1; } until (place_free(x,y)); is
therefore invalid. This was discarded.

var::operator* (int, string)

In GM8, 5 * "tree" yields "treetreetreetreetree". ~~No one has yet
confirmed~~ Rusky has confirmed this was the behavior in GM6
(Josh thought the opposite), and so it will probably be implemented as a
compatibility option. GM6 offers string_repeat in lieu of this
functionality, as does ENIGMA. A setting for this would entail only
keeping two separate object files for var4.cpp.

No short-circuiting

In GM, statements are not short circuited, in ENIGMA they are.

{{-}}

What may get put in a compatibility pass

TGMG wrote a regexer that takes care of some incompatibilities. Here we
list incompatibilities that could possibly be added.

Comma-free declarations

GM doesn't care if you use commas in your declarations or not, and
doesn't even make you end them with a semicolon,

var a b c, d e f, g h i
if (j == k + l) {}

so long as you don't assign to anything immediately afterward. This
gives a syntax error:

var a b c
a = 10

Discarded. A regexer can add a comma after any variable following
`var` (or other variables following it) which is not followed by a
keyword. ENIGMA will correctly deal with the semicolon.

Delphi assignment in conditionals

if (a := b) {
}

Some disgusting animals are so convinced the equals operator is designed
to both assign and compare that they actually use the strict Delphi
assignment (:=) in conditionals to test them. A regexer could replace
all := with = and let ENIGMA discern which it should be.

Hot lookup change for var

In GM, you can conditionally move the scope of a variable to the global
or script-local scope by stating "globalvar var_name" or "var
var_name", respectively. The latter is done at lex time, as soon as the
statement is read. This means that var does not depend on scope in GML.
In EDL, it is defined to by the C standard. Some 95 percent of use cases
can be fixed by moving all var declarations to the top of the script.

Assigning to void function

In GM you can make assignments to a void returning function.

Semicolons, everywhere!

In GM, the semicolon is basically decoration between statements.

if (a) { ... }; ; ; ; ; ; else {}

is fine.

Regex replace any /}(((\s*);)+)/ with just "}" in a compatibility
pass, and the main use-case is fixed.


Related

Wiki: Deprecated
Wiki: Discarded_GML
Wiki: GML
Wiki: GM_Incompatibilities

MongoDB Logo MongoDB