diff --git a/ASTPlayground/ASTPlayground.delphilsp.json b/ASTPlayground/ASTPlayground.delphilsp.json index 5348c6a..82cef08 100644 --- a/ASTPlayground/ASTPlayground.delphilsp.json +++ b/ASTPlayground/ASTPlayground.delphilsp.json @@ -1 +1 @@ -{ "settings": { "project": "file:///T%3A/Myc/ASTPlayground/ASTPlayground.dpr", "dllname": "dcc64370.dll", "dccOptions": "-$O- -$W+ --inline:off -$R+ -$Q+ --no-config -Q -TX.exe -AGenerics.Collections=System.Generics.Collections;Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG;;FRAMEWORK_FMX -E.\\Win64\\Debug -I\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\\DE\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\\DE\";T:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -LEC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Bpl\\Win64 -LNC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64 -NU.\\Win64\\Debug -NSWinapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;System;Xml;Data;Datasnap;Web;Soap; -OT:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -R\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\\DE\";T:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -U\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\\DE\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\\DE\";T:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -V -VN -VR -NBC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64 -NHC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\hpp\\Win64 -NO.\\Win64\\Debug -LU" , "projectFiles":[ { "name": "MainForm", "file": "file:///T%3A/Myc/ASTPlayground/MainForm.pas" }, { "name": "Myc.Ast.Nodes", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Nodes.pas" }, { "name": "Myc.Ast.Scope", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Scope.pas" }, { "name": "Myc.Data.Value", "file": "file:///T%3A/Myc/ASTPlayground/Myc.Data.Value.pas" }, { "name": "Myc.Ast.Visitor", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Visitor.pas" }, { "name": "Myc.Ast.RTL", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.RTL.pas" }, { "name": "Myc.Ast.Dumper", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Dumper.pas" }, { "name": "Myc.Ast.RTL.Core", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.RTL.Core.pas" }, { "name": "Myc.Utils", "file": "file:///T%3A/Myc/Src/Myc.Utils.pas" }, { "name": "Myc.Ast.Script", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Script.pas" }, { "name": "Myc.Ast.Types", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Types.pas" }, { "name": "Myc.Data.Keyword", "file": "file:///T%3A/Myc/Src/Data/Myc.Data.Keyword.pas" }, { "name": "Myc.Ast.Compiler.TCO", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.TCO.pas" }, { "name": "Myc.Ast.Compiler.Binder", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Binder.pas" }, { "name": "Myc.Ast.Compiler.Lowering", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Lowering.pas" }, { "name": "Myc.Ast.Compiler.TypeChecker", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.TypeChecker.pas" }, { "name": "Myc.Ast.Compiler.Macros", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Macros.pas" }, { "name": "Myc.Ast.Compiler.Specializer", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Specializer.pas" }, { "name": "Myc.Ast.Environment", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Environment.pas" }, { "name": "Myc.Ast.Debugger", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Debugger.pas" }, { "name": "Myc.Ast.Analysis.Purity", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Analysis.Purity.pas" }, { "name": "Myc.Ast.Identities", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Identities.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.pas" }, { "name": "Myc.Fmx.AstEditor.Visualizer", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Visualizer.pas" }, { "name": "Myc.Fmx.AstEditor.Workspace", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Workspace.pas" }, { "name": "Myc.Fmx.AstEditor.Layout", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Layout.pas" }, { "name": "Myc.Fmx.AstEditor.Node", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Node.pas" }, { "name": "Myc.Ast.Refactoring.Remove", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Refactoring.Remove.pas" }, { "name": "Myc.Fmx.AstEditor.Render", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Render.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Lists", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Lists.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Primitives", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Primitives.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Control", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Control.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Data", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Data.pas" }, { "name": "Myc.Ast.RTL.TypeRegistry", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.RTL.TypeRegistry.pas" }, { "name": "Myc.Trade.Broker", "file": "file:///T%3A/Myc/Src/Myc.Trade.Broker.pas" }, { "name": "Myc.Data.Stream.Pipes", "file": "file:///T%3A/Myc/Src/Data/Myc.Data.Stream.Pipes.pas" }, { "name": "Myc.Data.Stream", "file": "file:///T%3A/Myc/Src/Data/Myc.Data.Stream.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Pipes", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Pipes.pas" }, { "name": "Demo.Finance", "file": "file:///T%3A/Myc/Test/Demo.Finance.pas" }, { "name": "Myc.Ast.Script.Print", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Script.Print.pas" } ] , "includeDCUsInUsesCompletion": true, "enableKeyWordCompletion": true, "browsingPaths": [ "file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/OCX/Servers","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/VCL","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/common","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/RTL/SYS","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/win","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/win/winrt","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/ToolsAPI","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/IBX","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Internet","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/PROPERTY%20EDITORS","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/soap","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/XML","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Indy10/Core","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Indy10/System","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Indy10/Protocols","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/fmx","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/databinding/components","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/databinding/engine","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/databinding/graph","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/ado","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/cloud","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/datasnap","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/dbx","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/dsnap","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/vclctrls","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/datasnap/connectors","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/datasnap/proxygen","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DataExplorer","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/Common","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/Common/dunit","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/DelphiExperts/Common","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/dunit","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/src","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/tests","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Experts","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/indy/abstraction","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/indy/implementation","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/indyimpl","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Property%20Editors/Indy10","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/soap/wsdlimporter","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Visualizers","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/XMLReporting","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/XPGen","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/rest","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/firedac","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/tethering","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnitX","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/ems","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/net","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/FlatBox2D","file:///C%3A/Users/Public/Documents/Embarcadero/Studio/37.0/Dcp/%25PLATFORM%25","file:///%25TP%25/runtime/vcl","file:///S%3A/sc_famos_src/svn_vcl/cpxedits","file:///S%3A/sc_famos_src/svn_vcl/dzChart","file:///S%3A/sc_famos_src/svn_vcl/eaeditor","file:///S%3A/sc_famos_src/svn_vcl/FamosEvents","file:///S%3A/sc_famos_src/svn_vcl/HTML_Viewer/source","file:///S%3A/sc_famos_src/svn_vcl/Myc_ChartEdit","file:///S%3A/sc_famos_src/svn_vcl/Myc_HemiDrag","file:///S%3A/sc_famos_src/svn_vcl/Myc_SplitControl","file:///S%3A/sc_famos_src/svn_vcl/NiceChart","file:///S%3A/sc_famos_src/svn_vcl/plotter","file:///S%3A/sc_famos_src/svn_vcl/SimpleIPC","file:///S%3A/sc_famos_src/svn_vcl/SynEdit-master/Source","file:///S%3A/sc_famos_src/svn_vcl/ValEdits","file:///S%3A/sc_famos_src/svn_vcl/ZipMaster","file:///S%3A/sc_famos_src/svn_vcl/ZipMaster/zlib","file:///S%3A/sc_famos_src/svn_vcl/ZipMaster/zlib/win32","file:///S%3A/sc_famos_src/svn_vcl/Virtual-TreeView/Source","file:///S%3A/sc_famos_src/svn_common/caHelpSys","file:///S%3A/sc_famos_src/svn_common/Misc","file:///S%3A/sc_famos_src/svn_common/Myc_VecMath","file:///S%3A/sc_famos_src/svn_common/PascalScript/source","file:///S%3A/sc_famos_src/svn_common/TreeBase","file:///S%3A/sc_famos_src/svn_common/TreeBase/Medien","file:///S%3A/3rdParty/spring4d/Source","file:///S%3A/3rdParty/spring4d/Source/Base","file:///S%3A/3rdParty/spring4d/Source/Base/Collections","file:///S%3A/3rdParty/spring4d/Source/Base/Logging","file:///S%3A/3rdParty/spring4d/Source/Base/Patches","file:///S%3A/3rdParty/spring4d/Source/Core/Container","file:///S%3A/3rdParty/spring4d/Source/Core/Interception","file:///S%3A/3rdParty/spring4d/Source/Core/Logging","file:///S%3A/3rdParty/spring4d/Source/Core/Mocking","file:///S%3A/3rdParty/spring4d/Source/Core/Services","file:///S%3A/3rdParty/spring4d/Source/Extensions/Cryptography","file:///S%3A/3rdParty/spring4d/Source/Extensions/Utils","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressCore%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressCommon%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressGDI%2B%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressLibrary/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/XP%20Theme%20Manager/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressLayout%20Control/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressPageControl/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressEditors%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressDocking%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressBars/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressOfficeCore%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressMemData/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressDataController/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressNavBar/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressSkins%20Library/Sources","file:///T%3A/Myc/Src","file:///T%3A/Myc/Src/Data","file:///T%3A/Myc/Src/AST" ] , "CommonAppData": "file:///C%3A/Users/Brummel/AppData/Roaming/Embarcadero/BDS/37.0/" , "Templates": "file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/ObjRepos/" } } \ No newline at end of file +{ "settings": { "project": "file:///T%3A/Myc/ASTPlayground/ASTPlayground.dpr", "dllname": "dcc64370.dll", "dccOptions": "-$O- -$W+ --inline:off -$R+ -$Q+ --no-config -Q -TX.exe -AGenerics.Collections=System.Generics.Collections;Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG;;FRAMEWORK_FMX -E.\\Win64\\Debug -I\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\\DE\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\\DE\";T:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -LEC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Bpl\\Win64 -LNC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64 -NU.\\Win64\\Debug -NSWinapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;System;Xml;Data;Datasnap;Web;Soap; -OT:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -R\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\\DE\";T:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -U\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\\DE\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\debug\";\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\\DE\";T:\\Myc\\Src\\Data;T:\\Myc\\Src\\AST;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\lib\\Win64\\release\";C:\\Users\\Brummel\\Documents\\Embarcadero\\Studio\\37.0\\Imports\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\Imports\";C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\include\";S:\\sc_famos_src\\svn_vcl\\Virtual-TreeView\\Source;S:\\sc_famos_src\\svn_vcl\\cpxedits;S:\\sc_famos_src\\svn_vcl\\dzChart;S:\\sc_famos_src\\svn_vcl\\eaeditor;S:\\sc_famos_src\\svn_vcl\\FamosEvents;S:\\sc_famos_src\\svn_vcl\\HTML_Viewer\\source;S:\\sc_famos_src\\svn_vcl\\Myc_ChartEdit;S:\\sc_famos_src\\svn_vcl\\Myc_HemiDrag;S:\\sc_famos_src\\svn_vcl\\Myc_SplitControl;S:\\sc_famos_src\\svn_vcl\\plotter;S:\\sc_famos_src\\svn_vcl\\SimpleIPC;S:\\sc_famos_src\\svn_vcl\\SynEdit-master\\Source;S:\\sc_famos_src\\svn_vcl\\ValEdits;S:\\sc_famos_src\\svn_vcl\\ZipMaster;S:\\sc_famos_src\\svn_common\\Myc_VecMath;\"C:\\Program Files (x86)\\DevExpress VCL\\Library\\RS28\\Win64\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressCommon Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressGDI+ Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLibrary\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\XP Theme Manager\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressLayout Control\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressPageControl\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressEditors Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDocking Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressBars\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressOfficeCore Library\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressMemData\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressDataController\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressNavBar\\Sources\";\"C:\\Program Files (x86)\\DevExpress VCL\\ExpressSkins Library\\Sources\";S:\\3rdParty\\FastMM5;C:\\Users\\Brummel\\AppData\\Local\\Programs\\TestInsight\\Source;T:\\Myc\\Src;\"c:\\program files (x86)\\embarcadero\\studio\\37.0\\source\\DUnitX\" -V -VN -VR -NBC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\Dcp\\Win64 -NHC:\\Users\\Public\\Documents\\Embarcadero\\Studio\\37.0\\hpp\\Win64 -NO.\\Win64\\Debug -LU" , "projectFiles":[ { "name": "MainForm", "file": "file:///T%3A/Myc/ASTPlayground/MainForm.pas" }, { "name": "Myc.Ast.Nodes", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Nodes.pas" }, { "name": "Myc.Ast.Scope", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Scope.pas" }, { "name": "Myc.Data.Value", "file": "file:///T%3A/Myc/ASTPlayground/Myc.Data.Value.pas" }, { "name": "Myc.Ast.Visitor", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Visitor.pas" }, { "name": "Myc.Ast.RTL", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.RTL.pas" }, { "name": "Myc.Ast.Dumper", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Dumper.pas" }, { "name": "Myc.Ast.RTL.Core", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.RTL.Core.pas" }, { "name": "Myc.Utils", "file": "file:///T%3A/Myc/Src/Myc.Utils.pas" }, { "name": "Myc.Ast.Script", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Script.pas" }, { "name": "Myc.Ast.Types", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Types.pas" }, { "name": "Myc.Data.Keyword", "file": "file:///T%3A/Myc/Src/Data/Myc.Data.Keyword.pas" }, { "name": "Myc.Ast.Compiler.TCO", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.TCO.pas" }, { "name": "Myc.Ast.Compiler.Binder", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Binder.pas" }, { "name": "Myc.Ast.Compiler.Lowering", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Lowering.pas" }, { "name": "Myc.Ast.Compiler.TypeChecker", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.TypeChecker.pas" }, { "name": "Myc.Ast.Compiler.Macros", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Macros.pas" }, { "name": "Myc.Ast.Compiler.Specializer", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Compiler.Specializer.pas" }, { "name": "Myc.Ast.Environment", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Environment.pas" }, { "name": "Myc.Ast.Debugger", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Debugger.pas" }, { "name": "Myc.Ast.Analysis.Purity", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Analysis.Purity.pas" }, { "name": "Myc.Ast.Identities", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Identities.pas" }, { "name": "Myc.Fmx.AstEditor.Visualizer", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Visualizer.pas" }, { "name": "Myc.Fmx.AstEditor.Workspace", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Workspace.pas" }, { "name": "Myc.Fmx.AstEditor.Layout", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Layout.pas" }, { "name": "Myc.Fmx.AstEditor.Node", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Node.pas" }, { "name": "Myc.Ast.Refactoring.Remove", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Refactoring.Remove.pas" }, { "name": "Myc.Fmx.AstEditor.Render", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Render.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Lists", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Lists.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Primitives", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Primitives.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Control", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Control.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Data", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Data.pas" }, { "name": "Myc.Ast.RTL.TypeRegistry", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.RTL.TypeRegistry.pas" }, { "name": "Myc.Trade.Broker", "file": "file:///T%3A/Myc/Src/Myc.Trade.Broker.pas" }, { "name": "Myc.Data.Stream.Pipes", "file": "file:///T%3A/Myc/Src/Data/Myc.Data.Stream.Pipes.pas" }, { "name": "Myc.Data.Stream", "file": "file:///T%3A/Myc/Src/Data/Myc.Data.Stream.pas" }, { "name": "Myc.Fmx.AstEditor.Handlers.Pipes", "file": "file:///T%3A/Myc/Src/AST/Myc.Fmx.AstEditor.Handlers.Pipes.pas" }, { "name": "Demo.Finance", "file": "file:///T%3A/Myc/Test/Demo.Finance.pas" }, { "name": "Myc.Ast.Script.Print", "file": "file:///T%3A/Myc/Src/AST/Myc.Ast.Script.Print.pas" } ] , "includeDCUsInUsesCompletion": true, "enableKeyWordCompletion": true, "browsingPaths": [ "file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/OCX/Servers","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/VCL","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/common","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/RTL/SYS","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/win","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/win/winrt","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/ToolsAPI","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/IBX","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Internet","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/PROPERTY%20EDITORS","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/soap","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/SOURCE/XML","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Indy10/Core","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Indy10/System","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Indy10/Protocols","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/fmx","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/databinding/components","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/databinding/engine","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/databinding/graph","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/ado","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/cloud","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/datasnap","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/dbx","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/dsnap","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/vclctrls","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/datasnap/connectors","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/datasnap/proxygen","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DataExplorer","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/Common","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/Common/dunit","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/DelphiExperts/Common","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/dunit","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/src","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/tests","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Experts","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/indy/abstraction","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/indy/implementation","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/indyimpl","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Property%20Editors/Indy10","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/soap/wsdlimporter","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/Visualizers","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/XMLReporting","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnit/Contrib/XPGen","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/rest","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/firedac","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/tethering","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/DUnitX","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/data/ems","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/rtl/net","file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/source/FlatBox2D","file:///C%3A/Users/Public/Documents/Embarcadero/Studio/37.0/Dcp/%25PLATFORM%25","file:///%25TP%25/runtime/vcl","file:///S%3A/sc_famos_src/svn_vcl/cpxedits","file:///S%3A/sc_famos_src/svn_vcl/dzChart","file:///S%3A/sc_famos_src/svn_vcl/eaeditor","file:///S%3A/sc_famos_src/svn_vcl/FamosEvents","file:///S%3A/sc_famos_src/svn_vcl/HTML_Viewer/source","file:///S%3A/sc_famos_src/svn_vcl/Myc_ChartEdit","file:///S%3A/sc_famos_src/svn_vcl/Myc_HemiDrag","file:///S%3A/sc_famos_src/svn_vcl/Myc_SplitControl","file:///S%3A/sc_famos_src/svn_vcl/NiceChart","file:///S%3A/sc_famos_src/svn_vcl/plotter","file:///S%3A/sc_famos_src/svn_vcl/SimpleIPC","file:///S%3A/sc_famos_src/svn_vcl/SynEdit-master/Source","file:///S%3A/sc_famos_src/svn_vcl/ValEdits","file:///S%3A/sc_famos_src/svn_vcl/ZipMaster","file:///S%3A/sc_famos_src/svn_vcl/ZipMaster/zlib","file:///S%3A/sc_famos_src/svn_vcl/ZipMaster/zlib/win32","file:///S%3A/sc_famos_src/svn_vcl/Virtual-TreeView/Source","file:///S%3A/sc_famos_src/svn_common/caHelpSys","file:///S%3A/sc_famos_src/svn_common/Misc","file:///S%3A/sc_famos_src/svn_common/Myc_VecMath","file:///S%3A/sc_famos_src/svn_common/PascalScript/source","file:///S%3A/sc_famos_src/svn_common/TreeBase","file:///S%3A/sc_famos_src/svn_common/TreeBase/Medien","file:///S%3A/3rdParty/spring4d/Source","file:///S%3A/3rdParty/spring4d/Source/Base","file:///S%3A/3rdParty/spring4d/Source/Base/Collections","file:///S%3A/3rdParty/spring4d/Source/Base/Logging","file:///S%3A/3rdParty/spring4d/Source/Base/Patches","file:///S%3A/3rdParty/spring4d/Source/Core/Container","file:///S%3A/3rdParty/spring4d/Source/Core/Interception","file:///S%3A/3rdParty/spring4d/Source/Core/Logging","file:///S%3A/3rdParty/spring4d/Source/Core/Mocking","file:///S%3A/3rdParty/spring4d/Source/Core/Services","file:///S%3A/3rdParty/spring4d/Source/Extensions/Cryptography","file:///S%3A/3rdParty/spring4d/Source/Extensions/Utils","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressCore%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressCommon%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressGDI%2B%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressLibrary/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/XP%20Theme%20Manager/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressLayout%20Control/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressPageControl/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressEditors%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressDocking%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressBars/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressOfficeCore%20Library/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressMemData/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressDataController/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressNavBar/Sources","file:///C%3A/Program%20Files%20%28x86%29/DevExpress%20VCL/ExpressSkins%20Library/Sources","file:///T%3A/Myc/Src","file:///T%3A/Myc/Src/Data","file:///T%3A/Myc/Src/AST" ] , "CommonAppData": "file:///C%3A/Users/Brummel/AppData/Roaming/Embarcadero/BDS/37.0/" , "Templates": "file:///c%3A/program%20files%20%28x86%29/embarcadero/studio/37.0/ObjRepos/" } } \ No newline at end of file diff --git a/ASTPlayground/UserLib.json b/ASTPlayground/UserLib.json index cad44f4..2f7c95a 100644 --- a/ASTPlayground/UserLib.json +++ b/ASTPlayground/UserLib.json @@ -1,201 +1,187 @@ { - "my-3": { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "a" - }, - { - "NodeType": "Identifier", - "Name": "b" - }, - { - "NodeType": "Identifier", - "Name": "c" - } - ], - "Body": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "+" - }, - "Arguments": [ - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "+" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "a" - }, - { - "NodeType": "Identifier", - "Name": "b" - } - ] - }, - { - "NodeType": "Identifier", - "Name": "c" - } - ] - } - }, "repeat": { "NodeType": "MacroDef", "Name": { "NodeType": "Identifier", "Name": "repeat" }, - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "n" - }, - { - "NodeType": "Identifier", - "Name": "body" - } - ], + "Parameters": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "n" + }, + { + "NodeType": "Identifier", + "Name": "body" + } + ] + }, "Body": { "NodeType": "Quasiquote", "Expression": { "NodeType": "Block", - "Expressions": [ - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "loop" - }, - "Initializer": { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "counter" - } - ], - "Body": { - "NodeType": "IfExpr", - "Condition": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": ">" - }, - "Arguments": [ + "Expressions": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "VarDecl", + "Identifier": { + "NodeType": "Identifier", + "Name": "loop" + }, + "Initializer": { + "NodeType": "LambdaExpr", + "Parameters": { + "NodeType": "Tuple", + "Elements": [ { "NodeType": "Identifier", "Name": "counter" - }, - { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 0 - } - } } ] }, - "ThenBranch": { - "NodeType": "Block", - "Expressions": [ - { - "NodeType": "Unquote", - "Expression": { - "NodeType": "Identifier", - "Name": "body" - } + "Body": { + "NodeType": "IfExpr", + "Condition": { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": ">" }, - { - "NodeType": "Recur", - "Arguments": [ + "Arguments": { + "NodeType": "Tuple", + "Elements": [ { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "-" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "counter" - }, - { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 1 - } - } + "NodeType": "Identifier", + "Name": "counter" + }, + { + "NodeType": "Constant", + "Value": { + "Kind": "Scalar", + "Value": { + "Kind": "Ordinal", + "Value": 0 } - ] + } } ] } - ] - }, - "ElseBranch": { - "NodeType": "Block", - "Expressions": [ - ] + }, + "ThenBranch": { + "NodeType": "Block", + "Expressions": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Unquote", + "Expression": { + "NodeType": "Identifier", + "Name": "body" + } + }, + { + "NodeType": "Recur", + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "-" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "counter" + }, + { + "NodeType": "Constant", + "Value": { + "Kind": "Scalar", + "Value": { + "Kind": "Ordinal", + "Value": 1 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "ElseBranch": { + "NodeType": "Block", + "Expressions": { + "NodeType": "Tuple", + "Elements": [ + ] + } + } } } + }, + { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "loop" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Unquote", + "Expression": { + "NodeType": "Identifier", + "Name": "n" + } + } + ] + } } - }, - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "loop" - }, - "Arguments": [ - { - "NodeType": "Unquote", - "Expression": { - "NodeType": "Identifier", - "Name": "n" - } - } - ] - } - ] + ] + } } } }, "factorial": { "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "n" - } - ], + "Parameters": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "n" + } + ] + }, "Body": { "NodeType": "FunctionCall", "Callee": { "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "n" - }, - { - "NodeType": "Identifier", - "Name": "acc" - } - ], + "Parameters": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "n" + }, + { + "NodeType": "Identifier", + "Name": "acc" + } + ] + }, "Body": { "NodeType": "TernaryExpr", "Condition": { @@ -204,416 +190,12 @@ "NodeType": "Identifier", "Name": "<=" }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "n" - }, - { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 1 - } - } - } - ] - }, - "ThenBranch": { - "NodeType": "Identifier", - "Name": "acc" - }, - "ElseBranch": { - "NodeType": "Recur", - "Arguments": [ - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "-" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "n" - }, - { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 1 - } - } - } - ] - }, - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "acc" - }, - { - "NodeType": "Identifier", - "Name": "n" - } - ] - } - ] - } - } - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "n" - }, - { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 1 - } - } - } - ] - } - }, - "my-add": { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "a" - }, - { - "NodeType": "Identifier", - "Name": "b" - } - ], - "Body": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "+" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "a" - }, - { - "NodeType": "Identifier", - "Name": "b" - } - ] - } - }, - "my-square": { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "x" - } - ], - "Body": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "x" - }, - { - "NodeType": "Identifier", - "Name": "x" - } - ] - } - }, - "CreateSMA": { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "len" - } - ], - "Body": { - "NodeType": "Block", - "Expressions": [ - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "sum" - }, - "Initializer": { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 0 - } - } - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "count" - }, - "Initializer": { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 0 - } - } - } - }, - { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "series" - }, - { - "NodeType": "Identifier", - "Name": "val" - } - ], - "Body": { - "NodeType": "Block", - "Expressions": [ - { - "NodeType": "Assignment", - "Identifier": { - "NodeType": "Identifier", - "Name": "sum" - }, - "Value": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "+" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "sum" - }, - { - "NodeType": "Identifier", - "Name": "val" - } - ] - } - }, - { - "NodeType": "Assignment", - "Identifier": { - "NodeType": "Identifier", - "Name": "count" - }, - "Value": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "+" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "count" - }, - { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 1 - } - } - } - ] - } - }, - { - "NodeType": "Assignment", - "Identifier": { - "NodeType": "Identifier", - "Name": "sum" - }, - "Value": { - "NodeType": "TernaryExpr", - "Condition": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": ">" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "count" - }, - { - "NodeType": "Identifier", - "Name": "len" - } - ] - }, - "ThenBranch": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "-" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "sum" - }, - { - "NodeType": "Indexer", - "Base": { - "NodeType": "Identifier", - "Name": "series" - }, - "Index": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "-" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "count" - }, - { - "NodeType": "Identifier", - "Name": "len" - } - ] - } - } - ] - }, - "ElseBranch": { - "NodeType": "Identifier", - "Name": "sum" - } - } - }, - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "/" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "sum" - }, - { - "NodeType": "TernaryExpr", - "Condition": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "<" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "count" - }, - { - "NodeType": "Identifier", - "Name": "len" - } - ] - }, - "ThenBranch": { - "NodeType": "Identifier", - "Name": "count" - }, - "ElseBranch": { - "NodeType": "Identifier", - "Name": "len" - } - } - ] - } - ] - } - } - ] - } - }, - "linear-regression": { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "x-series" - }, - { - "NodeType": "Identifier", - "Name": "y-series" - } - ], - "Body": { - "NodeType": "Block", - "Expressions": [ - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "series-count" - }, - "Initializer": { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "series" - } - ], - "Body": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "Reduce" - }, - "Arguments": [ + "Arguments": { + "NodeType": "Tuple", + "Elements": [ { "NodeType": "Identifier", - "Name": "series" + "Name": "n" }, { "NodeType": "Constant", @@ -621,32 +203,34 @@ "Kind": "Scalar", "Value": { "Kind": "Ordinal", - "Value": 0 + "Value": 1 } } - }, + } + ] + } + }, + "ThenBranch": { + "NodeType": "Identifier", + "Name": "acc" + }, + "ElseBranch": { + "NodeType": "Recur", + "Arguments": { + "NodeType": "Tuple", + "Elements": [ { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "acc" - }, - { - "NodeType": "Identifier", - "Name": "item" - } - ], - "Body": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "+" - }, - "Arguments": [ + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "-" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ { "NodeType": "Identifier", - "Name": "acc" + "Name": "n" }, { "NodeType": "Constant", @@ -660,501 +244,335 @@ } ] } + }, + { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "*" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "acc" + }, + { + "NodeType": "Identifier", + "Name": "n" + } + ] + } } ] } } - }, - { - "NodeType": "VarDecl", - "Identifier": { + } + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { "NodeType": "Identifier", "Name": "n" }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "series-count" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "x-series" + { + "NodeType": "Constant", + "Value": { + "Kind": "Scalar", + "Value": { + "Kind": "Ordinal", + "Value": 1 } - ] + } } - }, + ] + } + } + }, + "CreateSMA": { + "NodeType": "LambdaExpr", + "Parameters": { + "NodeType": "Tuple", + "Elements": [ { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "sum-x" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { + "NodeType": "Identifier", + "Name": "len" + } + ] + }, + "Body": { + "NodeType": "Block", + "Expressions": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "VarDecl", + "Identifier": { "NodeType": "Identifier", - "Name": "Reduce" + "Name": "sum" }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "x-series" - }, - { - "NodeType": "Constant", + "Initializer": { + "NodeType": "Constant", + "Value": { + "Kind": "Scalar", "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 0 - } + "Kind": "Ordinal", + "Value": 0 } - }, - { - "NodeType": "Identifier", - "Name": "+" } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "sum-y" + } }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { + { + "NodeType": "VarDecl", + "Identifier": { "NodeType": "Identifier", - "Name": "Reduce" + "Name": "count" }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "y-series" - }, - { - "NodeType": "Constant", + "Initializer": { + "NodeType": "Constant", + "Value": { + "Kind": "Scalar", "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 0 - } + "Kind": "Ordinal", + "Value": 0 } - }, - { - "NodeType": "Identifier", - "Name": "+" } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "sum-x-sq" + } }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "Reduce" - }, - "Arguments": [ - { - "NodeType": "FunctionCall", - "Callee": { + { + "NodeType": "LambdaExpr", + "Parameters": { + "NodeType": "Tuple", + "Elements": [ + { "NodeType": "Identifier", - "Name": "Map" + "Name": "series" }, - "Arguments": [ + { + "NodeType": "Identifier", + "Name": "val" + } + ] + }, + "Body": { + "NodeType": "Block", + "Expressions": { + "NodeType": "Tuple", + "Elements": [ { - "NodeType": "Identifier", - "Name": "x-series" - }, - { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "x" - } - ], - "Body": { + "NodeType": "Assignment", + "Identifier": { + "NodeType": "Identifier", + "Name": "sum" + }, + "Value": { "NodeType": "FunctionCall", "Callee": { "NodeType": "Identifier", - "Name": "*" + "Name": "+" }, - "Arguments": [ + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "sum" + }, + { + "NodeType": "Identifier", + "Name": "val" + } + ] + } + } + }, + { + "NodeType": "Assignment", + "Identifier": { + "NodeType": "Identifier", + "Name": "count" + }, + "Value": { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "+" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "count" + }, + { + "NodeType": "Constant", + "Value": { + "Kind": "Scalar", + "Value": { + "Kind": "Ordinal", + "Value": 1 + } + } + } + ] + } + } + }, + { + "NodeType": "Assignment", + "Identifier": { + "NodeType": "Identifier", + "Name": "sum" + }, + "Value": { + "NodeType": "TernaryExpr", + "Condition": { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": ">" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "count" + }, + { + "NodeType": "Identifier", + "Name": "len" + } + ] + } + }, + "ThenBranch": { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "-" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "sum" + }, + { + "NodeType": "Indexer", + "Base": { + "NodeType": "Identifier", + "Name": "series" + }, + "Index": { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "-" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "count" + }, + { + "NodeType": "Identifier", + "Name": "len" + } + ] + } + } + } + ] + } + }, + "ElseBranch": { + "NodeType": "Identifier", + "Name": "sum" + } + } + }, + { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "/" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ { "NodeType": "Identifier", - "Name": "x" + "Name": "sum" }, { - "NodeType": "Identifier", - "Name": "x" + "NodeType": "TernaryExpr", + "Condition": { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "<" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Identifier", + "Name": "count" + }, + { + "NodeType": "Identifier", + "Name": "len" + } + ] + } + }, + "ThenBranch": { + "NodeType": "Identifier", + "Name": "count" + }, + "ElseBranch": { + "NodeType": "Identifier", + "Name": "len" + } } ] } } ] - }, - { - "NodeType": "Constant", - "Value": { - "Kind": "Scalar", - "Value": { - "Kind": "Ordinal", - "Value": 0 - } - } - }, - { - "NodeType": "Identifier", - "Name": "+" } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "sum-xy" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "sum-product" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "x-series" - }, - { - "NodeType": "Identifier", - "Name": "y-series" - } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "m-numerator" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "-" - }, - "Arguments": [ - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "n" - }, - { - "NodeType": "Identifier", - "Name": "sum-xy" - } - ] - }, - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "sum-x" - }, - { - "NodeType": "Identifier", - "Name": "sum-x" - } - ] - } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "m-denominator" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "-" - }, - "Arguments": [ - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "n" - }, - { - "NodeType": "Identifier", - "Name": "sum-x-sq" - } - ] - }, - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "sum-x" - }, - { - "NodeType": "Identifier", - "Name": "sum-x" - } - ] - } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "m" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "/" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "m-numerator" - }, - { - "NodeType": "Identifier", - "Name": "m-denominator" - } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "mean-x" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "/" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "sum-x" - }, - { - "NodeType": "Identifier", - "Name": "n" - } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "mean-y" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "/" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "sum-y" - }, - { - "NodeType": "Identifier", - "Name": "n" - } - ] - } - }, - { - "NodeType": "VarDecl", - "Identifier": { - "NodeType": "Identifier", - "Name": "b" - }, - "Initializer": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "-" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "mean-y" - }, - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "m" - }, - { - "NodeType": "Identifier", - "Name": "mean-x" - } - ] - } - ] - } - }, - { - "NodeType": "LambdaExpr", - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "x" } - ], - "Body": { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "+" - }, - "Arguments": [ - { - "NodeType": "FunctionCall", - "Callee": { - "NodeType": "Identifier", - "Name": "*" - }, - "Arguments": [ - { - "NodeType": "Identifier", - "Name": "m" - }, - { - "NodeType": "Identifier", - "Name": "x" - } - ] - }, - { - "NodeType": "Identifier", - "Name": "b" - } - ] + } + ] + } + } + }, + "broker": { + "NodeType": "FunctionCall", + "Callee": { + "NodeType": "Identifier", + "Name": "create-broker" + }, + "Arguments": { + "NodeType": "Tuple", + "Elements": [ + { + "NodeType": "Constant", + "Value": { + "Kind": "Scalar", + "Value": { + "Kind": "Float", + "Value": 10000.0 + } } } ] } - }, - "test2": { - "NodeType": "MacroDef", - "Name": { - "NodeType": "Identifier", - "Name": "test2" - }, - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "body" - } - ], - "Body": { - "NodeType": "Quasiquote", - "Expression": { - "NodeType": "LambdaExpr", - "Parameters": [ - ], - "Body": { - "NodeType": "Unquote", - "Expression": { - "NodeType": "Identifier", - "Name": "body" - } - } - } - } - }, - "debug-mode": { - "NodeType": "Keyword", - "Name": "true" - }, - "test": { - "NodeType": "MacroDef", - "Name": { - "NodeType": "Identifier", - "Name": "test" - }, - "Parameters": [ - { - "NodeType": "Identifier", - "Name": "body" - } - ], - "Body": { - "NodeType": "Quasiquote", - "Expression": { - "NodeType": "LambdaExpr", - "Parameters": [ - ], - "Body": { - "NodeType": "Unquote", - "Expression": { - "NodeType": "Identifier", - "Name": "body" - } - } - } - } } } \ No newline at end of file diff --git a/Src/AST/Myc.Ast.Compiler.TypeChecker.pas b/Src/AST/Myc.Ast.Compiler.TypeChecker.pas index 4e6a353..eb05637 100644 --- a/Src/AST/Myc.Ast.Compiler.TypeChecker.pas +++ b/Src/AST/Myc.Ast.Compiler.TypeChecker.pas @@ -816,17 +816,88 @@ end; function TTypeChecker.VisitCreateSeries(const Node: IAstNode): IAstNode; var C: ICreateSeriesNode; - elemType: IStaticType; - def: string; + defNode: IAstNode; + recDef: IScalarRecordDefinition; + resType: IStaticType; + elemKind: TScalar.TKind; + fields: TArray>; + tuple: ITupleNode; + elements: TArray; + fieldTuple: ITupleNode; + keyNode: IKeywordNode; + typeNode: IKeywordNode; + i: Integer; begin C := Node.AsCreateSeries; - def := C.Definition; - if def.StartsWith('[') then - elemType := TTypes.CreateRecord(nil) - else - elemType := TTypes.FromScalarKind(TScalar.StringToKind(def)); + // The definition node comes from the parser and is likely raw (untyped keywords/tuples). + // We don't necessarily need to "Visit" it for type checking children, + // but we need to analyze its structure. + defNode := C.DefinitionNode; - Result := TAst.CreateSeries(Node.Identity.AsDefinition, TTypes.CreateSeries(elemType)); + recDef := nil; + resType := TTypes.Unknown; + + case defNode.Kind of + akKeyword: + begin + // Case 1: Simple Series, e.g. (new-series :Float) + // DefinitionNode is a single Keyword + elemKind := TScalar.StringToKind(defNode.AsKeyword.Value.Name); + resType := TTypes.CreateSeries(TTypes.FromScalarKind(elemKind)); + end; + akTuple: + begin + // Case 2: Record Series, e.g. (new-series [[:Price :Float] [:Vol :Ordinal]]) + tuple := defNode.AsTuple; + elements := tuple.Elements; + SetLength(fields, Length(elements)); + + for i := 0 to High(elements) do + begin + if elements[i].Kind <> akTuple then + begin + if Assigned(FLog) then + FLog.AddError('Record definition elements must be vectors [Key Type]', elements[i]); + continue; + end; + + fieldTuple := elements[i].AsTuple; + if Length(fieldTuple.Elements) <> 2 then + begin + if Assigned(FLog) then + FLog.AddError('Record definition entry must have exactly 2 elements [Key Type]', fieldTuple); + continue; + end; + + if (fieldTuple.Elements[0].Kind <> akKeyword) or (fieldTuple.Elements[1].Kind <> akKeyword) then + begin + if Assigned(FLog) then + FLog.AddError('Record definition keys and types must be keywords', fieldTuple); + continue; + end; + + keyNode := fieldTuple.Elements[0].AsKeyword; + typeNode := fieldTuple.Elements[1].AsKeyword; + + elemKind := TScalar.StringToKind(typeNode.Value.Name); + fields[i] := TPair.Create(keyNode.Value, elemKind); + end; + + if Length(fields) > 0 then + begin + recDef := TKeywordMappingRegistry.Intern(fields); + resType := TTypes.CreateRecordSeries(recDef); + end; + end + else + begin + if Assigned(FLog) then + FLog.AddError('Invalid series definition format. Expected :Type or [[:Key :Type] ...]', defNode); + end; + end; + + // Return updated node with RecordDefinition (if any) and StaticType + Result := TAst.CreateSeries(Node.Identity, defNode, recDef, resType); end; function TTypeChecker.VisitSeriesLength(const Node: IAstNode): IAstNode; diff --git a/Src/AST/Myc.Ast.Dumper.pas b/Src/AST/Myc.Ast.Dumper.pas index bae304b..5fb4c9a 100644 --- a/Src/AST/Myc.Ast.Dumper.pas +++ b/Src/AST/Myc.Ast.Dumper.pas @@ -490,7 +490,12 @@ end; function TAstDumper.VisitCreateSeries(const Node: IAstNode): TVoid; begin - LogFmt('CreateSeries: %s', [Node.AsCreateSeries.Definition], Node); + // REFACTORED: Log the structure of the definition + Log('CreateSeries', Node); + Indent; + Log('Definition:'); + Visit(Node.AsCreateSeries.DefinitionNode); + Unindent; end; function TAstDumper.VisitAddSeriesItem(const Node: IAstNode): TVoid; diff --git a/Src/AST/Myc.Ast.Evaluator.pas b/Src/AST/Myc.Ast.Evaluator.pas index d5ccba1..9b8eab2 100644 --- a/Src/AST/Myc.Ast.Evaluator.pas +++ b/Src/AST/Myc.Ast.Evaluator.pas @@ -64,7 +64,6 @@ uses Myc.Data.Series, Myc.Data.Stream, Myc.Data.Stream.Pipes, - Myc.Data.Scalar.JSON, Myc.Ast.Types; type @@ -359,7 +358,7 @@ begin vkSeries: begin var i: Integer := idx.AsScalar.Value.AsInt64; - Result := base.AsSeries.Items[i]; + Result := base.AsSeries[i]; end; vkRecordSeries: begin @@ -432,11 +431,59 @@ begin end; function TEvaluatorVisitor.VisitCreateSeries(const N: ICreateSeriesNode): TDataValue; +var + defNode: IAstNode; + kind: TScalar.TKind; + fields: TArray>; + i: Integer; + tupleElements: TArray; + entry: TArray; + k: IKeyword; + t: TScalar.TKind; begin - if N.Definition.Trim.StartsWith('[') then - Result := TScalarRecordSeries.Create(TRttiAstHelper.JsonToRecordDefinition(N.Definition)) - else - Result := TScalarSeries.Create(TScalar.StringToKind(N.Definition)); + // 1. If TypeChecker ran, we have the Definition ready (Fast Path) + if Assigned(N.RecordDefinition) then + Exit(TScalarRecordSeries.Create(N.RecordDefinition)); + + defNode := N.DefinitionNode; + + // 2. Simple Series (Keyword) e.g. (new-series :Float) + if defNode.Kind = akKeyword then + begin + kind := TScalar.StringToKind(defNode.AsKeyword.Value.Name); + Exit(TScalarSeries.Create(kind)); + end; + + // 3. Record Series (Tuple of [Key Type]) - Dynamic Parsing Fallback + // e.g. (new-series [[:Price :Float] [:Vol :Ordinal]]) + if defNode.Kind = akTuple then + begin + tupleElements := defNode.AsTuple.Elements; + SetLength(fields, Length(tupleElements)); + + for i := 0 to High(tupleElements) do + begin + // Each element MUST be a tuple of 2 elements [Key, Type] + if tupleElements[i].Kind <> akTuple then + raise EEvaluatorException.Create('Invalid record definition: Expected vector [Key Type].'); + + entry := tupleElements[i].AsTuple.Elements; + if Length(entry) <> 2 then + raise EEvaluatorException.Create('Invalid record definition entry: Expected 2 elements.'); + + if (entry[0].Kind <> akKeyword) or (entry[1].Kind <> akKeyword) then + raise EEvaluatorException.Create('Invalid record definition: Key and Type must be keywords.'); + + k := entry[0].AsKeyword.Value; + t := TScalar.StringToKind(entry[1].AsKeyword.Value.Name); + fields[i] := TPair.Create(k, t); + end; + + var def := TKeywordMappingRegistry.Intern(fields); + Exit(TScalarRecordSeries.Create(def)); + end; + + raise EEvaluatorException.Create('Invalid CreateSeries definition node.'); end; function TEvaluatorVisitor.VisitAddSeriesItem(const N: IAddSeriesItemNode): TDataValue; @@ -515,6 +562,12 @@ begin // Compile the transformation function lambdaFunc := Visit(N.Transformation).AsMethod(); + // WARNING: If this is executing dynamically (without TypeChecker), StaticType is Unknown. + // Pipe creation REQUIRES the output definition. + // Fixed: Allow both stRecord and stRecordSeries (as TypeChecker correctly assigns stRecordSeries for Pipe nodes) + if (N.StaticType.Kind <> stRecordSeries) and (N.StaticType.Kind <> stRecord) then + raise EEvaluatorException.Create('Pipe requires Type Checking to determine output structure (RecordDefinition).'); + var outputDef := N.StaticType.AsRecord.Definition; var pipeAdapter: TPipeStream.TPipeLambda := diff --git a/Src/AST/Myc.Ast.JSON.pas b/Src/AST/Myc.Ast.JSON.pas index da1ce07..d503567 100644 --- a/Src/AST/Myc.Ast.JSON.pas +++ b/Src/AST/Myc.Ast.JSON.pas @@ -209,7 +209,6 @@ begin Result.AddPair('NodeType', TJSONString.Create('Tuple')); elemsArray := TJSONArray.Create; - // Updated: Use Elements array directly elements := T.Elements; for i := 0 to High(elements) do elemsArray.Add(Visit(elements[i])); @@ -412,7 +411,8 @@ function TJsonAstConverter.VisitCreateSeries(const Node: IAstNode): TJSONObject; begin Result := TJSONObject.Create; Result.AddPair('NodeType', TJSONString.Create('CreateSeries')); - Result.AddPair('Definition', TJSONString.Create(Node.AsCreateSeries.Definition)); + // REFACTORED: Now serialize the DefinitionNode structure instead of a raw string + Result.AddPair('DefinitionNode', Visit(Node.AsCreateSeries.DefinitionNode)); end; function TJsonAstConverter.VisitAddSeriesItem(const Node: IAstNode): TJSONObject; @@ -616,7 +616,6 @@ var begin identNodes := TList.Create; try - // Updated: Use Elements instead of ToArray (or iterate if ToArray is missing) for node in JsonToNode(AObj.GetValue('Parameters')).AsTuple.Elements do identNodes.Add(node.AsIdentifier); Result := TAst.LambdaExpr(identNodes.ToArray, JsonToNode(AObj.GetValue('Body'))); @@ -632,7 +631,6 @@ var begin identNodes := TList.Create; try - // Updated: Use Elements for node in JsonToNode(AObj.GetValue('Parameters')).AsTuple.Elements do identNodes.Add(node.AsIdentifier); Result := @@ -663,7 +661,6 @@ end; function TJsonAstConverter.JsonToFunctionCallNode(const AObj: TJSONObject): IFunctionCallNode; begin - // Updated: Use Elements Result := TAst.FunctionCall(JsonToNode(AObj.GetValue('Callee')), JsonToNode(AObj.GetValue('Arguments')).AsTuple.Elements); end; @@ -675,19 +672,16 @@ begin callee := JsonToNode(AObj.GetValue('Callee')); expandedBody := JsonToNode(AObj.GetValue('ExpandedBody')); argsTuple := JsonToNode(AObj.GetValue('Arguments')).AsTuple; - // Updated: Use Elements Result := TAst.MacroExpansionNode(TAst.FunctionCall(callee, argsTuple.Elements), expandedBody); end; function TJsonAstConverter.JsonToRecurNode(const AObj: TJSONObject): IRecurNode; begin - // Updated: Use Elements Result := TAst.Recur(JsonToNode(AObj.GetValue('Arguments')).AsTuple.Elements); end; function TJsonAstConverter.JsonToBlockNode(const AObj: TJSONObject): IBlockExpressionNode; begin - // Updated: Use Elements Result := TAst.Block(JsonToNode(AObj.GetValue('Expressions')).AsTuple.Elements); end; @@ -739,7 +733,8 @@ end; function TJsonAstConverter.JsonToCreateSeriesNode(const AObj: TJSONObject): ICreateSeriesNode; begin - Result := TAst.CreateSeries(AObj.GetValue('Definition')); + // REFACTORED: Use the definition node from JSON + Result := TAst.CreateSeries(JsonToNode(AObj.GetValue('DefinitionNode'))); end; function TJsonAstConverter.JsonToAddSeriesItemNode(const AObj: TJSONObject): IAddSeriesItemNode; diff --git a/Src/AST/Myc.Ast.Nodes.pas b/Src/AST/Myc.Ast.Nodes.pas index 9555ac8..dde9248 100644 --- a/Src/AST/Myc.Ast.Nodes.pas +++ b/Src/AST/Myc.Ast.Nodes.pas @@ -422,9 +422,11 @@ type ICreateSeriesNode = interface(IAstTypedNode) {$region 'private'} - function GetDefinition: String; + function GetDefinitionNode: IAstNode; + function GetRecordDefinition: IScalarRecordDefinition; {$endregion} - property Definition: String read GetDefinition; + property DefinitionNode: IAstNode read GetDefinitionNode; + property RecordDefinition: IScalarRecordDefinition read GetRecordDefinition; end; IAddSeriesItemNode = interface(IAstTypedNode) @@ -589,12 +591,19 @@ type TCreateSeriesNode = class(TAstTypedNode, ICreateSeriesNode) private - FDefIdentity: IDefinitionIdentity; - function GetDefinition: String; + FDefinitionNode: IAstNode; + FRecordDefinition: IScalarRecordDefinition; + function GetDefinitionNode: IAstNode; + function GetRecordDefinition: IScalarRecordDefinition; protected function GetKind: TAstNodeKind; override; public - constructor Create(const AIdentity: IDefinitionIdentity; const AStaticType: IStaticType); + constructor Create( + const ADefinitionNode: IAstNode; + const ARecordDefinition: IScalarRecordDefinition; + const AStaticType: IStaticType; + const AIdentity: IAstIdentity + ); function AsCreateSeries: ICreateSeriesNode; override; end; @@ -1379,10 +1388,16 @@ end; { TCreateSeriesNode } -constructor TCreateSeriesNode.Create(const AIdentity: IDefinitionIdentity; const AStaticType: IStaticType); +constructor TCreateSeriesNode.Create( + const ADefinitionNode: IAstNode; + const ARecordDefinition: IScalarRecordDefinition; + const AStaticType: IStaticType; + const AIdentity: IAstIdentity +); begin inherited Create(AStaticType, AIdentity); - FDefIdentity := AIdentity; + FDefinitionNode := ADefinitionNode; + FRecordDefinition := ARecordDefinition; end; function TCreateSeriesNode.AsCreateSeries: ICreateSeriesNode; @@ -1390,9 +1405,14 @@ begin Result := Self; end; -function TCreateSeriesNode.GetDefinition: String; +function TCreateSeriesNode.GetDefinitionNode: IAstNode; begin - Result := FDefIdentity.Definition; + Result := FDefinitionNode; +end; + +function TCreateSeriesNode.GetRecordDefinition: IScalarRecordDefinition; +begin + Result := FRecordDefinition; end; function TCreateSeriesNode.GetKind: TAstNodeKind; diff --git a/Src/AST/Myc.Ast.Script.Print.pas b/Src/AST/Myc.Ast.Script.Print.pas index d342fac..de0cd18 100644 --- a/Src/AST/Myc.Ast.Script.Print.pas +++ b/Src/AST/Myc.Ast.Script.Print.pas @@ -458,7 +458,9 @@ end; function TPrettyPrintVisitor.VisitCreateSeries(const N: IAstNode): TVoid; begin - Append(Format('(new-series "%s")', [N.AsCreateSeries.Definition])); + Append('(new-series '); + Visit(N.AsCreateSeries.DefinitionNode); + Append(')'); end; function TPrettyPrintVisitor.VisitAddSeriesItem(const N: IAstNode): TVoid; diff --git a/Src/AST/Myc.Ast.Script.pas b/Src/AST/Myc.Ast.Script.pas index ca4a692..9e00126 100644 --- a/Src/AST/Myc.Ast.Script.pas +++ b/Src/AST/Myc.Ast.Script.pas @@ -612,10 +612,11 @@ begin end else if SameText(head.Token.Text, 'new-series') then begin - if (tailNodes[0].Kind = akConstant) and (tailNodes[0].AsConstant.Value.Kind = vkText) then - Result := TAst.CreateSeries(tailNodes[0].AsConstant.Value.AsText, startLoc) - else - Error('Syntax Error: ''new-series'' argument must be a string literal.'); + if Length(tailNodes) <> 1 then + Error('Syntax Error: ''new-series'' requires exactly one argument (the definition vector).'); + + // UPDATED: Accept any node (usually a vector) as definition + Result := TAst.CreateSeries(tailNodes[0], startLoc); end else if SameText(head.Token.Text, 'add-item') then begin diff --git a/Src/AST/Myc.Ast.pas b/Src/AST/Myc.Ast.pas index 1f6a726..b4a0849 100644 --- a/Src/AST/Myc.Ast.pas +++ b/Src/AST/Myc.Ast.pas @@ -54,9 +54,11 @@ type const AStaticType: IStaticType = nil ): ITupleNode; overload; static; - class function CreateSeries(const ADefinition: String; const Loc: ISourceLocation = nil): ICreateSeriesNode; overload; static; + class function CreateSeries(const ADefinitionNode: IAstNode; const Loc: ISourceLocation = nil): ICreateSeriesNode; overload; static; class function CreateSeries( - const Identity: IDefinitionIdentity; + const Identity: IAstIdentity; + const ADefinitionNode: IAstNode; + const ARecordDefinition: IScalarRecordDefinition = nil; const AStaticType: IStaticType = nil ): ICreateSeriesNode; overload; static; @@ -402,19 +404,27 @@ begin ); end; -class function TAst.CreateSeries(const ADefinition: String; const Loc: ISourceLocation): ICreateSeriesNode; +class function TAst.CreateSeries(const ADefinitionNode: IAstNode; const Loc: ISourceLocation): ICreateSeriesNode; begin - var id := TIdentities.Definition(ADefinition, Loc); - Result := TCreateSeriesNode.Create(id, TTypes.Unknown); + var id := TIdentities.Structural(Loc); + // RecordDefinition is nil initially, populated by TypeChecker + Result := TCreateSeriesNode.Create(ADefinitionNode, nil, TTypes.Unknown, id); end; -class function TAst.CreateSeries(const Identity: IDefinitionIdentity; const AStaticType: IStaticType): ICreateSeriesNode; +class function TAst.CreateSeries( + const Identity: IAstIdentity; + const ADefinitionNode: IAstNode; + const ARecordDefinition: IScalarRecordDefinition; + const AStaticType: IStaticType +): ICreateSeriesNode; begin Result := TCreateSeriesNode.Create( - Identity, + ADefinitionNode, + ARecordDefinition, if AStaticType <> nil then AStaticType - else TTypes.Unknown + else TTypes.Unknown, + Identity ); end; diff --git a/Src/AST/Myc.Fmx.AstEditor.Handlers.Data.pas b/Src/AST/Myc.Fmx.AstEditor.Handlers.Data.pas index e2c2a87..0397a39 100644 --- a/Src/AST/Myc.Fmx.AstEditor.Handlers.Data.pas +++ b/Src/AST/Myc.Fmx.AstEditor.Handlers.Data.pas @@ -97,6 +97,8 @@ type // --- Series Operations --- TCreateSeriesNodeHandler = class(TBaseNodeHandler) + private + FDefNode: TAstViewNode; public procedure BuildUI(OwnerNode: TAstViewNode); override; function ReconstructAst(OwnerNode: TAstViewNode): IAstNode; override; @@ -131,14 +133,15 @@ begin OwnerNode.Frameless := True; OwnerNode.Orientation := loHorizontal; - varLabel := OwnerNode.AddLabel(OwnerNode, 'var'); + varLabel := OwnerNode.AddLabel(OwnerNode, 'def'); // Changed 'var' to 'def' to match syntax varLabel.FontSettings.Font.Style := [TFontStyle.fsBold]; FTargetNode := visu.CallAccept(FNode.Target); if Assigned(FNode.Initializer) then begin - OwnerNode.AddLabel(OwnerNode, ':='); + // Space before value + OwnerNode.AddLabel(OwnerNode, ' '); FInitializerNode := visu.CallAccept(FNode.Initializer); end else @@ -166,8 +169,9 @@ begin OwnerNode.Frameless := True; OwnerNode.Orientation := loHorizontal; + OwnerNode.AddLabel(OwnerNode, 'assign '); FTargetNode := visu.CallAccept(FNode.Target); - OwnerNode.AddLabel(OwnerNode, ':='); + OwnerNode.AddLabel(OwnerNode, ' '); FValueNode := visu.CallAccept(FNode.Value); end; @@ -185,9 +189,9 @@ var begin visu := OwnerNode.Visualizer.Clone(OwnerNode, OwnerNode.Visualizer.ExprDepth + 1); - OwnerNode.Frameless := False; - OwnerNode.Orientation := loVertical; - titleLabel := OwnerNode.AddLabel(OwnerNode, 'Quasiquote'); + OwnerNode.Frameless := True; + OwnerNode.Orientation := loHorizontal; + titleLabel := OwnerNode.AddLabel(OwnerNode, '`'); titleLabel.FontSettings.Font.Style := [TFontStyle.fsBold]; FExpressionNode := visu.CallAccept(FNode.Expression); end; @@ -202,25 +206,19 @@ end; procedure TUnquoteNodeHandler.BuildUI(OwnerNode: TAstViewNode); var visu: IAstVisualizer; - leftBracket, rightBracket: TTextNode; + leftBracket: TTextNode; begin visu := OwnerNode.Visualizer.Clone(OwnerNode, OwnerNode.Visualizer.ExprDepth + 1); OwnerNode.Frameless := True; OwnerNode.Orientation := loHorizontal; - leftBracket := OwnerNode.AddLabel(OwnerNode, '<'); - // We cannot assign to fields of record properties directly. - // Replace the entire margin record. - // Default from AddLabel is (cNodePadding, cTitleTopPadding, cNodePadding, cTitleBottomPadding) - // We want Right Margin = 0. + leftBracket := OwnerNode.AddLabel(OwnerNode, '~'); + leftBracket.FontSettings.Font.Style := [TFontStyle.fsBold]; + // Remove right margin to stick to expression leftBracket.Margins := TMarginRect.Create(cNodePadding, cTitleTopPadding, 0, cTitleBottomPadding); FExpressionNode := visu.CallAccept(FNode.Expression); - - rightBracket := OwnerNode.AddLabel(OwnerNode, '>'); - // We want Left Margin = 0. - rightBracket.Margins := TMarginRect.Create(0, cTitleTopPadding, cNodePadding, cTitleBottomPadding); end; function TUnquoteNodeHandler.ReconstructAst(OwnerNode: TAstViewNode): IAstNode; @@ -237,10 +235,13 @@ var begin visu := OwnerNode.Visualizer.Clone(OwnerNode, OwnerNode.Visualizer.ExprDepth + 1); - OwnerNode.Frameless := False; - OwnerNode.Orientation := loVertical; - titleLabel := OwnerNode.AddLabel(OwnerNode, 'Unquote-Splicing'); + OwnerNode.Frameless := True; + OwnerNode.Orientation := loHorizontal; + titleLabel := OwnerNode.AddLabel(OwnerNode, '~@'); titleLabel.FontSettings.Font.Style := [TFontStyle.fsBold]; + // Remove right margin + titleLabel.Margins := TMarginRect.Create(cNodePadding, cTitleTopPadding, 0, cTitleBottomPadding); + FExpressionNode := visu.CallAccept(FNode.Expression); end; @@ -259,10 +260,10 @@ begin OwnerNode.Frameless := True; OwnerNode.Orientation := loHorizontal; + OwnerNode.AddLabel(OwnerNode, 'get '); FBaseNode := visu.CallAccept(FNode.Base); - OwnerNode.AddLabel(OwnerNode, '['); + OwnerNode.AddLabel(OwnerNode, ' '); FIndexNode := visu.CallAccept(FNode.Index); - OwnerNode.AddLabel(OwnerNode, ']'); end; function TIndexerNodeHandler.ReconstructAst(OwnerNode: TAstViewNode): IAstNode; @@ -280,9 +281,10 @@ begin OwnerNode.Frameless := True; OwnerNode.Orientation := loHorizontal; - FBaseNode := visu.CallAccept(FNode.Base); OwnerNode.AddLabel(OwnerNode, '.'); OwnerNode.AddLabel(OwnerNode, FNode.Member.Value.Name); + OwnerNode.AddLabel(OwnerNode, ' '); + FBaseNode := visu.CallAccept(FNode.Base); end; function TMemberAccessNodeHandler.ReconstructAst(OwnerNode: TAstViewNode): IAstNode; @@ -306,6 +308,7 @@ begin FKeyLabel.FontSettings.Font.Style := [TFontStyle.fsBold]; FKeyLabel.Color := TAlphaColors.Mediumvioletred; + OwnerNode.AddLabel(OwnerNode, ' '); FValueNode := visu.CallAccept(FNode.Value); end; @@ -319,15 +322,22 @@ end; procedure TRecordLiteralNodeHandler.BuildUI(OwnerNode: TAstViewNode); var visu: IAstVisualizer; + braceL: TTextNode; begin visu := OwnerNode.Visualizer.Clone(OwnerNode, OwnerNode.Visualizer.ExprDepth + 1); OwnerNode.Frameless := False; OwnerNode.Orientation := loVertical; - OwnerNode.Alignment := laFlush; + OwnerNode.Alignment := laFlush; // Align left + + // Visual hint: Curly braces for record + braceL := OwnerNode.AddLabel(OwnerNode, '{'); + braceL.FontSettings.Font.Style := [TFontStyle.fsBold]; // Delegate to Fields Tuple (previously RecordFieldList) FFieldsNode := visu.CallAccept(FNode.Fields); + + OwnerNode.AddLabel(OwnerNode, '}'); end; function TRecordLiteralNodeHandler.ReconstructAst(OwnerNode: TAstViewNode): IAstNode; @@ -346,17 +356,24 @@ end; procedure TCreateSeriesNodeHandler.BuildUI(OwnerNode: TAstViewNode); var + visu: IAstVisualizer; titleLabel: TTextNode; begin + visu := OwnerNode.Visualizer.Clone(OwnerNode, OwnerNode.Visualizer.ExprDepth + 1); + OwnerNode.Frameless := False; OwnerNode.Orientation := loVertical; - titleLabel := OwnerNode.AddLabel(OwnerNode, 'Create Series: ' + FNode.Definition); + + titleLabel := OwnerNode.AddLabel(OwnerNode, 'new-series'); titleLabel.FontSettings.Font.Style := [TFontStyle.fsBold]; + + // Now visualize the definition node (likely a Tuple or Keyword) + FDefNode := visu.CallAccept(FNode.DefinitionNode); end; function TCreateSeriesNodeHandler.ReconstructAst(OwnerNode: TAstViewNode): IAstNode; begin - Result := TAst.CreateSeries(FNode.Identity.AsDefinition, FNode.StaticType); + Result := TAst.CreateSeries(FNode.Identity, FDefNode.CreateAst, FNode.RecordDefinition, FNode.StaticType); end; { TAddSeriesItemNodeHandler } @@ -371,12 +388,15 @@ begin OwnerNode.Frameless := False; OwnerNode.Orientation := loVertical; - titleLabel := OwnerNode.AddLabel(OwnerNode, 'Add Item to: ' + FNode.Series.Name); + titleLabel := OwnerNode.AddLabel(OwnerNode, 'add-item: ' + FNode.Series.Name); titleLabel.FontSettings.Font.Style := [TFontStyle.fsBold]; FValueNode := visu.CallAccept(FNode.Value); if Assigned(FNode.Lookback) then - FLookbackNode := visu.CallAccept(FNode.Lookback) + begin + OwnerNode.AddLabel(OwnerNode, 'Lookback:'); + FLookbackNode := visu.CallAccept(FNode.Lookback); + end else FLookbackNode := nil; end; @@ -406,9 +426,9 @@ procedure TSeriesLengthNodeHandler.BuildUI(OwnerNode: TAstViewNode); var titleLabel: TTextNode; begin - OwnerNode.Frameless := False; - OwnerNode.Orientation := loVertical; - titleLabel := OwnerNode.AddLabel(OwnerNode, 'Length of: ' + FNode.Series.Name); + OwnerNode.Frameless := True; + OwnerNode.Orientation := loHorizontal; + titleLabel := OwnerNode.AddLabel(OwnerNode, 'count ' + FNode.Series.Name); titleLabel.FontSettings.Font.Style := [TFontStyle.fsBold]; end; diff --git a/Test/AST/Test.Myc.Ast.NullPropagation.pas b/Test/AST/Test.Myc.Ast.NullPropagation.pas index 2f44e32..824ba96 100644 --- a/Test/AST/Test.Myc.Ast.NullPropagation.pas +++ b/Test/AST/Test.Myc.Ast.NullPropagation.pas @@ -89,7 +89,8 @@ var resultVal: TDataValue; begin // Chained Access: (get (.data (if false ...)) 0) - script := '(do ' + ' (def root (if false {:data (new-series "ordinal")}))' + ' (get (.data root) 0)' + ')'; + // Updated: Use :Ordinal instead of "ordinal" + script := '(do ' + ' (def root (if false {:data (new-series :Ordinal)}))' + ' (get (.data root) 0)' + ')'; resultVal := FEnv.Run(TAstScript.Parse(script)); @@ -103,7 +104,8 @@ var begin // 1. Define 's' as Optional // 2. Access via Indexer - script := '(do ' + ' (def s (if false (new-series "ordinal")))' + ' (get s 42)' + ')'; + // Updated: Use :Ordinal instead of "ordinal" + script := '(do ' + ' (def s (if false (new-series :Ordinal)))' + ' (get s 42)' + ')'; // FIX: Parse String to AST Node resultVal := FEnv.Run(TAstScript.Parse(script)); @@ -120,11 +122,11 @@ begin FEnv.Run( TAstScript.Parse( ''' - (do - (def a (if true 10)) ; a is Optional - (+ a 5) ; Error: Operator + not defined for Optional - ) - ''' + (do + (def a (if true 10)) ; a is Optional + (+ a 5) ; Error: Operator + not defined for Optional + ) + ''' ) ); end, diff --git a/Test/AST/Test.Myc.Ast.Pipes.pas b/Test/AST/Test.Myc.Ast.Pipes.pas index 4adc09f..260e3e8 100644 --- a/Test/AST/Test.Myc.Ast.Pipes.pas +++ b/Test/AST/Test.Myc.Ast.Pipes.pas @@ -33,7 +33,7 @@ type destructor Destroy; override; // Manual trigger - procedure Emit(CycleID: Integer); + procedure Emit(CycleID: Int64); // IStream implementation function Subscribe(const Observer: IStreamObserver): TSubscriptionTag; @@ -122,7 +122,7 @@ begin end; end; -procedure TTestStream.Emit(CycleID: Integer); +procedure TTestStream.Emit(CycleID: Int64); var obs: IStreamObserver; observersCopy: TArray; @@ -227,7 +227,8 @@ begin FEnv.RootScope.Define('src', mockStream, TTypes.CreateRecordSeries(source.Def)); - script := '(pipe [src [:non_existent]] (fn [x] {:res x}))'; + // Notice double bracket [[ ... ]] to correctly form the input vector + script := '(pipe [[src [:non_existent]]] (fn [x] {:res x}))'; Assert.WillRaise(procedure begin FEnv.Run(TAstScript.Parse(script)); end, ECompilationFailed); end;