Josh @ Dreamland
|
 |
Reply #15 Posted on: December 30, 2012, 01:21:56 am |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
Very well. At least it's somewhat original. Just likely to get recycled a lot.
In other news, I went ahead and pushed my current working copy of the parser. A lot of integration needs done, but the parser is basically complete. I spent the last day or so shelling out all the old compiler warnings and doing some major reorganization.
This may be done by tomorrow night.
|
|
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
Josh @ Dreamland
|
 |
Reply #16 Posted on: December 31, 2012, 02:21:57 am |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
Didn't happen. Ended up cleaning up some mess in JDI instead, correcting some bugs I was unaware of. Also did some much-needed testing; any test codes welcome so I have something to check before we're ready to unleash this on the masses. Hopefully TGMG will be around to automate that for us again.
In the meantime, the parser reads and gives a dump of test_gml.h in the JDI branch if you build the CBP in either of the standalone modes. It should build without warnings, except in the placeholder file that declares empty versions of the old parse functions to prevent link errors, because the new parser is still not integrated.
In fact, I'm still working out how many passes I should handle up front and how many I should leave to the language plugin. I want to minimize both numbers, but especially the latter, so as to facilitate easy extension of the compiler.
|
|
« Last Edit: December 31, 2012, 02:23:43 am by Josh @ Dreamland »
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
polygone
|
 |
Reply #17 Posted on: December 31, 2012, 07:07:39 am |
|
|
 Location: England Joined: Mar 2009
Posts: 794
|
Josh run through the examples posted on the EDC.
|
|
|
Logged
|
I honestly don't know wtf I'm talking about but hopefully I can muddle my way through.
|
|
|
Josh @ Dreamland
|
 |
Reply #18 Posted on: December 31, 2012, 09:44:41 am |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
I will when it is building games again. For now, all it can do is single code pieces.
Today will be spent moving code around and writing a pretty printer. If all goes well, I'll finish both things and be done. Otherwise... More delay.
|
|
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
Josh @ Dreamland
|
 |
Reply #19 Posted on: January 02, 2013, 02:40:59 pm |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
Just so everyone knows, I am adding something to ENIGMA's specification after the parser is plugged in:
object0.variable = 10; int a = object0.id; a.variable = 20; object0[a].variable = 30;
Humans can tell what that's doing, but a parser cannot necessarily make that call. Maybe if I spent a great lot of time on it, it could, but in general you should expect this output from the C++ printer:
((ENIGMA_OBJ_object0*)fetch_instance_by_objectid(object0))->variable = 10; int a = enigma::fetch_instance_by_objectid(object0)->id; enigma::varaccess_variable(a) = 20; ((ENIGMA_OBJ_object0*)fetch_instance_by_id(a))->variable = 30;
The idea is that the switch statement used in varaccess_variable is removed, and does not even need to be generated if `variable' is never accessed in that way. It'll still be generated as needed for compatibility, of course.
Note as well that I may optimize it further and generate an inline function for each object as needed, or just access them inline (more likely the former for reasons of error checking and general prettiness). Still, you get the idea.
|
|
« Last Edit: January 02, 2013, 04:13:19 pm by Josh @ Dreamland »
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
|
Josh @ Dreamland
|
 |
Reply #21 Posted on: January 02, 2013, 04:13:26 pm |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
Because copypasta fail. Thanks. Fix'd.
The variable object0 is an object name, so it's an object_index.
|
|
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
polygone
|
 |
Reply #22 Posted on: January 02, 2013, 07:41:30 pm |
|
|
 Location: England Joined: Mar 2009
Posts: 794
|
I don't get the point.
|
|
|
Logged
|
I honestly don't know wtf I'm talking about but hopefully I can muddle my way through.
|
|
|
Josh @ Dreamland
|
 |
Reply #23 Posted on: January 02, 2013, 09:10:20 pm |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
You wouldn't.
|
|
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
Josh @ Dreamland
|
 |
Reply #24 Posted on: January 03, 2013, 04:47:15 pm |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
Quick update:
Sorry that this is taking so long. While the parser is basically plugged in, I did not even consider how much work is involved in the other major operation I am taking care of: abstracting the language being compiled to.
The compiler now knows literally nothing about the host language; I have to move tons of ancient code from the global scope to various subclasses to facilitate having multiple implementations for multiple languages. It is genuinely a pain.
I have no accurate ETA, but I'm going to be spending 90% of my waking time on it. It must be done before Sunday night.
|
|
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
forthevin
|
 |
Reply #25 Posted on: January 05, 2013, 04:02:10 pm |
|
|
 Joined: Jun 2012
Posts: 167
|
A couple of thoughts and comments: First off, spending 90% of one's waking time on something sounds less than healthy. Wouldn't it make more sense to postpone the new parser and compiler if it takes unexpectedly more time? ENIGMA seems to work pretty well at the moment, so I have trouble seeing the hurry. Second off, I am happy to announce that the particle systems system is coming along well. Several examples work now, including the fireworks example from the manual ( http://gamemaker.info/en/manual/412_08_example), as well as a nice fire effect example I found ( http://blog.martincrownover.com/gamemaker-examples-tutorials/particle-example-fire/). There is still a lot missing, including effects, changers, destroyers, deflectors and attractors, but the system is quite usable at the moment. Third off, ENIGMA has been very functional for quite a while, and I would therefore like to propose that a forum is created, named Works in Progress, where games in development can be shown and talked about.
|
|
|
Logged
|
|
|
|
Josh @ Dreamland
|
 |
Reply #26 Posted on: January 05, 2013, 06:01:09 pm |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
The new parser's is important to me because it means we can finally have extensions and additional host languages (eg, JavaScript). I've made the compiler so modular locally that TGMG should have *zero* difficulty finally making the Android part work out of the box.
Moreover, the compiler was in need of some redesign—a lot of it was thrown together hastily, and in a scatterbrained manner. I can't expect other people to maintain it if I can't even cleanly describe its pieces. After this, it should be much easier to tell what is going on in the compiler code.
|
|
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
|
|
Josh @ Dreamland
|
 |
Reply #29 Posted on: January 09, 2013, 12:49:33 am |
|
|
Prince of all Goldfish
 Location: Pittsburgh, PA, USA Joined: Feb 2008
Posts: 2950
|
See the commit message from my last commit to get an idea of where I am. Restructured and reorganized fuck-everything. Changed around fuck-everything. My brain hurts from thinking about this shit for so long, and some of it still needs modification. I have encapsulated most of everything correctly.
Remaining considerations: - Events.res locals are still loaded by lang_CPP; they should be loaded universally. - Where are events even parsed? I totally lost track. Being honest. - We need a system for denoting where something was declared, for error reporting purposes. - JDI handles some of its AST features funny - It checks the left-hand of a function call and bails if it's not a function or cast - It crams all the literal types into one AST node type - It doesn't handle error reporting very well, and, to top it all off, - It isn't fucking modular or extensible at all; nothing is abstract or virtual - I have no idea if a second pass before pretty-print is actually required - None of this outside the basic parser has been tested, and it's not blowing me away, either - No amount of therapy will make this commit okay I have done some more thinking, and determined that if we want to properly support overloading EDL functions regardless of host language (C and JavaScript being prime examples of languages which do not support overloading), we need a second pass after I'm aware of the types of everything in order to pick the correct overload. Still haven't decided what to do with generics, for that matter, but that's another case.
|
|
|
Logged
|
"That is the single most cryptic piece of code I have ever seen." -Master PobbleWobble "I disapprove of what you say, but I will defend to the death your right to say it." -Evelyn Beatrice Hall, Friends of Voltaire
|
|
|
|