Ha, x86-Assembler is da
Registriert den Assembler im Parser so:
MyAssembler := THAMAssemblerPlugin(Parser.AddPlugin(THAMAssemblerPlugin, [etAfterParse, etEval]);
Dadurch assembliert der Parser (oder besser das Plugin) den Ausdruck automatisch nach dem Parsen und beim Aufruf von .Eval() wird das Kompilat aufgerufen.
Statt .Eval() nutzt ihr besser das:
Delphi-Quellcode:
var
MyFunc: THAMAssembledMethod;
MyFunc := MyAssembler.Assembly;
//lösen einfach durch Aufruf:
WriteLn(MyFunc.Value:2:2);
Ist dann ca doppelt sie schnell wie das normale Eval()
Aber Achtung: Rückgabewerte des Kompilats sind keine eigene Objekte wie beim normalen lösen, sondern nur Referenzen auf die Lösung!
Edit: Das Plugin ist ab jetzt im Archiv im ersten Posting.
Edit 2: etEval bitte
nicht mehr benutzen, das führt komischerweise zu EInvalidPointer-Exceptions, deren Urpsrung ich einfach nicht lokalisieren kann. Besides: direkt die Funktion aufzurufen ist eh nen Tick schneller