<div dir="ltr"><div>Hello all.</div><div><br></div><div>I am a bit new to OpenSim development (well at-least sharing stuff I have made..) but for a quite a while now I have been working on</div><div>a new (BSD Licensed) Compilation/Code Generation framework for LSL, tailored towards usage with OpenSim.  I thought I should share it </div><div>at this point of its development.</div><div><br></div><div><br></div><div>This is pretty much a "full" or "true" compiler front end.</div><div><br></div><div>It's built on-top of ANTLR4 and ANTLR4's CSharp target.</div><div>ANTLR4 however has been completely abstracted and the library provides its own Rich LSL Syntax Tree for users to deal with.</div><div><br></div><div>My library includes an OpenSim code generation target which I have integrated into my OpenSim fork on GitHub, it's implemented as an </div><div>optional compiler that you can enable in your OpenSim.ini.</div><div><br></div><div><br></div><div>The Code validation step my library performs when building a syntax tree implements full front end syntax checking, dead code detection, the works.</div><div>It also emits extended warning information that is standard to most compilers now days. </div><div><br></div><div><br></div><div>The OpenSim code generator I have written and included with the library drastically improves compatibility with scripts written for SecondLife.</div><div>Order of evaluation in generated code is correct for LSL (Right to Left) among many other things.</div><div><br></div><div>As an example, all of the encryption scripts you can find on the LSL wiki will compile correctly and execute with correct behavior using my compiler.</div><div><br></div><div><br></div><div>The README.md for the project goes into a bit more detail on what all the library can do.</div><div><br></div><div><br></div><div>My library LibLSLCC is on GitHub here:</div><div><br></div><div><span class="" style="white-space:pre">   </span><a href="https://github.com/EriHoss/LibLSLCC">https://github.com/EriHoss/LibLSLCC</a></div><div><span class="" style="white-space:pre">        </span></div><div><br></div><div><br></div><div>The project includes an LSL Editor (Windows Only, I used AvalonEdit) with the project that features code completion and syntax highlighting.</div><div><br></div><div>It can be used to test CSharp code generation for OpenSim by compiling LSL into C# using LibLSLCC, which can then be uploaded to an</div><div>OpenSim server with C# scripting enabled.</div><div><br></div><div>The library itself is cross-platform, but the editor and editor installer are not.  There's a separate project file for building the library on</div><div>mono with monodevelop/xbuild.</div><div><br></div><div><br></div><div>===</div><div><br></div><div><br></div><div>The OpenSim fork that integrates my compiler is here:</div><div><br></div><div><span class="" style="white-space:pre">        </span><a href="https://github.com/EriHoss/OpenSim_With_LibLSLCC">https://github.com/EriHoss/OpenSim_With_LibLSLCC</a></div><div><br></div><div><br></div><div>It includes a few minor bug fixes to XEngine and Runtime Script functions. </div><div><br></div><div>Such as the 'IdleTimeout' setting not being honored properly.</div><div><br></div><div>And llParseString2List using culture specific comparisons, causing it to misbehave when comparing Unicode characters on Mono.</div><div><br></div><div><br></div><div><br></div><div>I have added new attributes to OpenSim's script module constants/functions and also to ScriptBaseClass.  </div><div>This is so LibLSLCC can de-serialize the classes into library data that's consumable by its code validator and code generator.</div><div><br></div><div>I have also made some slight changes to IScriptModuleComms and ScriptModuleCommsModule.</div><div><br></div><div>The old compiler in my fork works as it did before, so you can switch back and forth from LibLSLCC to the old compiler</div><div>if you want without any problems.</div><div><br></div><div>There are more details on the changes I have made in the README.md.<br></div><div><br></div><div><br></div><div>==</div><div><br></div><div><span class="" style="white-space:pre">        </span></div><div>I started working on this sometime early last year when I broke my wrist and was unable to do much for a while, and</div><div>I have only recently moved the code from my Git server up to GitHub.  I'm going to continue improving this in my spare time,</div><div>right now I am doing rolling releases versioned by date anywhere from once every few days to a few times a day.  I am also keeping my OpenSim fork synced with the latest OpenSim commits.</div><div><br></div><div>Hopefully this will be useful, any feedback is appreciated :)</div><div><br></div></div>