backport analysis visitor and stuff in yasp branch from jit 29/15229/2
Antoine ELIAS [Tue, 16 Sep 2014 11:59:39 +0000 (13:59 +0200)]
Change-Id: Ie543781a7afc520d290eb7cb1752091323ebefef

217 files changed:
scilab/Makefile.am
scilab/Makefile.in
scilab/modules/action_binding/Makefile.am
scilab/modules/action_binding/Makefile.in
scilab/modules/action_binding/sci_gateway/cpp/action_binding_gw.vcxproj
scilab/modules/api_scilab/Makefile.am
scilab/modules/api_scilab/Makefile.in
scilab/modules/api_scilab/api_scilab.vcxproj
scilab/modules/arnoldi/Makefile.am
scilab/modules/arnoldi/Makefile.in
scilab/modules/arnoldi/arnoldi.vcxproj
scilab/modules/ast/Makefile.am
scilab/modules/ast/Makefile.in
scilab/modules/ast/ast.vcxproj
scilab/modules/ast/ast.vcxproj.filters
scilab/modules/ast/includes/analysis/AnalysisVisitor.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/Checkers.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/Decorator.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/ForList.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/Result.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/SymInfo.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/TIType.hxx [new file with mode: 0644]
scilab/modules/ast/includes/exps/ast.hxx
scilab/modules/boolean/Makefile.am
scilab/modules/boolean/Makefile.in
scilab/modules/boolean/src/cpp/boolean_gw.vcxproj
scilab/modules/cacsd/Makefile.am
scilab/modules/cacsd/Makefile.in
scilab/modules/cacsd/src/c/cacsd.vcxproj
scilab/modules/call_scilab/Makefile.am
scilab/modules/call_scilab/Makefile.in
scilab/modules/call_scilab/call_scilab.vcxproj
scilab/modules/commons/Makefile.am
scilab/modules/commons/Makefile.in
scilab/modules/commons/src/c/commons.vcxproj
scilab/modules/completion/Makefile.am
scilab/modules/completion/Makefile.in
scilab/modules/completion/src/c/completion.vcxproj
scilab/modules/console/Makefile.am
scilab/modules/console/Makefile.in
scilab/modules/console/sci_gateway/cpp/console_gw.vcxproj
scilab/modules/console/src/c/console.vcxproj
scilab/modules/console/src/noconsole/noconsole.vcxproj
scilab/modules/core/Makefile.am
scilab/modules/core/Makefile.in
scilab/modules/core/sci_gateway/cpp/core_gw.vcxproj
scilab/modules/core/src/c/core.vcxproj
scilab/modules/data_structures/Makefile.am
scilab/modules/data_structures/Makefile.in
scilab/modules/data_structures/src/c/data_structures.vcxproj
scilab/modules/differential_equations/Makefile.am
scilab/modules/differential_equations/Makefile.in
scilab/modules/differential_equations/sci_gateway/differential_equations_gw.vcxproj
scilab/modules/differential_equations/src/c/differential_equations.vcxproj
scilab/modules/dynamic_link/Makefile.am
scilab/modules/dynamic_link/Makefile.in
scilab/modules/dynamic_link/sci_gateway/cpp/dynamic_link_gw.vcxproj
scilab/modules/dynamic_link/src/c/dynamic_link.vcxproj
scilab/modules/elementary_functions/Makefile.am
scilab/modules/elementary_functions/Makefile.in
scilab/modules/elementary_functions/sci_gateway/cpp/elem_func_gw/elem_func_gw.vcxproj
scilab/modules/elementary_functions/src/c/elementary_functions.vcxproj
scilab/modules/external_objects/Makefile.am
scilab/modules/external_objects/Makefile.in
scilab/modules/external_objects_java/Makefile.am
scilab/modules/external_objects_java/Makefile.in
scilab/modules/external_objects_java/external_objects_java.vcxproj
scilab/modules/fftw/Makefile.am
scilab/modules/fftw/Makefile.in
scilab/modules/fftw/fftw.vcxproj
scilab/modules/fileio/Makefile.am
scilab/modules/fileio/Makefile.in
scilab/modules/fileio/fileio.vcxproj
scilab/modules/fileio/sci_gateway/cpp/fileio_gw.vcxproj
scilab/modules/functions/Makefile.am
scilab/modules/functions/Makefile.in
scilab/modules/functions/sci_gateway/cpp/functions_gw.vcxproj
scilab/modules/functions_manager/Makefile.am
scilab/modules/functions_manager/Makefile.in
scilab/modules/functions_manager/functions_manager.vcxproj
scilab/modules/graphic_export/Makefile.am
scilab/modules/graphic_export/Makefile.in
scilab/modules/graphic_objects/Makefile.am
scilab/modules/graphic_objects/Makefile.in
scilab/modules/graphics/Makefile.am
scilab/modules/graphics/Makefile.in
scilab/modules/graphics/graphics.vcxproj
scilab/modules/graphics/sci_gateway/cpp/graphics_gw.vcxproj
scilab/modules/graphics/src/nographics/nographics.vcxproj
scilab/modules/gui/Makefile.am
scilab/modules/gui/Makefile.in
scilab/modules/gui/sci_gateway/cpp/gui_gw.vcxproj
scilab/modules/gui/src/c/gui.vcxproj
scilab/modules/gui/src/nogui/nogui.vcxproj
scilab/modules/hdf5/Makefile.am
scilab/modules/hdf5/Makefile.in
scilab/modules/hdf5/src/c/hdf5.vcxproj
scilab/modules/helptools/Makefile.am
scilab/modules/helptools/Makefile.in
scilab/modules/helptools/src/c/helptools.vcxproj
scilab/modules/history_browser/Makefile.am
scilab/modules/history_browser/Makefile.in
scilab/modules/history_browser/src/c/history_browser.vcxproj
scilab/modules/history_manager/Makefile.am
scilab/modules/history_manager/Makefile.in
scilab/modules/history_manager/sci_gateway/cpp/history_manager_gw.vcxproj
scilab/modules/history_manager/src/c/history_manager.vcxproj
scilab/modules/integer/Makefile.am
scilab/modules/integer/Makefile.in
scilab/modules/integer/src/cpp/integer_gw.vcxproj
scilab/modules/interpolation/Makefile.am
scilab/modules/interpolation/Makefile.in
scilab/modules/interpolation/src/c/interpolation.vcxproj
scilab/modules/io/Makefile.am
scilab/modules/io/Makefile.in
scilab/modules/io/src/cpp/io_gw.vcxproj
scilab/modules/javasci/Javasci.vcxproj
scilab/modules/javasci/Makefile.am
scilab/modules/javasci/Makefile.in
scilab/modules/jvm/Makefile.am
scilab/modules/jvm/Makefile.in
scilab/modules/jvm/libjvm.vcxproj
scilab/modules/jvm/sci_gateway/cpp/libjvm_gw.vcxproj
scilab/modules/jvm/src/nojvm/nojvm.vcxproj
scilab/modules/linear_algebra/Makefile.am
scilab/modules/linear_algebra/Makefile.in
scilab/modules/linear_algebra/sci_gateway/cpp/linear_algebra_gw.vcxproj
scilab/modules/linear_algebra/src/c/linear_algebra.vcxproj
scilab/modules/localization/Makefile.am
scilab/modules/localization/Makefile.in
scilab/modules/localization/sci_gateway/cpp/localization_gw.vcxproj
scilab/modules/localization/src/localization.vcxproj
scilab/modules/matio/Makefile.am
scilab/modules/matio/Makefile.in
scilab/modules/mexlib/Makefile.am
scilab/modules/mexlib/Makefile.in
scilab/modules/mexlib/src/libmat/libmat.vcxproj
scilab/modules/mexlib/src/libmex/libmex.vcxproj
scilab/modules/mexlib/src/libmx/libmx.vcxproj
scilab/modules/optimization/Makefile.am
scilab/modules/optimization/Makefile.in
scilab/modules/optimization/src/c/optimization.vcxproj
scilab/modules/output_stream/Makefile.am
scilab/modules/output_stream/Makefile.in
scilab/modules/output_stream/sci_gateway/cpp/output_stream_gw/output_stream_gw.vcxproj
scilab/modules/output_stream/src/c/output_stream.vcxproj
scilab/modules/parallel/Makefile.am
scilab/modules/parallel/Makefile.in
scilab/modules/parallel/src/c/parallel.vcxproj
scilab/modules/parameters/Makefile.am
scilab/modules/parameters/Makefile.in
scilab/modules/polynomials/Makefile.am
scilab/modules/polynomials/Makefile.in
scilab/modules/polynomials/src/c/polynomials.vcxproj
scilab/modules/preferences/Makefile.am
scilab/modules/preferences/Makefile.in
scilab/modules/preferences/src/c/preferences.vcxproj
scilab/modules/randlib/Makefile.am
scilab/modules/randlib/Makefile.in
scilab/modules/randlib/src/c/randlib.vcxproj
scilab/modules/scicos/Makefile.am
scilab/modules/scicos/Makefile.in
scilab/modules/scicos/src/c/scicos.vcxproj
scilab/modules/scicos_blocks/Makefile.am
scilab/modules/scicos_blocks/Makefile.in
scilab/modules/scinotes/Makefile.am
scilab/modules/scinotes/Makefile.in
scilab/modules/signal_processing/Makefile.am
scilab/modules/signal_processing/Makefile.in
scilab/modules/signal_processing/sci_gateway/cpp/signal_processing_gw.vcxproj
scilab/modules/signal_processing/src/c/signal_processing.vcxproj
scilab/modules/sound/Makefile.am
scilab/modules/sound/Makefile.in
scilab/modules/sparse/Makefile.am
scilab/modules/sparse/Makefile.in
scilab/modules/sparse/sci_gateway/cpp/sparse_gw.vcxproj
scilab/modules/special_functions/Makefile.am
scilab/modules/special_functions/Makefile.in
scilab/modules/special_functions/src/c/special_functions.vcxproj
scilab/modules/spreadsheet/Makefile.am
scilab/modules/spreadsheet/Makefile.in
scilab/modules/spreadsheet/spreadsheet.vcxproj
scilab/modules/statistics/Makefile.am
scilab/modules/statistics/Makefile.in
scilab/modules/statistics/sci_gateway/cpp/statistics_gw.vcxproj
scilab/modules/string/Makefile.am
scilab/modules/string/Makefile.in
scilab/modules/string/sci_gateway/cpp/string_gw.vcxproj
scilab/modules/string/src/c/string.vcxproj
scilab/modules/symbolic/Makefile.am
scilab/modules/symbolic/Makefile.in
scilab/modules/tclsci/Makefile.am
scilab/modules/tclsci/Makefile.in
scilab/modules/tclsci/tclsci.vcxproj
scilab/modules/time/Makefile.am
scilab/modules/time/Makefile.in
scilab/modules/time/sci_gateway/cpp/time_gw.vcxproj
scilab/modules/types/Makefile.am
scilab/modules/types/Makefile.in
scilab/modules/types/sci_gateway/cpp/types_gw.vcxproj
scilab/modules/ui_data/Makefile.am
scilab/modules/ui_data/Makefile.in
scilab/modules/umfpack/Makefile.am
scilab/modules/umfpack/Makefile.in
scilab/modules/umfpack/src/c/umfpack.vcxproj
scilab/modules/windows_tools/Makefile.am
scilab/modules/windows_tools/Makefile.in
scilab/modules/windows_tools/src/c/CScilex/CScilex.vcxproj
scilab/modules/windows_tools/src/c/WScilex/WScilex.vcxproj
scilab/modules/windows_tools/src/c/scilab_windows/scilab_windows.vcxproj
scilab/modules/windows_tools/src/c/windows_tools.vcxproj
scilab/modules/xcos/Makefile.am
scilab/modules/xcos/Makefile.in
scilab/modules/xcos/src/c/xcos.vcxproj
scilab/modules/xml/Makefile.am
scilab/modules/xml/Makefile.in
scilab/modules/xml/xml.vcxproj

index f12e8f0..4bd3736 100644 (file)
@@ -67,6 +67,7 @@ scilab_bin_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/console/includes/ \
     -I$(top_srcdir)/modules/output_stream/includes/ \
     -I$(top_srcdir)/modules/functions_manager/includes/ \
index 2df72ab..d60df52 100644 (file)
@@ -823,6 +823,7 @@ scilab_bin_CPPFLAGS = -I$(top_srcdir)/modules/ast/includes/ast/ \
        -I$(top_srcdir)/modules/ast/includes/symbol/ \
        -I$(top_srcdir)/modules/ast/includes/system_env/ \
        -I$(top_srcdir)/modules/ast/includes/types/ \
+       -I$(top_srcdir)/modules/ast/includes/analysis/ \
        -I$(top_srcdir)/modules/console/includes/ \
        -I$(top_srcdir)/modules/output_stream/includes/ \
        -I$(top_srcdir)/modules/functions_manager/includes/ \
index a3b342d..9e2eda9 100644 (file)
@@ -52,6 +52,7 @@ libsciaction_binding_disable_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/localization/includes/ \
        -I$(top_srcdir)/modules/output_stream/includes \
        -I$(top_srcdir)/libs/dynamiclibrary/includes \
@@ -71,6 +72,7 @@ libsciaction_binding_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/jvm/includes/ \
     -I$(top_srcdir)/modules/api_scilab/includes/ \
     -I$(top_srcdir)/modules/commons/src/jni/ \
index 86d43b1..fb670fb 100644 (file)
@@ -605,6 +605,7 @@ libsciaction_binding_disable_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/localization/includes/ \
        -I$(top_srcdir)/modules/output_stream/includes \
        -I$(top_srcdir)/libs/dynamiclibrary/includes \
@@ -625,6 +626,7 @@ libsciaction_binding_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/jvm/includes/ \
     -I$(top_srcdir)/modules/api_scilab/includes/ \
     -I$(top_srcdir)/modules/commons/src/jni/ \
index c54dd50..72a5196 100644 (file)
@@ -85,7 +85,7 @@
     <ClCompile>
       <AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;_DEBUG;_WINDOWS;_USRDLL;ACTION_BINDING_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>Default</BasicRuntimeChecks>
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;_DEBUG;_WINDOWS;_USRDLL;ACTION_BINDING_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>Default</BasicRuntimeChecks>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;NDEBUG;_WINDOWS;_USRDLL;ACTION_BINDING_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../src/c;../../src/jni;../../../../libs/intl;../../../../libs/Eigen/includes;../../../../java/jdk/include;../../../../java/jdk/include/win32;../../../core/includes;../../../localization/includes;../../../output_stream/includes;../../../jvm/includes;../../../commons/src/jni;../../../dynamic_link/includes;../../../string/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;NDEBUG;_WINDOWS;_USRDLL;ACTION_BINDING_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
index 71ea5f2..d36cc4b 100644 (file)
@@ -43,6 +43,7 @@ libsciapi_scilab_la_CPPFLAGS= \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/core/includes \
     -I$(top_srcdir)/modules/call_scilab/includes \
     -I$(top_srcdir)/modules/localization/includes \
index 9778379..48e79cd 100644 (file)
@@ -592,6 +592,7 @@ libsciapi_scilab_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/core/includes \
     -I$(top_srcdir)/modules/call_scilab/includes \
     -I$(top_srcdir)/modules/localization/includes \
index 2cc0cb2..63d02cb 100644 (file)
@@ -81,7 +81,7 @@
     <ClCompile>
       <AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;_DEBUG;_WINDOWS;_USRDLL;API_SCILAB_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>Default</BasicRuntimeChecks>
@@ -132,7 +132,7 @@ cd .. &gt;nul
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;_DEBUG;_WINDOWS;_USRDLL;API_SCILAB_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>Default</BasicRuntimeChecks>
@@ -184,7 +184,7 @@ cd .. &gt;nul
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;NDEBUG;_WINDOWS;_USRDLL;API_SCILAB_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -245,7 +245,7 @@ cd .. &gt;nul
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../core/includes;../call_scilab/includes;../string/includes;../output_stream/includes;../localization/includes;../../libs/intl;../elementary_functions/includes;../threads/includes;../console/includes;../../libs/Eigen/includes;../dynamic_link/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;NDEBUG;_WINDOWS;_USRDLL;API_SCILAB_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
index f9e3194..1ebecdb 100644 (file)
@@ -28,6 +28,7 @@ libsciarnoldi_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/api_scilab/includes/ \
     -I$(top_srcdir)/modules/localization/includes/ \
     -I$(top_srcdir)/modules/output_stream/includes/ \
index b457c7f..50d9890 100644 (file)
@@ -558,6 +558,7 @@ libsciarnoldi_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/api_scilab/includes/ \
     -I$(top_srcdir)/modules/localization/includes/ \
     -I$(top_srcdir)/modules/output_stream/includes/ \
index 6d94830..0bcba49 100644 (file)
@@ -80,7 +80,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;_DEBUG;_WINDOWS;_USRDLL;ARNOLDI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;_DEBUG;_WINDOWS;_USRDLL;ARNOLDI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
     <ClCompile>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;NDEBUG;_WINDOWS;_USRDLL;ARNOLDI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     <ClCompile>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src;../../libs/intl;../core/includes;../output_stream/includes;../localization/includes;../api_scilab/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;NDEBUG;_WINDOWS;_USRDLL;ARNOLDI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
index 16bfd65..710329d 100644 (file)
@@ -117,6 +117,7 @@ libsciast_la_CPPFLAGS = \
        -Iincludes/symbol \
        -Iincludes/system_env \
        -Iincludes/types \
+       -Iincludes/analysis \
        -Isrc/cpp \
     -I$(top_srcdir)/modules/dynamic_link/includes \
        -I$(top_srcdir)/modules/functions_manager/includes \
index 3e9ff74..2e31c7a 100644 (file)
@@ -766,6 +766,7 @@ libsciast_la_CPPFLAGS = \
        -Iincludes/symbol \
        -Iincludes/system_env \
        -Iincludes/types \
+       -Iincludes/analysis \
        -Isrc/cpp \
     -I$(top_srcdir)/modules/dynamic_link/includes \
        -I$(top_srcdir)/modules/functions_manager/includes \
index c425e61..0085e3e 100644 (file)
@@ -80,7 +80,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -118,7 +118,7 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -154,7 +154,7 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -192,7 +192,7 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -242,6 +242,13 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <None Include="threads_Import.def" />
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="includes\analysis\AnalysisVisitor.hxx" />
+    <ClInclude Include="includes\analysis\Checkers.hxx" />
+    <ClInclude Include="includes\analysis\Decorator.hxx" />
+    <ClInclude Include="includes\analysis\ForList.hxx" />
+    <ClInclude Include="includes\analysis\Result.hxx" />
+    <ClInclude Include="includes\analysis\SymInfo.hxx" />
+    <ClInclude Include="includes\analysis\TIType.hxx" />
     <ClInclude Include="includes\ast\debugvisitor.hxx" />
     <ClInclude Include="includes\ast\deserializervisitor.hxx" />
     <ClInclude Include="includes\ast\dummyvisitor.hxx" />
index 6a5e5df..96dc424 100644 (file)
@@ -54,6 +54,9 @@
     <Filter Include="Source Files\operations">
       <UniqueIdentifier>{cc482308-cd44-4b1f-b6e7-c807532f307d}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Header Files\analysis">
+      <UniqueIdentifier>{86c0db79-0efd-47e5-b679-e5d4faef469b}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <None Include="core_Import.def">
     <ClInclude Include="includes\operations\types_or.hxx">
       <Filter>Header Files\operations</Filter>
     </ClInclude>
+    <ClInclude Include="includes\analysis\AnalysisVisitor.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\Checkers.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\Decorator.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\ForList.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\Result.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\SymInfo.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\TIType.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="src\cpp\ast\debugvisitor.cpp">
diff --git a/scilab/modules/ast/includes/analysis/AnalysisVisitor.hxx b/scilab/modules/ast/includes/analysis/AnalysisVisitor.hxx
new file mode 100644 (file)
index 0000000..4ba6ad1
--- /dev/null
@@ -0,0 +1,624 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __ANALYSIS_VISITOR_HXX__
+#define __ANALYSIS_VISITOR_HXX__
+
+#include <algorithm>
+#include <chrono>
+#include <limits>
+#include <map>
+#include <memory>
+
+#include "visitor.hxx"
+#include "allexp.hxx"
+#include "allvar.hxx"
+#include "Checkers.hxx"
+#include "ForList.hxx"
+#include "Result.hxx"
+#include "SymInfo.hxx"
+
+namespace analysis
+{
+
+class AnalysisVisitor : public ast::Visitor
+{
+
+public:
+
+    typedef std::map<symbol::Symbol, SymInfo> MapSymInfo;
+
+private:
+
+    MapSymInfo symsinfo;
+    Result _result;
+    unsigned int scalars_tmp[TIType::COUNT][2];
+    unsigned int arrays_tmp[TIType::COUNT][2];
+
+    std::chrono::steady_clock::time_point start;
+    std::chrono::steady_clock::time_point end;
+
+public:
+
+    AnalysisVisitor()
+    {
+        start_chrono();
+        std::fill(&scalars_tmp[0][0], &scalars_tmp[0][0] + TIType::COUNT * 2, 0);
+        std::fill(&arrays_tmp[0][0], &arrays_tmp[0][0] + TIType::COUNT * 2, 0);
+    }
+
+    const MapSymInfo & get_infos() const
+    {
+        return symsinfo;
+    }
+
+    // Only for debug use
+    inline void print_info()
+    {
+        stop_chrono();
+        std::wcout << L"Analysis duration: " << get_duration() << L" s" << std::endl;
+
+        std::wcout << L"Temporary scalars:" << std::endl;
+        for (unsigned int i = 0; i < TIType::COUNT; ++i)
+        {
+            if (scalars_tmp[i][0] || scalars_tmp[i][1])
+            {
+                std::wcout << TIType((TIType::Type)i) << ": " << scalars_tmp[i][0] << L" and " << scalars_tmp[i][1] << std::endl;
+            }
+        }
+
+        std::wcout << std::endl;
+
+        std::wcout << L"Temporary arrays:" << std::endl;
+        for (unsigned int i = 0; i < TIType::COUNT; ++i)
+        {
+            if (arrays_tmp[i][0] || arrays_tmp[i][1])
+            {
+                std::wcout << TIType((TIType::Type)i) << ": " << arrays_tmp[i][0] << L" and " << arrays_tmp[i][1] << std::endl;
+            }
+        }
+
+        std::wcout << std::endl;
+
+        for (MapSymInfo::const_iterator i = symsinfo.begin(), end = symsinfo.end(); i != end; ++i)
+        {
+            std::wcout << i->first.name_get() << L" -> " << i->second << std::endl;
+        }
+
+        std::wcout << std::endl;
+    }
+
+    void start_chrono()
+    {
+        start = std::chrono::steady_clock::now();
+    }
+
+    void stop_chrono()
+    {
+        end = std::chrono::steady_clock::now();
+    }
+
+    double get_duration() const
+    {
+        return (double)std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count() * 1e-9;
+    }
+
+private:
+
+    inline void add_tmp(const TIType & t, const int n = 1, const bool scalar = false)
+    {
+        if (scalar)
+        {
+            scalars_tmp[t.type][0] += n;
+            if (n > 0 && scalars_tmp[t.type][0] > scalars_tmp[t.type][1])
+            {
+                scalars_tmp[t.type][1] = scalars_tmp[t.type][0];
+            }
+        }
+        else
+        {
+            arrays_tmp[t.type][0] += n;
+            if (n > 0 && arrays_tmp[t.type][0] > arrays_tmp[t.type][1])
+            {
+                arrays_tmp[t.type][1] = arrays_tmp[t.type][0];
+            }
+        }
+    }
+
+    inline TIType get_ti(const symbol::Symbol & sym)
+    {
+        MapSymInfo::const_iterator i = symsinfo.find(sym);
+        if (i != symsinfo.end())
+        {
+            return i->second.current_type;
+        }
+
+        types::InternalType * pIT = symbol::Context::getInstance()->get(sym);
+        TIType t;
+        if (pIT && pIT->isGenericType())
+        {
+            TIType::Type type;
+            types::GenericType * pGT = static_cast<types::GenericType *>(pIT);
+            switch (pIT->getType())
+            {
+                case types::InternalType::ScilabInt8 :
+                    type = TIType::Type::INT8;
+                    break;
+                case types::InternalType::ScilabUInt8 :
+                    type = TIType::Type::UINT8;
+                    break;
+                case types::InternalType::ScilabInt16 :
+                    type = TIType::Type::INT16;
+                    break;
+                case types::InternalType::ScilabUInt16 :
+                    type = TIType::Type::UINT16;
+                    break;
+                case types::InternalType::ScilabInt32 :
+                    type = TIType::Type::INT32;
+                    break;
+                case types::InternalType::ScilabUInt32 :
+                    type = TIType::Type::UINT32;
+                    break;
+                case types::InternalType::ScilabInt64 :
+                    type = TIType::Type::INT64;
+                    break;
+                case types::InternalType::ScilabUInt64 :
+                    type = TIType::Type::UINT64;
+                    break;
+                case types::InternalType::ScilabString :
+                    type = TIType::Type::STRING;
+                    break;
+                case types::InternalType::ScilabDouble :
+                {
+                    types::Double * pDbl = static_cast<types::Double *>(pGT);
+                    if (pDbl->isEmpty())
+                    {
+                        type = TIType::Type::EMPTY;
+                    }
+                    else if (pDbl->isComplex())
+                    {
+                        type = TIType::Type::COMPLEX;
+                    }
+                    else
+                    {
+                        type = TIType::Type::DOUBLE;
+                    }
+                    break;
+                }
+                case types::InternalType::ScilabBool :
+                    type = TIType::Type::BOOLEAN;
+                    break;
+                case types::InternalType::ScilabPolynom :
+                    type = TIType::Type::POLYNOMIAL;
+                    break;
+                case types::InternalType::ScilabSparse :
+                    type = TIType::Type::SPARSE;
+                    break;
+                default :
+                    type = TIType::Type::UNKNOWN;
+            }
+
+            t = TIType(type, pGT->getRows(), pGT->getCols());
+        }
+        else
+        {
+            t = TIType();
+        }
+
+        SymInfo si;
+        si.current_type = t;
+        symsinfo.emplace(sym, si);
+
+        return t;
+    }
+
+    inline void set_sym_use(const symbol::Symbol & sym, SymInfo::Kind k)
+    {
+        MapSymInfo::iterator i = symsinfo.find(sym);
+        if (i != symsinfo.end())
+        {
+            i->second.set(k);
+        }
+        else
+        {
+            symsinfo.emplace(sym, k);
+        }
+    }
+
+    inline void set_sym_use(const symbol::Symbol & sym, SymInfo::Kind k1, SymInfo::Kind k2)
+    {
+        MapSymInfo::iterator i = symsinfo.find(sym);
+        if (i != symsinfo.end())
+        {
+            i->second.set(k1, k2);
+        }
+        else
+        {
+            symsinfo.emplace(sym, SymInfo(k1, k2));
+        }
+    }
+
+    inline void set_sym_type(const symbol::Symbol & sym, const TIType & t)
+    {
+        MapSymInfo::iterator i = symsinfo.find(sym);
+        if (i != symsinfo.end())
+        {
+            i->second.current_type = t;
+        }
+        else
+        {
+            SymInfo si;
+            si.current_type = t;
+            symsinfo.emplace(sym, si);
+        }
+    }
+
+    inline void result_set(Result & val)
+    {
+        _result = val;
+    }
+
+    inline void result_set(Result && val)
+    {
+        _result = val;
+    }
+
+    inline Result & result_get()
+    {
+        return _result;
+    }
+
+    void visit(ast::SimpleVar & e)
+    {
+        symbol::Symbol & sym = e.name_get();
+        TIType typ = get_ti(sym);
+        e.decorator_get().res = Result(typ, false);
+        result_set(e.decorator_get().res);
+        set_sym_use(e.name_get(), SymInfo::READ);
+    }
+
+    void visit(ast::DollarVar & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::ColonVar & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::ArrayListVar & e)
+    {
+        const std::list<ast::Var *> & vars = e.vars_get();
+        for (std::list<ast::Var *>::const_iterator i = vars.begin(), end = vars.end(); i != end ; ++i)
+        {
+            (*i)->accept(*this);
+        }
+    }
+
+    void visit(ast::IntExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::FloatExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::DoubleExp & e)
+    {
+        e.decorator_get().res = Result(TIType(TIType::DOUBLE, 1, 1), false);
+        result_set(e.decorator_get().res);
+    }
+
+    void visit(ast::BoolExp & e)
+    {
+        e.decorator_get().res = Result(TIType(TIType::BOOLEAN, 1, 1), false);
+        result_set(e.decorator_get().res);
+    }
+
+    void visit(ast::StringExp & e)
+    {
+        e.decorator_get().res = Result(TIType(TIType::STRING, 1, 1), false);
+        result_set(e.decorator_get().res);
+    }
+
+    void visit(ast::CommentExp & e)
+    {
+        // ignored
+    }
+
+    void visit(ast::NilExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::CallExp & e)
+    {
+        e.name_get().accept(*this);
+        const std::list<ast::Exp *> & args = e.args_get();
+        for (std::list<ast::Exp *>::const_iterator i = args.begin(), end = args.end(); i != end; ++i)
+        {
+            (*i)->accept(*this);
+        }
+    }
+
+    void visit(ast::CellCallExp & e)
+    {
+        visit(static_cast<ast::CallExp &>(e));
+    }
+
+    void visit(ast::OpExp & e)
+    {
+        e.left_get().accept(*this);
+        Result LR = result_get();
+        e.right_get().accept(*this);
+        Result & RR = result_get();
+        const TIType & LT = LR.get_type();
+        const TIType & RT = RR.get_type();
+        TIType resT;
+        bool allocTmp = false;
+
+        // We can released the temp vars
+        if (LR.istemp())
+        {
+            add_tmp(LT, -1);
+        }
+        if (RR.istemp())
+        {
+            add_tmp(RT, -1);
+        }
+
+        switch (e.oper_get())
+        {
+            case ast::OpExp::plus :
+            case ast::OpExp::minus :
+            case ast::OpExp::dottimes :
+            {
+                // TODO: check if the rules for addition and subtraction are the same
+                resT = check_add(LT, RT);
+                break;
+            }
+            case ast::OpExp::times :
+            {
+                // multiplication is not commutative for matrice pxq
+                resT = check_times(LT, RT);
+                break;
+            }
+        }
+
+        if (resT.isknown() && !resT.isscalar())
+        {
+            // result is a matrix so we need a tmp
+            add_tmp(resT.type, 1);
+            allocTmp = true;
+        }
+
+        e.decorator_get().res = Result(resT, allocTmp);
+        result_set(e.decorator_get().res);
+    }
+
+    void visit(ast::LogicalOpExp & e)
+    {
+        e.left_get().accept(*this);
+        e.right_get().accept(*this);
+    }
+
+    void visit(ast::AssignExp & e)
+    {
+        if (e.left_exp_get().is_simple_var())
+        {
+            ast::SimpleVar & var = static_cast<ast::SimpleVar &>(e.left_exp_get());
+            symbol::Symbol & sym = var.name_get();
+
+            e.right_exp_get().accept(*this);
+            var.decorator_get().res = result_get();
+
+            set_sym_use(sym, SymInfo::REPLACE);
+            set_sym_type(sym, result_get().get_type());
+        }
+        else
+        {
+            // TODO: handle this case
+        }
+    }
+
+    void visit(ast::IfExp & e)
+    {
+        e.test_get().accept(*this);
+        e.then_get().accept(*this);
+        if (e.has_else())
+        {
+            e.else_get().accept(*this);
+        }
+    }
+
+    void visit(ast::WhileExp & e)
+    {
+        e.test_get().accept(*this);
+        e.body_get().accept(*this);
+    }
+
+    void visit(ast::ForExp & e)
+    {
+        e.vardec_get().accept(*this);
+        e.body_get().accept(*this);
+
+        MapSymInfo::const_iterator it = symsinfo.find(e.vardec_get().name_get());
+        if (it->second.read)
+        {
+            e.vardec_get().list_info_get().set_read_in_loop(true);
+        }
+    }
+
+    void visit(ast::BreakExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::ContinueExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::TryCatchExp & e)
+    {
+        e.try_get().accept(*this);
+        e.catch_get().accept(*this);
+    }
+
+    void visit(ast::SelectExp & e)
+    {
+        e.select_get()->accept(*this);
+        ast::cases_t * cases = e.cases_get();
+        for (ast::cases_t::const_iterator i = cases->begin(), end = cases->end(); i != end; ++i)
+        {
+            (*i)->accept(*this);
+        }
+        e.default_case_get()->accept(*this);
+    }
+
+    void visit(ast::CaseExp & e)
+    {
+        e.test_get()->accept(*this);
+        e.body_get()->accept(*this);
+    }
+
+    void visit(ast::ReturnExp & e)
+    {
+        e.exp_get().accept(*this);
+    }
+
+    void visit(ast::FieldExp & e)
+    {
+        // a.b.c <=> (a.b).c where a.b is the head and c is the tail
+
+        //e.head_get()->accept(*this);
+        //e.tail_get()->accept(*this);
+    }
+
+    void visit(ast::NotExp & e)
+    {
+        e.exp_get().accept(*this);
+    }
+
+    void visit(ast::TransposeExp & e)
+    {
+        e.exp_get().accept(*this);
+    }
+
+    void visit(ast::MatrixExp & e)
+    {
+        const std::list<ast::MatrixLineExp *> & lines = e.lines_get();
+        for (std::list<ast::MatrixLineExp *>::const_iterator i = lines.begin(), end = lines.end(); i != end; ++i)
+        {
+            (*i)->accept(*this);
+        }
+    }
+
+    void visit(ast::MatrixLineExp & e)
+    {
+        const std::list<ast::Exp *> & columns = e.columns_get();
+        for (std::list<ast::Exp *>::const_iterator i = columns.begin(), end = columns.end(); i != end; ++i)
+        {
+            (*i)->accept(*this);
+        }
+    }
+
+    void visit(ast::CellExp & e)
+    {
+        visit(static_cast<ast::MatrixExp &>(e));
+    }
+
+    void visit(ast::SeqExp & e)
+    {
+        for (std::list<ast::Exp *>::const_iterator i = e.exps_get().begin(), end = e.exps_get().end(); i != end; ++i)
+        {
+            (*i)->accept(*this);
+        }
+    }
+
+    void visit(ast::ArrayListExp & e)
+    {
+        const std::list<ast::Exp *> & exps = e.exps_get();
+        for (std::list<ast::Exp *>::const_iterator i = exps.begin(), end = exps.end(); i != end; ++i)
+        {
+            (*i)->accept(*this);
+        }
+    }
+
+    void visit(ast::AssignListExp & e)
+    {
+        visit(static_cast<ast::ArrayListExp &>(e));
+    }
+
+    void visit(ast::VarDec & e)
+    {
+        // VarDec is only used in For loop for iterator declaration
+        symbol::Symbol & sym = e.name_get();
+        if (e.init_get().is_list_exp())
+        {
+            ast::ListExp & le = static_cast<ast::ListExp &>(e.init_get());
+            if (le.start_get().is_double_exp() && le.step_get().is_double_exp() && le.end_get().is_double_exp())
+            {
+                ForList64 fl(static_cast<const ast::DoubleExp &>(le.start_get()).value_get(),
+                             static_cast<const ast::DoubleExp &>(le.step_get()).value_get(),
+                             static_cast<const ast::DoubleExp &>(le.end_get()).value_get());
+                e.list_info_set(fl);
+                set_sym_use(sym, SymInfo::REPLACE, SymInfo::FOR_IT);
+                set_sym_type(sym, fl.get_type());
+                // No need to visit the list (it has been visited just before)
+            }
+            else
+            {
+                e.list_info_set(ForList64());
+                le.accept(*this);
+            }
+        }
+    }
+
+    void visit(ast::FunctionDec & e)
+    {
+        e.args_get().accept(*this);
+        e.returns_get().accept(*this);
+        e.body_get().accept(*this);
+    }
+
+    void visit(ast::ListExp & e)
+    {
+        double start = std::numeric_limits<double>::quiet_NaN();
+        double step = std::numeric_limits<double>::quiet_NaN();
+        double end = std::numeric_limits<double>::quiet_NaN();
+
+        if (e.start_get().is_double_exp())
+        {
+            start = static_cast<const ast::DoubleExp &>(e.start_get()).value_get();
+        }
+
+        if (e.step_get().is_double_exp())
+        {
+            step = static_cast<ast::DoubleExp &>(e.step_get()).value_get();
+        }
+
+        if (e.end_get().is_double_exp())
+        {
+            end = static_cast<ast::DoubleExp &>(e.end_get()).value_get();
+        }
+
+        const_cast<ast::ListExp &>(e).set_values(start, step, end);
+    }
+};
+
+} // namespace analysis
+
+#endif // __ANALYSIS_VISITOR_HXX__
diff --git a/scilab/modules/ast/includes/analysis/Checkers.hxx b/scilab/modules/ast/includes/analysis/Checkers.hxx
new file mode 100644 (file)
index 0000000..9fe40bb
--- /dev/null
@@ -0,0 +1,3772 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+// This file has been generated, so don't modify it by hand !!
+
+#ifndef __CHECKERS_HXX__
+#define __CHECKERS_HXX__
+
+#include "TIType.hxx"
+
+namespace analysis
+{
+inline static TIType check_add(const TIType & in0, const TIType & in1)
+{
+    switch (in0.type)
+    {
+        case TIType::EMPTY :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    return in0;
+                }
+                case TIType::COMPLEX :
+                {
+                    return in0;
+                }
+                case TIType::DOUBLE :
+                {
+                    return in0;
+                }
+                case TIType::INT16 :
+                {
+                    return in0;
+                }
+                case TIType::INT32 :
+                {
+                    return in0;
+                }
+                case TIType::INT64 :
+                {
+                    return in0;
+                }
+                case TIType::INT8 :
+                {
+                    return in0;
+                }
+                case TIType::STRING :
+                {
+                    return in0;
+                }
+                case TIType::UINT16 :
+                {
+                    return in0;
+                }
+                case TIType::UINT32 :
+                {
+                    return in0;
+                }
+                case TIType::UINT64 :
+                {
+                    return in0;
+                }
+                case TIType::UINT8 :
+                {
+                    return in0;
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::BOOLEAN :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::COMPLEX :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::DOUBLE :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT16 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT32 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT64 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT8 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::STRING :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::STRING :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT16 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT32 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT64 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT8 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        default :
+            return TIType(TIType::UNKNOWN);
+    }
+}
+
+inline static TIType check_times(const TIType & in0, const TIType & in1)
+{
+    switch (in0.type)
+    {
+        case TIType::EMPTY :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    return in0;
+                }
+                case TIType::COMPLEX :
+                {
+                    return in0;
+                }
+                case TIType::DOUBLE :
+                {
+                    return in0;
+                }
+                case TIType::INT16 :
+                {
+                    return in0;
+                }
+                case TIType::INT32 :
+                {
+                    return in0;
+                }
+                case TIType::INT64 :
+                {
+                    return in0;
+                }
+                case TIType::INT8 :
+                {
+                    return in0;
+                }
+                case TIType::STRING :
+                {
+                    return in0;
+                }
+                case TIType::UINT16 :
+                {
+                    return in0;
+                }
+                case TIType::UINT32 :
+                {
+                    return in0;
+                }
+                case TIType::UINT64 :
+                {
+                    return in0;
+                }
+                case TIType::UINT8 :
+                {
+                    return in0;
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::BOOLEAN :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::DOUBLE, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::COMPLEX :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::COMPLEX, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::COMPLEX, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::DOUBLE :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::DOUBLE, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::COMPLEX, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::COMPLEX, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::DOUBLE, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT16 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT32 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT64 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::INT8 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::INT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::INT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::STRING :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::STRING :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::STRING, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT16 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT32 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT64 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        case TIType::UINT8 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(TIType::UINT8, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT16, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT32, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT64, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.cols)
+                    {
+                        return TIType(TIType::UINT8, in0.rows, in1.cols);
+                    }
+                    return TIType(TIType::UNKNOWN);
+                }
+                default :
+                    return TIType(TIType::UNKNOWN);
+            }
+            return TIType(TIType::UNKNOWN);
+        }
+        default :
+            return TIType(TIType::UNKNOWN);
+    }
+}
+
+} // namespace analysis
+
+#endif // __CHECKERS_HXX__
\ No newline at end of file
diff --git a/scilab/modules/ast/includes/analysis/Decorator.hxx b/scilab/modules/ast/includes/analysis/Decorator.hxx
new file mode 100644 (file)
index 0000000..7c0e988
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __DECORATOR_HXX__
+#define __DECORATOR_HXX__
+
+#include "Result.hxx"
+
+#include <iostream>
+
+namespace analysis
+{
+struct Decorator
+{
+    Result res;
+
+    Decorator() : res() { }
+
+    friend std::wostream & operator<<(std::wostream & out, const Decorator & deco)
+    {
+        out << deco.res;
+        return out;
+    }
+};
+
+} // namespace analysis
+
+#endif // __DECORATOR_HXX__
diff --git a/scilab/modules/ast/includes/analysis/ForList.hxx b/scilab/modules/ast/includes/analysis/ForList.hxx
new file mode 100644 (file)
index 0000000..1778218
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __FORLIST_HXX__
+#define __FORLIST_HXX__
+
+#include <iostream>
+#include <type_traits>
+
+#include "TIType.hxx"
+#include "core_math.h"
+
+#ifdef _MSC_VER
+#include "stdint.h"
+#define TRUNC(x) ((x) > 0 ? floor(x) : ceil(x))
+#else
+#define TRUNC(x) (std::trunc(x))
+#endif
+
+namespace analysis
+{
+template<typename T>
+class ForList
+{
+    bool constant;
+    bool read_in_loop;
+    double min;
+    double step;
+    double max;
+    bool _int;
+    bool _unsigned;
+
+    static_assert(std::is_same<typename std::make_signed<T>::type, int32_t>::value || std::is_same<typename std::make_signed<T>::type, int64_t>::value, "ForList template parameter must be int32_t or int64_t");
+
+public:
+
+    ForList() : constant(false), read_in_loop(false) { }
+
+    ForList(const double m, const double s, const double M) : constant(true), read_in_loop(false), min(m), step(s), max(M)
+    {
+        if (!isempty())
+        {
+            if (min >= 0 && step > 0 && is_int<typename std::make_unsigned<T>::type>(min) && is_int<typename std::make_unsigned<T>::type>(step) && !overflow<typename std::make_unsigned<T>::type>(min, step, max))
+            {
+                _int = true;
+                _unsigned = true;
+            }
+            else if (is_int<typename std::make_signed<T>::type>(min) && is_int<typename std::make_signed<T>::type>(step) && !overflow<typename std::make_signed<T>::type>(min, step, max))
+            {
+                _int = true;
+                _unsigned = false;
+            }
+            else
+            {
+                _int = false;
+                _unsigned = false;
+            }
+        }
+        else
+        {
+            _int = false;
+            _unsigned = false;
+        }
+    }
+
+    inline bool is_read_in_loop() const
+    {
+        return read_in_loop;
+    }
+
+    inline void set_read_in_loop(const bool read)
+    {
+        read_in_loop = read;
+    }
+
+    inline bool is_constant() const
+    {
+        return constant;
+    }
+
+    inline bool is_int() const
+    {
+        return _int;
+    }
+
+    inline bool is_uint() const
+    {
+        return _unsigned;
+    }
+
+    template<typename U>
+    inline U get_min() const
+    {
+        return std::is_integral<U>::value ? TRUNC(min) : min;
+    }
+
+    template<typename U>
+    inline U get_step() const
+    {
+        return std::is_integral<U>::value ? TRUNC(step) : step;
+    }
+
+    template<typename U>
+    inline U get_max() const
+    {
+        return std::is_integral<U>::value ? TRUNC(max) : max;
+    }
+
+    inline TIType get_type() const
+    {
+        /*
+            if (isempty())
+            {
+                return TIType(TIType::EMPTY);
+            }
+
+            if (is_int())
+            {
+                if (is_uint())
+                {
+                    if (std::is_same<T, int32_t>::value)
+                    {
+                        return TIType(TIType::UINT32);
+                    }
+                    else
+                    {
+                        return TIType(TIType::UINT64);
+                    }
+                }
+                else
+                {
+                    if (std::is_same<T, int64_t>::value)
+                    {
+                        return TIType(TIType::INT32);
+                    }
+                    else
+                    {
+                        return TIType(TIType::INT64);
+                    }
+                }
+            }
+        */
+
+        return TIType(TIType::DOUBLE);
+    }
+
+    friend std::wostream & operator<<(std::wostream & out, const ForList & fl)
+    {
+        out << L"ForList: { m: " << fl.min << L", s: " << fl.step << L", M: " << fl.max << L", int: " << (fl._int ? L"T" : L"F") << L", uint: " << (fl._unsigned ? L"T" : L"F");
+        return out;
+    }
+
+private:
+
+    inline bool isempty() const
+    {
+        return step == 0 || ISNAN(min) || ISNAN(step) || ISNAN(max) || !finite(min) || !finite(step) || !finite(max) || (min < max && step < 0) || (min > max && step > 0);
+    }
+
+    template<typename U>
+    inline static bool is_int(const double x)
+    {
+        return x == TRUNC(x) && x <= std::numeric_limits<U>::max() && x >= std::numeric_limits<U>::min();
+    }
+
+    template<typename U>
+    inline static U to_int(const double x)
+    {
+        return TRUNC(x);
+    }
+
+    template<typename U>
+    inline static bool overflow(const double m, const double s, const double M)
+    {
+        if (s > 0)
+        {
+            // m + k.s <= MAX<U> < m + (k + 1).s
+            const double k = std::floor(((double)std::numeric_limits<U>::max() - m) / s);
+
+            // so if m + k * s < M then m + (k + 1).s > MAX<U> => overflow
+            return m + k * s < M;
+        }
+        else
+        {
+            // m + k.s >= MIN<U> > m + (k + 1).s
+            const double k = std::floor(((double)std::numeric_limits<U>::min() - m) / s);
+
+            // so if m + k * s > M then m + (k + 1).s < MIN<U> => overflow
+            return m + k * s > M;
+        }
+    }
+};
+
+typedef ForList<int64_t> ForList64;
+typedef ForList<int32_t> ForList32;
+
+} // namespace analysis
+
+#endif // __FORLIST_HXX__
diff --git a/scilab/modules/ast/includes/analysis/Result.hxx b/scilab/modules/ast/includes/analysis/Result.hxx
new file mode 100644 (file)
index 0000000..b503616
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __RESULT_HXX__
+#define __RESULT_HXX__
+
+#include "TIType.hxx"
+
+#include <iostream>
+
+namespace analysis
+{
+class Result
+{
+    TIType type;
+    bool temp;
+
+public:
+
+    Result() : type(), temp(false) { }
+    Result(const TIType & _type, const bool _temp) : type(_type), temp(_temp) { }
+    Result(TIType && _type, const bool _temp) : type(_type), temp(_temp) { }
+
+    inline bool istemp() const
+    {
+        return temp;
+    }
+
+    inline const TIType & get_type() const
+    {
+        return type;
+    }
+
+    friend std::wostream & operator<<(std::wostream & out, const Result & res)
+    {
+        out << L"Result {" << res.type << L", temporary: " << (res.temp ? L"true" : L"false") << L"}";
+        return out;
+    }
+};
+
+} // namespace analysis
+
+#endif // __RESULT_HXX__
diff --git a/scilab/modules/ast/includes/analysis/SymInfo.hxx b/scilab/modules/ast/includes/analysis/SymInfo.hxx
new file mode 100644 (file)
index 0000000..55f9eb7
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __SYMINFO_HXX__
+#define __SYMINFO_HXX__
+
+#include <iostream>
+
+namespace analysis
+{
+struct SymInfo
+{
+    enum Kind { WRITE, READ, REPLACE, FOR_IT };
+
+    bool write;
+    bool read;
+    bool replace;
+    bool for_it;
+    TIType current_type;
+
+    SymInfo() : write(false), read(false), replace(false), for_it(false) { }
+    SymInfo(Kind k) : write(k == WRITE), read(k == READ), replace(k == REPLACE), for_it(k == FOR_IT) { }
+    SymInfo(Kind k1, Kind k2) : write(k1 == WRITE || k2 == WRITE),
+        read(k1 == READ || k2 == READ),
+        replace(k1 == REPLACE || k2 == REPLACE),
+        for_it(k1 == FOR_IT || k2 == FOR_IT) { }
+
+    inline void set(Kind k)
+    {
+        switch (k)
+        {
+            case WRITE:
+                if (!write)
+                {
+                    write = true;
+                }
+                break;
+            case READ:
+                if (!read)
+                {
+                    read = true;
+                }
+                break;
+            case REPLACE:
+                if (!replace)
+                {
+                    replace = true;
+                }
+                break;
+            case FOR_IT:
+                if (!for_it)
+                {
+                    for_it = true;
+                }
+                break;
+        }
+    }
+
+    inline void set(Kind k1, Kind k2)
+    {
+        set(k1);
+        set(k2);
+    }
+
+    inline bool is_just_read() const
+    {
+        return !write && !replace && read;
+    }
+
+    friend std::wostream & operator<<(std::wostream & out, const SymInfo & si)
+    {
+        out << L"Symbol use { w: " << (si.write ? L'T' : L'F')
+            << L", rd: " << (si.read ? L'T' : L'F')
+            << L", rp: " << (si.replace ? L'T' : L'F')
+            << L", fi: " << (si.for_it ? L'T' : L'F')
+            << L"}, type " << si.current_type;
+        return out;
+    }
+};
+
+} // namespace analysis
+
+#endif // __SYMINFO_HXX__
diff --git a/scilab/modules/ast/includes/analysis/TIType.hxx b/scilab/modules/ast/includes/analysis/TIType.hxx
new file mode 100644 (file)
index 0000000..720fa77
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+// This file has been generated, so don't modify it by hand !!
+
+#ifndef __TITYPE_HXX__
+#define __TITYPE_HXX__
+
+#include <iostream>
+
+namespace analysis
+{
+struct TIType
+{
+    enum Type { EMPTY, BOOLEAN, COMPLEX, DOUBLE, INT16, INT32, INT64, INT8, POLYNOMIAL, STRING, SPARSE, UINT16, UINT32, UINT64, UINT8, UNKNOWN, COUNT = 16 };
+    Type type;
+    int rows;
+    int cols;
+
+    TIType() : type(Type::UNKNOWN),  rows(1), cols(1) { }
+    TIType(Type _type) : type(_type), rows(1), cols(1) { }
+    TIType(Type _type, int _rows, int _cols) : type(_type), rows(_rows), cols(_cols) { }
+
+    inline bool isscalar() const
+    {
+        return rows == 1 && cols == 1;
+    }
+
+    inline bool isknown() const
+    {
+        return type != UNKNOWN;
+    }
+
+    inline bool operator==(const TIType & r) const
+    {
+        return type == r.type && rows == r.rows && cols == r.cols;
+    }
+
+    inline std::string get_mangling() const
+    {
+        const bool sc = rows == 1 && cols == 1;
+        switch (type)
+        {
+            case EMPTY :
+                return "E";
+            case BOOLEAN :
+                return sc ? "S_b" : "M_b";
+            case COMPLEX :
+                return sc ? "S_c" : "M_c";
+            case DOUBLE :
+                return sc ? "S_d" : "M_d";
+            case INT16 :
+                return sc ? "S_i16" : "M_i16";
+            case INT32 :
+                return sc ? "S_i32" : "M_i32";
+            case INT64 :
+                return sc ? "S_i64" : "M_i64";
+            case INT8 :
+                return sc ? "S_i8" : "M_i8";
+            case POLYNOMIAL :
+                return sc ? "S_p" : "M_p";
+            case STRING :
+                return sc ? "S_s" : "M_s";
+            case SPARSE :
+                return sc ? "S_sp" : "M_sp";
+            case UINT16 :
+                return sc ? "S_ui16" : "M_ui16";
+            case UINT32 :
+                return sc ? "S_ui32" : "M_ui32";
+            case UINT64 :
+                return sc ? "S_ui64" : "M_ui64";
+            case UINT8 :
+                return sc ? "S_ui8" : "M_ui8";
+            default :
+                return "??";
+        }
+    }
+
+    inline static std::string get_unary_mangling(const std::string & pre, const TIType & l)
+    {
+        return pre + "_" + l.get_mangling();
+    }
+
+    inline static std::string get_binary_mangling(const std::string & pre, const TIType & l, const TIType & r)
+    {
+        return pre + "_" + l.get_mangling() + "_" + r.get_mangling();
+    }
+
+    friend std::wostream & operator<<(std::wostream & out, const TIType & type)
+    {
+        switch (type.type)
+        {
+            case EMPTY :
+                out << L"[]";
+                break;
+            case BOOLEAN :
+                out << L"boolean";
+                break;
+            case COMPLEX :
+                out << L"complex";
+                break;
+            case DOUBLE :
+                out << L"double";
+                break;
+            case INT16 :
+                out << L"int16";
+                break;
+            case INT32 :
+                out << L"int32";
+                break;
+            case INT64 :
+                out << L"int64";
+                break;
+            case INT8 :
+                out << L"int8";
+                break;
+            case POLYNOMIAL :
+                out << L"polynomial";
+                break;
+            case STRING :
+                out << L"string";
+                break;
+            case SPARSE :
+                out << L"sparse";
+                break;
+            case UINT16 :
+                out << L"uint16";
+                break;
+            case UINT32 :
+                out << L"uint32";
+                break;
+            case UINT64 :
+                out << L"uint64";
+                break;
+            case UINT8 :
+                out << L"uint8";
+                break;
+            case UNKNOWN :
+                out << L"unknown";
+        }
+
+        if (type.type != EMPTY && type.type != UNKNOWN)
+        {
+            out << L"[" << type.rows << L", " << type.cols << L"]";
+        }
+
+        return out;
+    }
+};
+
+} // namespace analysis
+
+namespace std
+{
+// useful to be able to put TIType in unorderd_set for example.
+template<>
+struct hash<analysis::TIType>
+{
+    inline size_t operator()(const analysis::TIType & t) const
+    {
+        return t.type + (analysis::TIType::COUNT + 1) * (t.rows + 7057 * t.cols);
+    }
+};
+} // namespace std
+
+#endif // __TITYPE_HXX__
\ No newline at end of file
index bebfc6c..c6c92d4 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "location.hxx"
 #include "visitor.hxx"
+#include "Decorator.hxx"
 
 namespace ast
 {
@@ -32,7 +33,7 @@ class Ast
 public:
     /** \brief Construct an Ast node.
     ** \param location scanner position informations */
-    Ast (const Location& location) : _location (location)
+    Ast (const Location& location) : _location (location), decorator()
     {
         nodeNumber = globalNodeNumber++;
     }
@@ -96,8 +97,25 @@ public:
         nodeNumber = _nodeNumber;
     }
 
+    const analysis::Decorator & decorator_get() const
+    {
+        return decorator;
+    }
+
+    analysis::Decorator & decorator_get()
+    {
+        return decorator;
+    }
+
+    void decorator_set(analysis::Decorator & _decorator)
+    {
+        decorator = _decorator;
+    }
+
+
 private:
     /** \brief Construct an Ast by copy. */
+    analysis::Decorator decorator;
     Ast (const Ast&);
     /** \brief Assign an Ast to this. */
     Ast& operator= (const Ast&);
index 64665fd..d8219f2 100644 (file)
@@ -33,6 +33,7 @@ libsciboolean_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/dynamic_link/includes \
     -I$(top_srcdir)/modules/functions_manager/includes \
     -I$(top_srcdir)/modules/elementary_functions/includes \
index ec0bdf1..c8693ee 100644 (file)
@@ -596,6 +596,7 @@ libsciboolean_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/dynamic_link/includes \
     -I$(top_srcdir)/modules/functions_manager/includes \
     -I$(top_srcdir)/modules/elementary_functions/includes \
index 074fa00..a6253d5 100644 (file)
@@ -80,7 +80,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BOOLEAN_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BOOLEAN_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BOOLEAN_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../functions_manager/includes;../../../elementary_functions/includes;../../../core/includes;../../../api_scilab/includes;../../../localization/includes;../../../output_stream/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../dynamic_link/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BOOLEAN_GW_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
index 9ef5ca1..db5d91c 100644 (file)
@@ -194,6 +194,7 @@ libscicacsd_la_CPPFLAGS= \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/output_stream/includes/ \
     -I$(top_srcdir)/modules/elementary_functions/includes/ \
     -I$(top_srcdir)/modules/api_scilab/includes/ \
index 6942535..5e7d88c 100644 (file)
@@ -830,6 +830,7 @@ libscicacsd_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/output_stream/includes/ \
     -I$(top_srcdir)/modules/elementary_functions/includes/ \
     -I$(top_srcdir)/modules/api_scilab/includes/ \
index a9b6dd9..8ba8ee5 100644 (file)
@@ -80,7 +80,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;_DEBUG;_WINDOWS;_USRDLL;CACSD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
@@ -112,7 +112,7 @@ lib /DEF:"$(ProjectDir)elementary_functions_f_Import.def" /SUBSYSTEM:WINDOWS /MA
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;_DEBUG;_WINDOWS;_USRDLL;CACSD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
@@ -142,7 +142,7 @@ lib /DEF:"$(ProjectDir)elementary_functions_f_Import.def" /SUBSYSTEM:WINDOWS /MA
     <ClCompile>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;NDEBUG;_WINDOWS;_USRDLL;CACSD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -179,7 +179,7 @@ lib /DEF:"$(ProjectDir)elementary_functions_f_Import.def" /SUBSYSTEM:WINDOWS /MA
     <ClCompile>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>.;../../includes;../../../../libs/intl;../../../../libs/Eigen/includes;../../../core/includes;../../../output_stream/includes;../../../dynamic_link/includes;../../../dynamic_link/src/c;../../../localization/includes;../../../core/src/c;../../../cacsd/includes;../../../api_scilab/includes;../../../elementary_functions/includes;../../../threads/includes;../../../string/includes;../../../console/includes;../../../ast/includes/types;../../../ast/includes/ast;../../../ast/includes/analysis;../../../ast/includes/exps;../../../ast/includes/operations;../../../ast/includes/symbol;../../../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FORDLL;NDEBUG;_WINDOWS;_USRDLL;CACSD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
index abc1c77..ff6c1fa 100644 (file)
@@ -26,6 +26,7 @@ libscicall_scilab_la_CPPFLAGS= \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/localization/includes/ \
     -I$(top_srcdir)/modules/output_stream/includes/ \
     -I$(top_srcdir)/modules/action_binding/includes/ \
index e540067..ba71866 100644 (file)
@@ -558,6 +558,7 @@ libscicall_scilab_la_CPPFLAGS = \
     -I$(top_srcdir)/modules/ast/includes/symbol/ \
     -I$(top_srcdir)/modules/ast/includes/system_env/ \
     -I$(top_srcdir)/modules/ast/includes/types/ \
+    -I$(top_srcdir)/modules/ast/includes/analysis/ \
     -I$(top_srcdir)/modules/localization/includes/ \
     -I$(top_srcdir)/modules/output_stream/includes/ \
     -I$(top_srcdir)/modules/action_binding/includes/ \
index 7f4402e..67ebdc5 100644 (file)
@@ -80,7 +80,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;_DEBUG;_WINDOWS;_USRDLL;CALL_SCILAB_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
@@ -112,7 +112,7 @@ lib /DEF:"$(ProjectDir)core_f_Import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;_DEBUG;_WINDOWS;_USRDLL;CALL_SCILAB_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
@@ -142,7 +142,7 @@ lib /DEF:"$(ProjectDir)core_f_Import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>FORDLL;NDEBUG;_WINDOWS;_USRDLL;CALL_SCILAB_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -180,7 +180,7 @@ lib /DEF:"$(ProjectDir)core_f_Import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>false</WholeProgramOptimization>
-      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes;src/c;../../libs/intl;../core/includes;../api_scilab/includes;../fileio/includes;../windows_tools/includes;../windows_tools/src/c/scilab_windows;../localization/includes;../action_binding/includes;../output_stream/includes;../graphics/includes../../libs/intl;../graphic_objects/includes;../string/includes;../console/includes;../ast/includes/types;../ast/includes/ast;../ast/includes/analysis;../ast/includes/exps;../ast/includes/operations;../ast/includes/symbol;../ast/includes/system_env;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 &n