Analysis: always a WIP but we would expect that the end is nearer than the begin 62/16562/3
Calixte DENIZET [Mon, 1 Jun 2015 14:14:04 +0000 (16:14 +0200)]
Change-Id: I8d7a2ee6937950aa6d07caf51fb1677834bd8595

225 files changed:
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
scilab/modules/ast/includes/analysis/Call.hxx
scilab/modules/ast/includes/analysis/ConstantValue.hxx
scilab/modules/ast/includes/analysis/ConstantVisitor.hxx
scilab/modules/ast/includes/analysis/Decorator.hxx
scilab/modules/ast/includes/analysis/ForList.hxx
scilab/modules/ast/includes/analysis/Result.hxx
scilab/modules/ast/includes/analysis/TIType.hxx
scilab/modules/ast/includes/analysis/analyzers/AddAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/AddAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/Analyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/Analyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/ArgnAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/ArgnAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/CallAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/CallAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/CeilAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/DiagAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/DiagAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/FindAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/IconvertAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/InttypeAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/IsrealAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/IsscalarAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/LengthAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/LengthAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/MatrixAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/MatrixAnalyzer.hxx with 88% similarity]
scilab/modules/ast/includes/analysis/analyzers/MemInitAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/MemInitAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/OperAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/SizeAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/SizeAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/SqrtAnalyzer.hxx [moved from scilab/modules/ast/includes/analysis/calls/SqrtAnalyzer.hxx with 100% similarity]
scilab/modules/ast/includes/analysis/analyzers/TypeAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/analyzers/TypeofAnalyzer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/Checkers.hxx
scilab/modules/ast/includes/analysis/checkers/check_____add____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____and____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____andand____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____dotpower____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____dotrdiv____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____dottimes____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____dottransp____.hxx [moved from scilab/modules/ast/includes/analysis/checkers/check_dottransp.hxx with 90% similarity]
scilab/modules/ast/includes/analysis/checkers/check_____eq____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____ge____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____gt____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____krontimes____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____ldivide____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____le____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____lt____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____neq____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____not____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____or____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____oror____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____power____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____rdivide____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____sub____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____times____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_____transp____.hxx [moved from scilab/modules/ast/includes/analysis/checkers/check_transp.hxx with 90% similarity]
scilab/modules/ast/includes/analysis/checkers/check_____unaryminus____.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_abs.hxx
scilab/modules/ast/includes/analysis/checkers/check_acos.hxx
scilab/modules/ast/includes/analysis/checkers/check_add.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_and.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_argn.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_asin.hxx
scilab/modules/ast/includes/analysis/checkers/check_atan.hxx
scilab/modules/ast/includes/analysis/checkers/check_ceil.hxx
scilab/modules/ast/includes/analysis/checkers/check_cos.hxx
scilab/modules/ast/includes/analysis/checkers/check_cosh.hxx
scilab/modules/ast/includes/analysis/checkers/check_cumprod.hxx
scilab/modules/ast/includes/analysis/checkers/check_cumsum.hxx
scilab/modules/ast/includes/analysis/checkers/check_dothypot.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_dotrdiv.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_dottimes.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_erf.hxx
scilab/modules/ast/includes/analysis/checkers/check_erfc.hxx
scilab/modules/ast/includes/analysis/checkers/check_exp.hxx
scilab/modules/ast/includes/analysis/checkers/check_floor.hxx
scilab/modules/ast/includes/analysis/checkers/check_gettext.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_hypot.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_iconvert.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_imag.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_imult.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_int.hxx
scilab/modules/ast/includes/analysis/checkers/check_int16.hxx
scilab/modules/ast/includes/analysis/checkers/check_int32.hxx
scilab/modules/ast/includes/analysis/checkers/check_int64.hxx
scilab/modules/ast/includes/analysis/checkers/check_int8.hxx
scilab/modules/ast/includes/analysis/checkers/check_inttype.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_isinf.hxx
scilab/modules/ast/includes/analysis/checkers/check_isnan.hxx
scilab/modules/ast/includes/analysis/checkers/check_isreal.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_isscalar.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_krontimes.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_log.hxx
scilab/modules/ast/includes/analysis/checkers/check_ls.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_matrix.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_max.hxx
scilab/modules/ast/includes/analysis/checkers/check_min.hxx
scilab/modules/ast/includes/analysis/checkers/check_ones.hxx
scilab/modules/ast/includes/analysis/checkers/check_or.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_prod.hxx
scilab/modules/ast/includes/analysis/checkers/check_rand.hxx
scilab/modules/ast/includes/analysis/checkers/check_round.hxx
scilab/modules/ast/includes/analysis/checkers/check_sin.hxx
scilab/modules/ast/includes/analysis/checkers/check_sinh.hxx
scilab/modules/ast/includes/analysis/checkers/check_size.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_sqrt.hxx
scilab/modules/ast/includes/analysis/checkers/check_sub.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_subt.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_sum.hxx
scilab/modules/ast/includes/analysis/checkers/check_tan.hxx
scilab/modules/ast/includes/analysis/checkers/check_tanh.hxx
scilab/modules/ast/includes/analysis/checkers/check_times.hxx [deleted file]
scilab/modules/ast/includes/analysis/checkers/check_toc.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_type.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_typeof.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/checkers/check_uint16.hxx
scilab/modules/ast/includes/analysis/checkers/check_uint32.hxx
scilab/modules/ast/includes/analysis/checkers/check_uint64.hxx
scilab/modules/ast/includes/analysis/checkers/check_uint8.hxx
scilab/modules/ast/includes/analysis/checkers/check_zeros.hxx
scilab/modules/ast/includes/analysis/data/Block.hxx
scilab/modules/ast/includes/analysis/data/CompleteMacroSignature.hxx
scilab/modules/ast/includes/analysis/data/Data.hxx
scilab/modules/ast/includes/analysis/data/DataManager.hxx
scilab/modules/ast/includes/analysis/data/FunctionBlock.hxx
scilab/modules/ast/includes/analysis/data/GlobalsCollector.hxx
scilab/modules/ast/includes/analysis/data/Info.hxx
scilab/modules/ast/includes/analysis/data/LoopBlock.hxx
scilab/modules/ast/includes/analysis/data/MacroDef.hxx
scilab/modules/ast/includes/analysis/data/PolymorphicMacroCache.hxx
scilab/modules/ast/includes/analysis/data/XBlock.hxx
scilab/modules/ast/includes/analysis/gvn/ConstraintManager.hxx
scilab/modules/ast/includes/analysis/gvn/GVN.hxx
scilab/modules/ast/includes/analysis/gvn/InferenceConstraint.hxx
scilab/modules/ast/includes/analysis/gvn/MultivariateMonomial.hxx
scilab/modules/ast/includes/analysis/gvn/MultivariatePolynomial.hxx
scilab/modules/ast/includes/analysis/gvn/SymbolicDimension.hxx
scilab/modules/ast/includes/analysis/gvn/SymbolicImplicitList.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/gvn/SymbolicList.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/gvn/SymbolicRange.hxx
scilab/modules/ast/includes/analysis/gvn/TestGVNVisitor.hxx
scilab/modules/ast/includes/analysis/logging/Logger.hxx [new file with mode: 0644]
scilab/modules/ast/includes/analysis/positivity/PositivityVisitor.hxx
scilab/modules/ast/includes/analysis/tools.hxx
scilab/modules/ast/includes/ast/debugvisitor.hxx
scilab/modules/ast/includes/ast/dummyvisitor.hxx
scilab/modules/ast/includes/ast/execvisitor.hxx
scilab/modules/ast/includes/ast/printvisitor.hxx
scilab/modules/ast/includes/ast/runvisitor.hxx
scilab/modules/ast/includes/ast/serializervisitor.hxx
scilab/modules/ast/includes/ast/stepvisitor.hxx
scilab/modules/ast/includes/ast/timedvisitor.hxx
scilab/modules/ast/includes/ast/visitor.hxx
scilab/modules/ast/includes/exps/allexp.hxx
scilab/modules/ast/includes/exps/boolexp.hxx
scilab/modules/ast/includes/exps/constexp.hxx
scilab/modules/ast/includes/exps/decls.hxx
scilab/modules/ast/includes/exps/doubleexp.hxx
scilab/modules/ast/includes/exps/exp.hxx
scilab/modules/ast/includes/exps/fastselectexp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/exps/intselectexp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/exps/location.hxx
scilab/modules/ast/includes/exps/mapintselectexp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/exps/memfillexp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/exps/selectexp.hxx
scilab/modules/ast/includes/exps/smallintselectexp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/exps/stringexp.hxx
scilab/modules/ast/includes/exps/stringselectexp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/exps/tableintselectexp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/symbol/context.hxx
scilab/modules/ast/includes/symbol/libraries.hxx
scilab/modules/ast/includes/symbol/symbol.hxx
scilab/modules/ast/includes/symbol/variables.hxx
scilab/modules/ast/includes/types/implicitlist.hxx
scilab/modules/ast/includes/types/internal.hxx
scilab/modules/ast/includes/types/library.hxx
scilab/modules/ast/src/cpp/analysis/AnalysisVisitor.cpp
scilab/modules/ast/src/cpp/analysis/ArgnAnalyzer.cpp
scilab/modules/ast/src/cpp/analysis/Block.cpp
scilab/modules/ast/src/cpp/analysis/CeilAnalyzer.cpp [moved from scilab/modules/ast/includes/analysis/calls/CeilAnalyzer.hxx with 59% similarity]
scilab/modules/ast/src/cpp/analysis/Checkers.cpp
scilab/modules/ast/src/cpp/analysis/CompleteMacroSignature.cpp
scilab/modules/ast/src/cpp/analysis/ConstantValue.cpp
scilab/modules/ast/src/cpp/analysis/ConstantVisitor.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/ConstraintManager.cpp
scilab/modules/ast/src/cpp/analysis/DiagAnalyzer.cpp
scilab/modules/ast/src/cpp/analysis/FindAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/FunctionBlock.cpp
scilab/modules/ast/src/cpp/analysis/IconvertAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/IndexAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/InferenceConstraints.cpp
scilab/modules/ast/src/cpp/analysis/InttypeAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/IsrealAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/IsscalarAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/LengthAnalyzer.cpp
scilab/modules/ast/src/cpp/analysis/ListExpAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/LoopBlock.cpp
scilab/modules/ast/src/cpp/analysis/MacroDef.cpp
scilab/modules/ast/src/cpp/analysis/MatrixAnalyzer.cpp
scilab/modules/ast/src/cpp/analysis/MemInitAnalyzer.cpp
scilab/modules/ast/src/cpp/analysis/OperAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/OperGVNValues.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/OperSymbolicRange.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/PolymorphicMacroCache.cpp
scilab/modules/ast/src/cpp/analysis/SizeAnalyzer.cpp
scilab/modules/ast/src/cpp/analysis/SymbolicList.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/TIType.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/TypeAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/TypeofAnalyzer.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/VisitAssignExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/VisitIfExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/VisitListExp.cpp
scilab/modules/ast/src/cpp/analysis/VisitMatrixExp.cpp
scilab/modules/ast/src/cpp/analysis/VisitOpExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/VisitSelectExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/analysis/XBlock.cpp
scilab/modules/ast/src/cpp/ast/debugvisitor.cpp
scilab/modules/ast/src/cpp/ast/printvisitor.cpp
scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/src/cpp/parse/flex/scanscilab.ll
scilab/modules/ast/src/cpp/parse/scanscilab.cpp
scilab/modules/ast/src/cpp/symbol/context.cpp
scilab/modules/ast/src/cpp/types/implicitlist.cpp
scilab/modules/ast/tests/unit_tests/analysis2.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/unit_tests/analysis2.tst [new file with mode: 0644]
scilab/modules/functions/sci_gateway/cpp/sci_testAnalysis.cpp

index 3ea3898..3889145 100644 (file)
@@ -108,19 +108,38 @@ src/cpp/analysis/Block.cpp \
 src/cpp/analysis/Checkers.cpp \
 src/cpp/analysis/CompleteMacroSignature.cpp \
 src/cpp/analysis/ConstantValue.cpp \
+src/cpp/analysis/ConstantVisitor.cpp \
 src/cpp/analysis/ConstraintManager.cpp \
 src/cpp/analysis/DiagAnalyzer.cpp \
 src/cpp/analysis/FunctionBlock.cpp \
+src/cpp/analysis/IndexAnalyzer.cpp \
+src/cpp/analysis/CeilAnalyzer.cpp \
 src/cpp/analysis/InferenceConstraints.cpp \
 src/cpp/analysis/LengthAnalyzer.cpp \
 src/cpp/analysis/LoopBlock.cpp \
 src/cpp/analysis/MacroDef.cpp \
 src/cpp/analysis/MatrixAnalyzer.cpp \
 src/cpp/analysis/MemInitAnalyzer.cpp \
+src/cpp/analysis/OperGVNValues.cpp \
+src/cpp/analysis/OperSymbolicRange.cpp \
 src/cpp/analysis/PolymorphicMacroCache.cpp \
 src/cpp/analysis/SizeAnalyzer.cpp \
+src/cpp/analysis/SymbolicList.cpp \
+src/cpp/analysis/TIType.cpp \
+src/cpp/analysis/IconvertAnalyzer.cpp \
+src/cpp/analysis/InttypeAnalyzer.cpp \
+src/cpp/analysis/IsrealAnalyzer.cpp \
+src/cpp/analysis/IsscalarAnalyzer.cpp \
+src/cpp/analysis/FindAnalyzer.cpp \
+src/cpp/analysis/TypeAnalyzer.cpp \
+src/cpp/analysis/TypeofAnalyzer.cpp \
+src/cpp/analysis/OperAnalyzer.cpp \
 src/cpp/analysis/VisitListExp.cpp \
 src/cpp/analysis/VisitMatrixExp.cpp \
+src/cpp/analysis/VisitOpExp.cpp \
+src/cpp/analysis/VisitSelectExp.cpp \
+src/cpp/analysis/VisitAssignExp.cpp \
+src/cpp/analysis/VisitIfExp.cpp \
 src/cpp/analysis/XBlock.cpp
 
 if ENABLE_DEBUG
index e86e3f3..3bc3c16 100644 (file)
@@ -232,19 +232,37 @@ am__libsciast_la_SOURCES_DIST = src/c/operations/doublecomplex.c \
        src/cpp/analysis/Checkers.cpp \
        src/cpp/analysis/CompleteMacroSignature.cpp \
        src/cpp/analysis/ConstantValue.cpp \
+       src/cpp/analysis/ConstantVisitor.cpp \
        src/cpp/analysis/ConstraintManager.cpp \
        src/cpp/analysis/DiagAnalyzer.cpp \
        src/cpp/analysis/FunctionBlock.cpp \
+       src/cpp/analysis/IndexAnalyzer.cpp \
+       src/cpp/analysis/CeilAnalyzer.cpp \
        src/cpp/analysis/InferenceConstraints.cpp \
        src/cpp/analysis/LengthAnalyzer.cpp \
        src/cpp/analysis/LoopBlock.cpp src/cpp/analysis/MacroDef.cpp \
        src/cpp/analysis/MatrixAnalyzer.cpp \
        src/cpp/analysis/MemInitAnalyzer.cpp \
+       src/cpp/analysis/OperGVNValues.cpp \
+       src/cpp/analysis/OperSymbolicRange.cpp \
        src/cpp/analysis/PolymorphicMacroCache.cpp \
        src/cpp/analysis/SizeAnalyzer.cpp \
+       src/cpp/analysis/SymbolicList.cpp src/cpp/analysis/TIType.cpp \
+       src/cpp/analysis/IconvertAnalyzer.cpp \
+       src/cpp/analysis/InttypeAnalyzer.cpp \
+       src/cpp/analysis/IsrealAnalyzer.cpp \
+       src/cpp/analysis/IsscalarAnalyzer.cpp \
+       src/cpp/analysis/FindAnalyzer.cpp \
+       src/cpp/analysis/TypeAnalyzer.cpp \
+       src/cpp/analysis/TypeofAnalyzer.cpp \
+       src/cpp/analysis/OperAnalyzer.cpp \
        src/cpp/analysis/VisitListExp.cpp \
        src/cpp/analysis/VisitMatrixExp.cpp \
-       src/cpp/analysis/XBlock.cpp src/cpp/types/inspector.cpp
+       src/cpp/analysis/VisitOpExp.cpp \
+       src/cpp/analysis/VisitSelectExp.cpp \
+       src/cpp/analysis/VisitAssignExp.cpp \
+       src/cpp/analysis/VisitIfExp.cpp src/cpp/analysis/XBlock.cpp \
+       src/cpp/types/inspector.cpp
 am__dirstamp = $(am__leading_dot)dirstamp
 @ENABLE_DEBUG_TRUE@am__objects_1 =  \
 @ENABLE_DEBUG_TRUE@    src/cpp/types/libsciast_la-inspector.lo
@@ -343,19 +361,38 @@ am_libsciast_la_OBJECTS =  \
        src/cpp/analysis/libsciast_la-Checkers.lo \
        src/cpp/analysis/libsciast_la-CompleteMacroSignature.lo \
        src/cpp/analysis/libsciast_la-ConstantValue.lo \
+       src/cpp/analysis/libsciast_la-ConstantVisitor.lo \
        src/cpp/analysis/libsciast_la-ConstraintManager.lo \
        src/cpp/analysis/libsciast_la-DiagAnalyzer.lo \
        src/cpp/analysis/libsciast_la-FunctionBlock.lo \
+       src/cpp/analysis/libsciast_la-IndexAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-CeilAnalyzer.lo \
        src/cpp/analysis/libsciast_la-InferenceConstraints.lo \
        src/cpp/analysis/libsciast_la-LengthAnalyzer.lo \
        src/cpp/analysis/libsciast_la-LoopBlock.lo \
        src/cpp/analysis/libsciast_la-MacroDef.lo \
        src/cpp/analysis/libsciast_la-MatrixAnalyzer.lo \
        src/cpp/analysis/libsciast_la-MemInitAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-OperGVNValues.lo \
+       src/cpp/analysis/libsciast_la-OperSymbolicRange.lo \
        src/cpp/analysis/libsciast_la-PolymorphicMacroCache.lo \
        src/cpp/analysis/libsciast_la-SizeAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-SymbolicList.lo \
+       src/cpp/analysis/libsciast_la-TIType.lo \
+       src/cpp/analysis/libsciast_la-IconvertAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-InttypeAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-IsrealAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-IsscalarAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-FindAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-TypeAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-TypeofAnalyzer.lo \
+       src/cpp/analysis/libsciast_la-OperAnalyzer.lo \
        src/cpp/analysis/libsciast_la-VisitListExp.lo \
        src/cpp/analysis/libsciast_la-VisitMatrixExp.lo \
+       src/cpp/analysis/libsciast_la-VisitOpExp.lo \
+       src/cpp/analysis/libsciast_la-VisitSelectExp.lo \
+       src/cpp/analysis/libsciast_la-VisitAssignExp.lo \
+       src/cpp/analysis/libsciast_la-VisitIfExp.lo \
        src/cpp/analysis/libsciast_la-XBlock.lo $(am__objects_1)
 libsciast_la_OBJECTS = $(am_libsciast_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -798,19 +835,37 @@ libsciast_la_SOURCES = src/c/operations/doublecomplex.c \
        src/cpp/analysis/Checkers.cpp \
        src/cpp/analysis/CompleteMacroSignature.cpp \
        src/cpp/analysis/ConstantValue.cpp \
+       src/cpp/analysis/ConstantVisitor.cpp \
        src/cpp/analysis/ConstraintManager.cpp \
        src/cpp/analysis/DiagAnalyzer.cpp \
        src/cpp/analysis/FunctionBlock.cpp \
+       src/cpp/analysis/IndexAnalyzer.cpp \
+       src/cpp/analysis/CeilAnalyzer.cpp \
        src/cpp/analysis/InferenceConstraints.cpp \
        src/cpp/analysis/LengthAnalyzer.cpp \
        src/cpp/analysis/LoopBlock.cpp src/cpp/analysis/MacroDef.cpp \
        src/cpp/analysis/MatrixAnalyzer.cpp \
        src/cpp/analysis/MemInitAnalyzer.cpp \
+       src/cpp/analysis/OperGVNValues.cpp \
+       src/cpp/analysis/OperSymbolicRange.cpp \
        src/cpp/analysis/PolymorphicMacroCache.cpp \
        src/cpp/analysis/SizeAnalyzer.cpp \
+       src/cpp/analysis/SymbolicList.cpp src/cpp/analysis/TIType.cpp \
+       src/cpp/analysis/IconvertAnalyzer.cpp \
+       src/cpp/analysis/InttypeAnalyzer.cpp \
+       src/cpp/analysis/IsrealAnalyzer.cpp \
+       src/cpp/analysis/IsscalarAnalyzer.cpp \
+       src/cpp/analysis/FindAnalyzer.cpp \
+       src/cpp/analysis/TypeAnalyzer.cpp \
+       src/cpp/analysis/TypeofAnalyzer.cpp \
+       src/cpp/analysis/OperAnalyzer.cpp \
        src/cpp/analysis/VisitListExp.cpp \
        src/cpp/analysis/VisitMatrixExp.cpp \
-       src/cpp/analysis/XBlock.cpp $(am__append_1)
+       src/cpp/analysis/VisitOpExp.cpp \
+       src/cpp/analysis/VisitSelectExp.cpp \
+       src/cpp/analysis/VisitAssignExp.cpp \
+       src/cpp/analysis/VisitIfExp.cpp src/cpp/analysis/XBlock.cpp \
+       $(am__append_1)
 libsciast_la_CPPFLAGS = \
        -I$(srcdir)/includes/ast \
        -I$(srcdir)/includes/exps \
@@ -1504,6 +1559,9 @@ src/cpp/analysis/libsciast_la-CompleteMacroSignature.lo:  \
 src/cpp/analysis/libsciast_la-ConstantValue.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-ConstantVisitor.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-ConstraintManager.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
@@ -1513,6 +1571,12 @@ src/cpp/analysis/libsciast_la-DiagAnalyzer.lo:  \
 src/cpp/analysis/libsciast_la-FunctionBlock.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-IndexAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-CeilAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-InferenceConstraints.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
@@ -1531,18 +1595,66 @@ src/cpp/analysis/libsciast_la-MatrixAnalyzer.lo:  \
 src/cpp/analysis/libsciast_la-MemInitAnalyzer.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-OperGVNValues.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-OperSymbolicRange.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-PolymorphicMacroCache.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-SizeAnalyzer.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-SymbolicList.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-TIType.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-IconvertAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-InttypeAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-IsrealAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-IsscalarAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-FindAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-TypeAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-TypeofAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-OperAnalyzer.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-VisitListExp.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-VisitMatrixExp.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-VisitOpExp.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-VisitSelectExp.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-VisitAssignExp.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/analysis/libsciast_la-VisitIfExp.lo:  \
+       src/cpp/analysis/$(am__dirstamp) \
+       src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-XBlock.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
@@ -1588,22 +1700,41 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-AnalysisVisitor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-ArgnAnalyzer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-Block.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-CeilAnalyzer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-Checkers.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-CompleteMacroSignature.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstantValue.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstantVisitor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstraintManager.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-DiagAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-FindAnalyzer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-FunctionBlock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-IconvertAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-IndexAnalyzer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-InferenceConstraints.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-InttypeAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-IsrealAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-IsscalarAnalyzer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-LengthAnalyzer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-LoopBlock.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-MacroDef.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-MatrixAnalyzer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-MemInitAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-OperAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-OperGVNValues.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-OperSymbolicRange.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-PolymorphicMacroCache.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-SizeAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-SymbolicList.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-TIType.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeofAnalyzer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitAssignExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitIfExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitListExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitMatrixExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitOpExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitSelectExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/analysis/$(DEPDIR)/libsciast_la-XBlock.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/ast/$(DEPDIR)/libsciast_la-debugvisitor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/ast/$(DEPDIR)/libsciast_la-expHistory.Plo@am__quote@
@@ -2391,6 +2522,13 @@ src/cpp/analysis/libsciast_la-ConstantValue.lo: src/cpp/analysis/ConstantValue.c
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-ConstantValue.lo `test -f 'src/cpp/analysis/ConstantValue.cpp' || echo '$(srcdir)/'`src/cpp/analysis/ConstantValue.cpp
 
+src/cpp/analysis/libsciast_la-ConstantVisitor.lo: src/cpp/analysis/ConstantVisitor.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-ConstantVisitor.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstantVisitor.Tpo -c -o src/cpp/analysis/libsciast_la-ConstantVisitor.lo `test -f 'src/cpp/analysis/ConstantVisitor.cpp' || echo '$(srcdir)/'`src/cpp/analysis/ConstantVisitor.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstantVisitor.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstantVisitor.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/ConstantVisitor.cpp' object='src/cpp/analysis/libsciast_la-ConstantVisitor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-ConstantVisitor.lo `test -f 'src/cpp/analysis/ConstantVisitor.cpp' || echo '$(srcdir)/'`src/cpp/analysis/ConstantVisitor.cpp
+
 src/cpp/analysis/libsciast_la-ConstraintManager.lo: src/cpp/analysis/ConstraintManager.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-ConstraintManager.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstraintManager.Tpo -c -o src/cpp/analysis/libsciast_la-ConstraintManager.lo `test -f 'src/cpp/analysis/ConstraintManager.cpp' || echo '$(srcdir)/'`src/cpp/analysis/ConstraintManager.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstraintManager.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-ConstraintManager.Plo
@@ -2412,6 +2550,20 @@ src/cpp/analysis/libsciast_la-FunctionBlock.lo: src/cpp/analysis/FunctionBlock.c
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-FunctionBlock.lo `test -f 'src/cpp/analysis/FunctionBlock.cpp' || echo '$(srcdir)/'`src/cpp/analysis/FunctionBlock.cpp
 
+src/cpp/analysis/libsciast_la-IndexAnalyzer.lo: src/cpp/analysis/IndexAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-IndexAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-IndexAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-IndexAnalyzer.lo `test -f 'src/cpp/analysis/IndexAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IndexAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-IndexAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-IndexAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/IndexAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-IndexAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-IndexAnalyzer.lo `test -f 'src/cpp/analysis/IndexAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IndexAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-CeilAnalyzer.lo: src/cpp/analysis/CeilAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-CeilAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-CeilAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-CeilAnalyzer.lo `test -f 'src/cpp/analysis/CeilAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/CeilAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-CeilAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-CeilAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/CeilAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-CeilAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-CeilAnalyzer.lo `test -f 'src/cpp/analysis/CeilAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/CeilAnalyzer.cpp
+
 src/cpp/analysis/libsciast_la-InferenceConstraints.lo: src/cpp/analysis/InferenceConstraints.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-InferenceConstraints.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-InferenceConstraints.Tpo -c -o src/cpp/analysis/libsciast_la-InferenceConstraints.lo `test -f 'src/cpp/analysis/InferenceConstraints.cpp' || echo '$(srcdir)/'`src/cpp/analysis/InferenceConstraints.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-InferenceConstraints.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-InferenceConstraints.Plo
@@ -2454,6 +2606,20 @@ src/cpp/analysis/libsciast_la-MemInitAnalyzer.lo: src/cpp/analysis/MemInitAnalyz
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-MemInitAnalyzer.lo `test -f 'src/cpp/analysis/MemInitAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/MemInitAnalyzer.cpp
 
+src/cpp/analysis/libsciast_la-OperGVNValues.lo: src/cpp/analysis/OperGVNValues.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-OperGVNValues.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-OperGVNValues.Tpo -c -o src/cpp/analysis/libsciast_la-OperGVNValues.lo `test -f 'src/cpp/analysis/OperGVNValues.cpp' || echo '$(srcdir)/'`src/cpp/analysis/OperGVNValues.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-OperGVNValues.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-OperGVNValues.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/OperGVNValues.cpp' object='src/cpp/analysis/libsciast_la-OperGVNValues.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-OperGVNValues.lo `test -f 'src/cpp/analysis/OperGVNValues.cpp' || echo '$(srcdir)/'`src/cpp/analysis/OperGVNValues.cpp
+
+src/cpp/analysis/libsciast_la-OperSymbolicRange.lo: src/cpp/analysis/OperSymbolicRange.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-OperSymbolicRange.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-OperSymbolicRange.Tpo -c -o src/cpp/analysis/libsciast_la-OperSymbolicRange.lo `test -f 'src/cpp/analysis/OperSymbolicRange.cpp' || echo '$(srcdir)/'`src/cpp/analysis/OperSymbolicRange.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-OperSymbolicRange.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-OperSymbolicRange.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/OperSymbolicRange.cpp' object='src/cpp/analysis/libsciast_la-OperSymbolicRange.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-OperSymbolicRange.lo `test -f 'src/cpp/analysis/OperSymbolicRange.cpp' || echo '$(srcdir)/'`src/cpp/analysis/OperSymbolicRange.cpp
+
 src/cpp/analysis/libsciast_la-PolymorphicMacroCache.lo: src/cpp/analysis/PolymorphicMacroCache.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-PolymorphicMacroCache.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-PolymorphicMacroCache.Tpo -c -o src/cpp/analysis/libsciast_la-PolymorphicMacroCache.lo `test -f 'src/cpp/analysis/PolymorphicMacroCache.cpp' || echo '$(srcdir)/'`src/cpp/analysis/PolymorphicMacroCache.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-PolymorphicMacroCache.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-PolymorphicMacroCache.Plo
@@ -2468,6 +2634,76 @@ src/cpp/analysis/libsciast_la-SizeAnalyzer.lo: src/cpp/analysis/SizeAnalyzer.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-SizeAnalyzer.lo `test -f 'src/cpp/analysis/SizeAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/SizeAnalyzer.cpp
 
+src/cpp/analysis/libsciast_la-SymbolicList.lo: src/cpp/analysis/SymbolicList.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-SymbolicList.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-SymbolicList.Tpo -c -o src/cpp/analysis/libsciast_la-SymbolicList.lo `test -f 'src/cpp/analysis/SymbolicList.cpp' || echo '$(srcdir)/'`src/cpp/analysis/SymbolicList.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-SymbolicList.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-SymbolicList.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/SymbolicList.cpp' object='src/cpp/analysis/libsciast_la-SymbolicList.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-SymbolicList.lo `test -f 'src/cpp/analysis/SymbolicList.cpp' || echo '$(srcdir)/'`src/cpp/analysis/SymbolicList.cpp
+
+src/cpp/analysis/libsciast_la-TIType.lo: src/cpp/analysis/TIType.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-TIType.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-TIType.Tpo -c -o src/cpp/analysis/libsciast_la-TIType.lo `test -f 'src/cpp/analysis/TIType.cpp' || echo '$(srcdir)/'`src/cpp/analysis/TIType.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-TIType.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-TIType.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/TIType.cpp' object='src/cpp/analysis/libsciast_la-TIType.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-TIType.lo `test -f 'src/cpp/analysis/TIType.cpp' || echo '$(srcdir)/'`src/cpp/analysis/TIType.cpp
+
+src/cpp/analysis/libsciast_la-IconvertAnalyzer.lo: src/cpp/analysis/IconvertAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-IconvertAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-IconvertAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-IconvertAnalyzer.lo `test -f 'src/cpp/analysis/IconvertAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IconvertAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-IconvertAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-IconvertAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/IconvertAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-IconvertAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-IconvertAnalyzer.lo `test -f 'src/cpp/analysis/IconvertAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IconvertAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-InttypeAnalyzer.lo: src/cpp/analysis/InttypeAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-InttypeAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-InttypeAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-InttypeAnalyzer.lo `test -f 'src/cpp/analysis/InttypeAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/InttypeAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-InttypeAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-InttypeAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/InttypeAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-InttypeAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-InttypeAnalyzer.lo `test -f 'src/cpp/analysis/InttypeAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/InttypeAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-IsrealAnalyzer.lo: src/cpp/analysis/IsrealAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-IsrealAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-IsrealAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-IsrealAnalyzer.lo `test -f 'src/cpp/analysis/IsrealAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IsrealAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-IsrealAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-IsrealAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/IsrealAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-IsrealAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-IsrealAnalyzer.lo `test -f 'src/cpp/analysis/IsrealAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IsrealAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-IsscalarAnalyzer.lo: src/cpp/analysis/IsscalarAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-IsscalarAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-IsscalarAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-IsscalarAnalyzer.lo `test -f 'src/cpp/analysis/IsscalarAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IsscalarAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-IsscalarAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-IsscalarAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/IsscalarAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-IsscalarAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-IsscalarAnalyzer.lo `test -f 'src/cpp/analysis/IsscalarAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/IsscalarAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-FindAnalyzer.lo: src/cpp/analysis/FindAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-FindAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-FindAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-FindAnalyzer.lo `test -f 'src/cpp/analysis/FindAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/FindAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-FindAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-FindAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/FindAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-FindAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-FindAnalyzer.lo `test -f 'src/cpp/analysis/FindAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/FindAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-TypeAnalyzer.lo: src/cpp/analysis/TypeAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-TypeAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-TypeAnalyzer.lo `test -f 'src/cpp/analysis/TypeAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/TypeAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/TypeAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-TypeAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-TypeAnalyzer.lo `test -f 'src/cpp/analysis/TypeAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/TypeAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-TypeofAnalyzer.lo: src/cpp/analysis/TypeofAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-TypeofAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeofAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-TypeofAnalyzer.lo `test -f 'src/cpp/analysis/TypeofAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/TypeofAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeofAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-TypeofAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/TypeofAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-TypeofAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-TypeofAnalyzer.lo `test -f 'src/cpp/analysis/TypeofAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/TypeofAnalyzer.cpp
+
+src/cpp/analysis/libsciast_la-OperAnalyzer.lo: src/cpp/analysis/OperAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-OperAnalyzer.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-OperAnalyzer.Tpo -c -o src/cpp/analysis/libsciast_la-OperAnalyzer.lo `test -f 'src/cpp/analysis/OperAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/OperAnalyzer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-OperAnalyzer.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-OperAnalyzer.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/OperAnalyzer.cpp' object='src/cpp/analysis/libsciast_la-OperAnalyzer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-OperAnalyzer.lo `test -f 'src/cpp/analysis/OperAnalyzer.cpp' || echo '$(srcdir)/'`src/cpp/analysis/OperAnalyzer.cpp
+
 src/cpp/analysis/libsciast_la-VisitListExp.lo: src/cpp/analysis/VisitListExp.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-VisitListExp.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitListExp.Tpo -c -o src/cpp/analysis/libsciast_la-VisitListExp.lo `test -f 'src/cpp/analysis/VisitListExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitListExp.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitListExp.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitListExp.Plo
@@ -2482,6 +2718,34 @@ src/cpp/analysis/libsciast_la-VisitMatrixExp.lo: src/cpp/analysis/VisitMatrixExp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-VisitMatrixExp.lo `test -f 'src/cpp/analysis/VisitMatrixExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitMatrixExp.cpp
 
+src/cpp/analysis/libsciast_la-VisitOpExp.lo: src/cpp/analysis/VisitOpExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-VisitOpExp.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitOpExp.Tpo -c -o src/cpp/analysis/libsciast_la-VisitOpExp.lo `test -f 'src/cpp/analysis/VisitOpExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitOpExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitOpExp.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitOpExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/VisitOpExp.cpp' object='src/cpp/analysis/libsciast_la-VisitOpExp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-VisitOpExp.lo `test -f 'src/cpp/analysis/VisitOpExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitOpExp.cpp
+
+src/cpp/analysis/libsciast_la-VisitSelectExp.lo: src/cpp/analysis/VisitSelectExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-VisitSelectExp.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitSelectExp.Tpo -c -o src/cpp/analysis/libsciast_la-VisitSelectExp.lo `test -f 'src/cpp/analysis/VisitSelectExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitSelectExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitSelectExp.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitSelectExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/VisitSelectExp.cpp' object='src/cpp/analysis/libsciast_la-VisitSelectExp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-VisitSelectExp.lo `test -f 'src/cpp/analysis/VisitSelectExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitSelectExp.cpp
+
+src/cpp/analysis/libsciast_la-VisitAssignExp.lo: src/cpp/analysis/VisitAssignExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-VisitAssignExp.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitAssignExp.Tpo -c -o src/cpp/analysis/libsciast_la-VisitAssignExp.lo `test -f 'src/cpp/analysis/VisitAssignExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitAssignExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitAssignExp.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitAssignExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/VisitAssignExp.cpp' object='src/cpp/analysis/libsciast_la-VisitAssignExp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-VisitAssignExp.lo `test -f 'src/cpp/analysis/VisitAssignExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitAssignExp.cpp
+
+src/cpp/analysis/libsciast_la-VisitIfExp.lo: src/cpp/analysis/VisitIfExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-VisitIfExp.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitIfExp.Tpo -c -o src/cpp/analysis/libsciast_la-VisitIfExp.lo `test -f 'src/cpp/analysis/VisitIfExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitIfExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitIfExp.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-VisitIfExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/analysis/VisitIfExp.cpp' object='src/cpp/analysis/libsciast_la-VisitIfExp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/analysis/libsciast_la-VisitIfExp.lo `test -f 'src/cpp/analysis/VisitIfExp.cpp' || echo '$(srcdir)/'`src/cpp/analysis/VisitIfExp.cpp
+
 src/cpp/analysis/libsciast_la-XBlock.lo: src/cpp/analysis/XBlock.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/analysis/libsciast_la-XBlock.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-XBlock.Tpo -c -o src/cpp/analysis/libsciast_la-XBlock.lo `test -f 'src/cpp/analysis/XBlock.cpp' || echo '$(srcdir)/'`src/cpp/analysis/XBlock.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-XBlock.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-XBlock.Plo
index 241b73b..bd23fee 100644 (file)
@@ -254,22 +254,31 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="includes\analysis\AnalysisVisitor.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\AddAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\Analyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\ArgnAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\CallAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\CeilAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\DiagAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\FindAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\IconvertAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\InttypeAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\IsrealAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\IsscalarAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\LengthAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\MatrixAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\MemInitAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\OperAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\SizeAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\SqrtAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\TypeAnalyzer.hxx" />
+    <ClInclude Include="includes\analysis\analyzers\TypeofAnalyzer.hxx" />
     <ClInclude Include="includes\analysis\Call.hxx" />
-    <ClInclude Include="includes\analysis\calls\AddAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\Analyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\ArgnAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\CallAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\CeilAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\DiagAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\LengthAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\MatrixAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\MemInitAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\SizeAnalyzer.hxx" />
-    <ClInclude Include="includes\analysis\calls\SqrtAnalyzer.hxx" />
     <ClInclude Include="includes\analysis\checkers\Checkers.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_abs.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_acos.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_add.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_and.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_argn.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_asin.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_atan.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_ceil.hxx" />
@@ -277,47 +286,75 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClInclude Include="includes\analysis\checkers\check_cosh.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_cumprod.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_cumsum.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_dothypot.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_dotrdiv.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_dottimes.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_dottransp.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_erf.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_erfc.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_exp.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_fix.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_floor.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_hypot.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_gettext.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_iconvert.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_imag.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_imult.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_int.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_int16.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_int32.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_int64.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_int8.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_inttype.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_isinf.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_isnan.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_krontimes.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_isreal.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_isscalar.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_log.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_ls.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_matrix.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_max.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_min.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_ones.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_or.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_prod.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_rand.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_round.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_sin.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_sinh.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_sinm.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_size.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_sqrt.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_sub.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_subt.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_sum.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_tan.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_tanh.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_times.hxx" />
-    <ClInclude Include="includes\analysis\checkers\check_transp.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_toc.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_type.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_typeof.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_uint16.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_uint32.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_uint64.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_uint8.hxx" />
     <ClInclude Include="includes\analysis\checkers\check_zeros.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____add____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____andand____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____and____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____dotpower____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____dotrdiv____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____dottimes____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____dottransp____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____eq____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____ge____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____gt____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____krontimes____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____ldivide____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____le____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____lt____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____neq____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____not____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____oror____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____or____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____power____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____rdivide____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____sub____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____times____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____transp____.hxx" />
+    <ClInclude Include="includes\analysis\checkers\check_____unaryminus____.hxx" />
     <ClInclude Include="includes\analysis\Chrono.hxx" />
     <ClInclude Include="includes\analysis\ConstantValue.hxx" />
     <ClInclude Include="includes\analysis\ConstantVisitor.hxx" />
@@ -339,15 +376,19 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClInclude Include="includes\analysis\data\XBlock.hxx" />
     <ClInclude Include="includes\analysis\Decorator.hxx" />
     <ClInclude Include="includes\analysis\ForList.hxx" />
+    <ClInclude Include="includes\analysis\gvn\ConstraintManager.hxx" />
     <ClInclude Include="includes\analysis\gvn\GVN.hxx" />
     <ClInclude Include="includes\analysis\gvn\InferenceConstraint.hxx" />
     <ClInclude Include="includes\analysis\gvn\MultivariateMonomial.hxx" />
     <ClInclude Include="includes\analysis\gvn\MultivariatePolynomial.hxx" />
     <ClInclude Include="includes\analysis\gvn\OpValue.hxx" />
     <ClInclude Include="includes\analysis\gvn\SymbolicDimension.hxx" />
+    <ClInclude Include="includes\analysis\gvn\SymbolicImplicitList.hxx" />
+    <ClInclude Include="includes\analysis\gvn\SymbolicList.hxx" />
     <ClInclude Include="includes\analysis\gvn\SymbolicRange.hxx" />
     <ClInclude Include="includes\analysis\gvn\TestGVNVisitor.hxx" />
     <ClInclude Include="includes\analysis\gvn\VarExp.hxx" />
+    <ClInclude Include="includes\analysis\logging\Logger.hxx" />
     <ClInclude Include="includes\analysis\positivity\PositivityVisitor.hxx" />
     <ClInclude Include="includes\analysis\Result.hxx" />
     <ClInclude Include="includes\analysis\SymInfo.hxx" />
@@ -531,22 +572,41 @@ lib /DEF:"$(ProjectDir)fileio_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile Include="src\cpp\analysis\AnalysisVisitor.cpp" />
     <ClCompile Include="src\cpp\analysis\ArgnAnalyzer.cpp" />
     <ClCompile Include="src\cpp\analysis\Block.cpp" />
+    <ClCompile Include="src\cpp\analysis\CeilAnalyzer.cpp" />
     <ClCompile Include="src\cpp\analysis\Checkers.cpp" />
     <ClCompile Include="src\cpp\analysis\CompleteMacroSignature.cpp" />
     <ClCompile Include="src\cpp\analysis\ConstantValue.cpp" />
+    <ClCompile Include="src\cpp\analysis\ConstantVisitor.cpp" />
     <ClCompile Include="src\cpp\analysis\ConstraintManager.cpp" />
     <ClCompile Include="src\cpp\analysis\DiagAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\FindAnalyzer.cpp" />
     <ClCompile Include="src\cpp\analysis\FunctionBlock.cpp" />
+    <ClCompile Include="src\cpp\analysis\IconvertAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\IndexAnalyzer.cpp" />
     <ClCompile Include="src\cpp\analysis\InferenceConstraints.cpp" />
+    <ClCompile Include="src\cpp\analysis\InttypeAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\IsrealAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\IsscalarAnalyzer.cpp" />
     <ClCompile Include="src\cpp\analysis\LengthAnalyzer.cpp" />
     <ClCompile Include="src\cpp\analysis\LoopBlock.cpp" />
     <ClCompile Include="src\cpp\analysis\MacroDef.cpp" />
     <ClCompile Include="src\cpp\analysis\MatrixAnalyzer.cpp" />
     <ClCompile Include="src\cpp\analysis\MemInitAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\OperAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\OperGVNValues.cpp" />
+    <ClCompile Include="src\cpp\analysis\OperSymbolicRange.cpp" />
     <ClCompile Include="src\cpp\analysis\PolymorphicMacroCache.cpp" />
     <ClCompile Include="src\cpp\analysis\SizeAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\SymbolicList.cpp" />
+    <ClCompile Include="src\cpp\analysis\TIType.cpp" />
+    <ClCompile Include="src\cpp\analysis\TypeAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\TypeofAnalyzer.cpp" />
+    <ClCompile Include="src\cpp\analysis\VisitAssignExp.cpp" />
+    <ClCompile Include="src\cpp\analysis\VisitIfExp.cpp" />
     <ClCompile Include="src\cpp\analysis\VisitListExp.cpp" />
     <ClCompile Include="src\cpp\analysis\VisitMatrixExp.cpp" />
+    <ClCompile Include="src\cpp\analysis\VisitOpExp.cpp" />
+    <ClCompile Include="src\cpp\analysis\VisitSelectExp.cpp" />
     <ClCompile Include="src\cpp\analysis\XBlock.cpp" />
     <ClCompile Include="src\cpp\ast\debugvisitor.cpp" />
     <ClCompile Include="src\cpp\ast\expHistory.cpp" />
index a50b1ac..f447123 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
     <Library Include="..\..\bin\blasplus.lib" />
     <Filter Include="Header Files\analysis">
       <UniqueIdentifier>{86c0db79-0efd-47e5-b679-e5d4faef469b}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Header Files\analysis\gvn">
-      <UniqueIdentifier>{f05ded2d-aeba-4235-9374-99bcb9247786}</UniqueIdentifier>
-    </Filter>
     <Filter Include="Source Files\ast\analysis">
       <UniqueIdentifier>{d2899833-14f7-4af4-8054-128d479c51c7}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Header Files\analysis\checkers">
-      <UniqueIdentifier>{916ee2e5-ec23-4614-9a27-0dade55201cb}</UniqueIdentifier>
+    <Filter Include="Header Files\analysis\analyzers">
+      <UniqueIdentifier>{5a72cf9a-7cb5-449a-bf53-1faf7b5efe43}</UniqueIdentifier>
     </Filter>
-    <Filter Include="Header Files\analysis\calls">
-      <UniqueIdentifier>{93d8f2eb-2951-4217-9a33-1d9d34edd5c9}</UniqueIdentifier>
+    <Filter Include="Header Files\analysis\checkers">
+      <UniqueIdentifier>{4f1b05fa-03dd-4aac-b8bb-97702e317ab1}</UniqueIdentifier>
     </Filter>
     <Filter Include="Header Files\analysis\data">
-      <UniqueIdentifier>{c4a42b3f-3d11-4d73-b4cd-223ff231a88b}</UniqueIdentifier>
+      <UniqueIdentifier>{b60b59ab-70ae-43be-9147-7c1782728755}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\analysis\gvn">
+      <UniqueIdentifier>{804cb02b-aba7-493d-a910-4cf16974f451}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\analysis\logging">
+      <UniqueIdentifier>{2fa5ad69-f9b3-4138-8837-19b5260c4732}</UniqueIdentifier>
     </Filter>
     <Filter Include="Header Files\analysis\positivity">
-      <UniqueIdentifier>{f4338f25-6b5b-4743-a489-2e7850e944da}</UniqueIdentifier>
+      <UniqueIdentifier>{8ed80f73-101f-4424-9cc3-dbd6293d0e05}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="includes\types\types_tools.hxx">
       <Filter>Header Files\types</Filter>
     </ClInclude>
-    <ClInclude Include="includes\types\typesdecl.hxx">
-      <Filter>Header Files\types</Filter>
-    </ClInclude>
     <ClInclude Include="includes\types\user.hxx">
       <Filter>Header Files\types</Filter>
     </ClInclude>
     <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\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>
     <ClInclude Include="includes\operations\types_dotdivide.hxx">
       <Filter>Header Files\operations</Filter>
     </ClInclude>
     <ClInclude Include="includes\ast\treevisitor.hxx">
       <Filter>Header Files\ast</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\GVN.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\system_env\threadmanagement.hxx">
+      <Filter>Header Files\system_env</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\MultivariateMonomial.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\analysis\AnalysisVisitor.hxx">
+      <Filter>Header Files\analysis</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\MultivariatePolynomial.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\analysis\Call.hxx">
+      <Filter>Header Files\analysis</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\OpValue.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\analysis\Chrono.hxx">
+      <Filter>Header Files\analysis</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\SymbolicDimension.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\analysis\ConstantValue.hxx">
+      <Filter>Header Files\analysis</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\SymbolicRange.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\analysis\ConstantVisitor.hxx">
+      <Filter>Header Files\analysis</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\TestGVNVisitor.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\analysis\Decorator.hxx">
+      <Filter>Header Files\analysis</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\VarExp.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <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\Temporary.hxx">
+      <Filter>Header Files\analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\TIType.hxx">
+      <Filter>Header Files\analysis</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\tools.hxx">
       <Filter>Header Files\analysis</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\gvn\InferenceConstraint.hxx">
-      <Filter>Header Files\analysis\gvn</Filter>
+    <ClInclude Include="includes\analysis\analyzers\AddAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\Analyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\ArgnAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\CallAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\CeilAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\DiagAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\FindAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\AddAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\IconvertAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\Analyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\InttypeAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\ArgnAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\IsrealAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\CallAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\IsscalarAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\CeilAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\LengthAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\DiagAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\MatrixAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\LengthAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\MemInitAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\MatrixAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\analyzers\OperAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\SizeAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\SqrtAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\TypeAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\analyzers\TypeofAnalyzer.hxx">
+      <Filter>Header Files\analysis\analyzers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____add____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____and____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____andand____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____dotpower____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____dotrdiv____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____dottimes____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\MemInitAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\checkers\check_____dottransp____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____eq____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____ge____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____gt____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____krontimes____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____ldivide____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____le____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____lt____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____neq____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____not____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____or____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____oror____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____power____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____rdivide____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____sub____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_____times____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\SizeAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\checkers\check_____transp____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\calls\SqrtAnalyzer.hxx">
-      <Filter>Header Files\analysis\calls</Filter>
+    <ClInclude Include="includes\analysis\checkers\check_____unaryminus____.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_abs.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     <ClInclude Include="includes\analysis\checkers\check_acos.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_add.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_and.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_argn.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_asin.hxx">
     <ClInclude Include="includes\analysis\checkers\check_cumsum.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_dothypot.hxx">
-      <Filter>Header Files\analysis\checkers</Filter>
-    </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_dotrdiv.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_erf.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_dottimes.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_erfc.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_dottransp.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_exp.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_erf.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_fix.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_erfc.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_floor.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_exp.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_gettext.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_fix.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_iconvert.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_floor.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_imag.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_hypot.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_imult.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_int.hxx">
     <ClInclude Include="includes\analysis\checkers\check_int64.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_inttype.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_isinf.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_isnan.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_krontimes.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_isreal.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_isscalar.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_log.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_ls.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_matrix.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_max.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_ones.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_or.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_prod.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_sinm.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_sqrt.hxx">
-      <Filter>Header Files\analysis\checkers</Filter>
-    </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_sub.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_size.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_subt.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_sqrt.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_sum.hxx">
     <ClInclude Include="includes\analysis\checkers\check_tanh.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_times.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_toc.hxx">
+      <Filter>Header Files\analysis\checkers</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\checkers\check_type.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\checkers\check_transp.hxx">
+    <ClInclude Include="includes\analysis\checkers\check_typeof.hxx">
       <Filter>Header Files\analysis\checkers</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\checkers\check_uint8.hxx">
     <ClInclude Include="includes\analysis\data\XBlock.hxx">
       <Filter>Header Files\analysis\data</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\positivity\PositivityVisitor.hxx">
-      <Filter>Header Files\analysis\positivity</Filter>
+    <ClInclude Include="includes\analysis\gvn\ConstraintManager.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\Call.hxx">
-      <Filter>Header Files\analysis</Filter>
+    <ClInclude Include="includes\analysis\gvn\GVN.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\Chrono.hxx">
-      <Filter>Header Files\analysis</Filter>
+    <ClInclude Include="includes\analysis\gvn\InferenceConstraint.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\Temporary.hxx">
-      <Filter>Header Files\analysis</Filter>
+    <ClInclude Include="includes\analysis\gvn\MultivariateMonomial.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
     </ClInclude>
-    <ClInclude Include="includes\system_env\threadmanagement.hxx">
-      <Filter>Header Files\system_env</Filter>
+    <ClInclude Include="includes\analysis\gvn\MultivariatePolynomial.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\ConstantValue.hxx">
-      <Filter>Header Files\analysis</Filter>
+    <ClInclude Include="includes\analysis\gvn\OpValue.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
     </ClInclude>
-    <ClInclude Include="includes\analysis\ConstantVisitor.hxx">
-      <Filter>Header Files\analysis</Filter>
+    <ClInclude Include="includes\analysis\gvn\SymbolicDimension.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\gvn\SymbolicImplicitList.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\gvn\SymbolicList.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\gvn\SymbolicRange.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\gvn\TestGVNVisitor.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\gvn\VarExp.hxx">
+      <Filter>Header Files\analysis\gvn</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\logging\Logger.hxx">
+      <Filter>Header Files\analysis\logging</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\analysis\positivity\PositivityVisitor.hxx">
+      <Filter>Header Files\analysis\positivity</Filter>
     </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="src\cpp\ast\treevisitor.cpp">
       <Filter>Source Files\ast</Filter>
     </ClCompile>
-    <ClCompile Include="src\cpp\analysis\InferenceConstraints.cpp">
-      <Filter>Source Files\ast\analysis</Filter>
+    <ClCompile Include="src\cpp\system_env\threadmanagement.cpp">
+      <Filter>Source Files\system_env</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\analysis\AnalysisVisitor.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     <ClCompile Include="src\cpp\analysis\Block.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\analysis\CeilAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
     <ClCompile Include="src\cpp\analysis\Checkers.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\analysis\CompleteMacroSignature.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\analysis\ConstantValue.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\ConstantVisitor.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
     <ClCompile Include="src\cpp\analysis\ConstraintManager.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\analysis\DiagAnalyzer.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\analysis\FindAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
     <ClCompile Include="src\cpp\analysis\FunctionBlock.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\analysis\IconvertAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\IndexAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\InferenceConstraints.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\InttypeAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\IsrealAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\IsscalarAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
     <ClCompile Include="src\cpp\analysis\LengthAnalyzer.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\analysis\MemInitAnalyzer.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\analysis\OperAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\OperGVNValues.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\OperSymbolicRange.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
     <ClCompile Include="src\cpp\analysis\PolymorphicMacroCache.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\analysis\SizeAnalyzer.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\analysis\SymbolicList.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\TIType.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\TypeAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\TypeofAnalyzer.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\VisitAssignExp.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\analysis\VisitIfExp.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
+    </ClCompile>
     <ClCompile Include="src\cpp\analysis\VisitListExp.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\analysis\VisitMatrixExp.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
-    <ClCompile Include="src\cpp\analysis\XBlock.cpp">
+    <ClCompile Include="src\cpp\analysis\VisitOpExp.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
-    <ClCompile Include="src\cpp\system_env\threadmanagement.cpp">
-      <Filter>Source Files\system_env</Filter>
+    <ClCompile Include="src\cpp\analysis\VisitSelectExp.cpp">
+      <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
-    <ClCompile Include="src\cpp\analysis\ConstantValue.cpp">
+    <ClCompile Include="src\cpp\analysis\XBlock.cpp">
       <Filter>Source Files\ast\analysis</Filter>
     </ClCompile>
   </ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
index 97caa1f..68a4ee0 100644 (file)
 #include <vector>
 
 #include "visitor.hxx"
+#include "debugvisitor.hxx"
 #include "execvisitor.hxx"
+#include "printvisitor.hxx"
 #include "allexp.hxx"
 #include "allvar.hxx"
-#include "calls/CallAnalyzer.hxx"
+#include "analyzers/CallAnalyzer.hxx"
 #include "checkers/Checkers.hxx"
 #include "Chrono.hxx"
 #include "ForList.hxx"
 #include "SymInfo.hxx"
 #include "Temporary.hxx"
 #include "TIType.hxx"
+#include "ConstantVisitor.hxx"
+#include "gvn/SymbolicList.hxx"
 
 #include "data/DataManager.hxx"
 #include "data/PolymorphicMacroCache.hxx"
 #include "gvn/ConstraintManager.hxx"
+#include "logging/Logger.hxx"
 #include "dynlib_ast.h"
 
 namespace analysis
@@ -58,8 +63,11 @@ private:
     DataManager dm;
     PolymorphicMacroCache pmc;
     ConstraintManager cm;
-
+    ConstantVisitor cv;
+    ast::DebugVisitor dv;
+    ast::PrintVisitor pv;
     std::vector<Result> multipleLHS;
+    logging::Logger logger;
 
     static MapSymCall symscall;
     static MapSymCall initCalls();
@@ -67,10 +75,12 @@ private:
 public:
 
     static bool asDouble(ast::Exp & e, double & out);
+    static bool asDouble(types::InternalType * pIT, double & out);
     static bool isDoubleConstant(const ast::Exp & e);
     static bool asDoubleMatrix(ast::Exp & e, types::Double *& data);
+    static void analyze(ast::SelectExp & e);
 
-    AnalysisVisitor()
+    AnalysisVisitor() : cv(*this), pv(std::wcerr, true, false), logger("/tmp/analysis.log")
     {
         start_chrono();
     }
@@ -80,6 +90,19 @@ public:
         //std::cerr << "delete AnalysisVisitor" << std::endl;
     }
 
+    inline CallAnalyzer * getAnalyzer(const symbol::Symbol & sym)
+    {
+        MapSymCall::iterator it = symscall.find(sym.getName());
+        if (it == symscall.end())
+        {
+            return nullptr;
+        }
+        else
+        {
+            return it->second.get();
+        }
+    }
+
     inline DataManager & getDM()
     {
         return dm;
@@ -95,14 +118,27 @@ public:
         return pmc;
     }
 
+    inline ConstantVisitor & getCV()
+    {
+        return cv;
+    }
+
+    inline ast::PrintVisitor & getPV()
+    {
+        return pv;
+    }
+
+    inline ast::ExecVisitor & getExec()
+    {
+        return cv.getExec();
+    }
+
     // Only for debug use
     inline void print_info()
     {
         stop_chrono();
 
         //std::wcout << getGVN() << std::endl << std::endl; function z=foo(x,y);z=argn(2);endfunction;jit("x=123;y=456;t=foo(x,y)")
-        // function z=foo(x,y);[z,u]=argn(0);endfunction;jit("x=123;y=456;t=foo(x,y)")
-
         std::wcerr << L"Analysis: " << *static_cast<Chrono *>(this) << std::endl;
         //std::wcout << temp << std::endl;
 
@@ -173,17 +209,9 @@ public:
 
         for (typename T::const_iterator i = args.begin(), end = args.end(); i != end; ++i)
         {
-            if ((*i)->getDecorator().res.hasBeenVisited())
-            {
-                resargs.push_back((*i)->getDecorator().res);
-                vargs.push_back((*i)->getDecorator().res.getType());
-            }
-            else
-            {
-                (*i)->accept(*this);
-                resargs.push_back(getResult());
-                vargs.push_back(getResult().getType());
-            }
+            (*i)->accept(*this);
+            resargs.push_back(getResult());
+            vargs.push_back(getResult().getType());
         }
 
         const symbol::Symbol & sym = static_cast<ast::SimpleVar &>(e.getName()).getSymbol();
@@ -204,32 +232,10 @@ public:
             if (lhs == 1)
             {
                 e.getDecorator().res = Result(out[0], tempId);
-                e.getDecorator().setCall(Call(calltype, name, vargs));
+                e.getDecorator().setCall(name, vargs);
                 setResult(e.getDecorator().res);
             }
         }
-
-
-        /*TIType out = Checkers::check(name, vargs);
-          int tempId = -1;
-
-          if (true || (!out.isscalar() && args.size() == 1 && Checkers::isElementWise(name)))
-          {
-          Result & LR = resargs[0];
-          TIType & LT = vargs[0];
-          if (false && LR.istemp() && LT == out)
-          {
-          tempId = LR.getTempId();
-          }
-          else
-          {
-          tempId = temp.add(out);
-          }
-          }
-
-          e.getDecorator().res = Result(out, tempId);
-          e.getDecorator().setCall(Call(calltype, name, vargs));
-          setResult(e.getDecorator().res);*/
     }
 
     inline Info & getSymInfo(const symbol::Symbol & sym)
@@ -237,8 +243,17 @@ public:
         return dm.getInfo(sym);
     }
 
+    inline logging::Logger & getLogger()
+    {
+        return logger;
+    }
+
+    bool analyzeIndices(TIType & type, ast::CallExp & ce);
+
 private:
 
+    bool getDimension(SymbolicDimension & dim, ast::Exp & arg, bool & safe, SymbolicDimension & out);
+
     inline void pushCall(Call * c)
     {
         if (c)
@@ -247,27 +262,54 @@ private:
         }
     }
 
+    bool operGVNValues(ast::OpExp & oe);
+    bool operSymbolicRange(ast::OpExp & oe);
+
+    void visit(ast::SelectExp & e);
+    void visit(ast::ListExp & e);
+    void visit(ast::MatrixExp & e);
+    void visit(ast::OpExp & e);
+    void visit(ast::NotExp & e);
+    void visit(ast::TransposeExp & e);
+    void visit(ast::AssignExp & e);
+    void visit(ast::IfExp & e);
+
+    void visit(ast::MatrixLineExp & e)
+    {
+        /* treated in MatrixExp */
+    }
+    void visit(ast::OptimizedExp & e) { }
+    void visit(ast::MemfillExp & e) { }
+    void visit(ast::DAXPYExp & e) { }
+    void visit(ast::IntSelectExp & e) { }
+    void visit(ast::StringSelectExp & e) { }
+    void visit(ast::CommentExp & e) { }
+    void visit(ast::NilExp & e) { }
+    void visit(ast::ColonVar & e) { }
+
     void visit(ast::SimpleVar & e)
     {
+        logger.log(L"SimpleVar", e.getSymbol().getName(), e.getLocation());
         symbol::Symbol & sym = e.getSymbol();
         Info & info = dm.read(sym, &e);
         Result & res = e.getDecorator().setResult(info.type);
         res.setConstant(info.getConstant());
+        res.setRange(info.getRange());
+       res.setMaxIndex(info.getMaxIndex());
         setResult(res);
     }
 
     void visit(ast::DollarVar & e)
     {
-        // nothing to do
-    }
-
-    void visit(ast::ColonVar & e)
-    {
-        // nothing to do
+        logger.log(L"DollarVar", e.getLocation());
+        Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::POLYNOMIAL, 1, 1));
+        res.getConstant() = getGVN().getValue(symbol::Symbol(L"$"));
+        setResult(res);
     }
 
     void visit(ast::ArrayListVar & e)
     {
+        logger.log(L"ArrayListVar", e.getLocation());
         const ast::exps_t & vars = e.getVars();
         for (auto var : vars)
         {
@@ -277,307 +319,128 @@ private:
 
     void visit(ast::DoubleExp & e)
     {
-        Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::DOUBLE));
-        res.getConstant().set(e.getValue());
+        logger.log(L"DoubleExp", e.getLocation());
+        if (!e.getConstant())
+        {
+            e.accept(cv.getExec());
+            cv.getExec().setResult(nullptr);
+        }
+        types::Double * pDbl = static_cast<types::Double *>(e.getConstant());
+        Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::DOUBLE, pDbl->getRows(), pDbl->getCols()));
+        res.getConstant() = e.getConstant();
         setResult(res);
     }
 
     void visit(ast::BoolExp & e)
     {
-        Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::BOOLEAN));
-        res.getConstant().set(e.getValue());
+        logger.log(L"BoolExp", e.getLocation());
+        if (!e.getConstant())
+        {
+            e.accept(cv.getExec());
+            cv.getExec().setResult(nullptr);
+        }
+        types::Bool * pBool = static_cast<types::Bool *>(e.getConstant());
+        Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::BOOLEAN, pBool->getRows(), pBool->getCols()));
+        res.getConstant() = e.getConstant();
         setResult(res);
     }
 
     void visit(ast::StringExp & e)
     {
-        Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::STRING));
-        res.getConstant().set(&e.getValue());
+        logger.log(L"StringExp", e.getLocation());
+        if (!e.getConstant())
+        {
+            e.accept(cv.getExec());
+            cv.getExec().setResult(nullptr);
+        }
+        types::String * pStr = static_cast<types::String *>(e.getConstant());
+        Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::STRING, pStr->getRows(), pStr->getCols()));
+        res.getConstant() = e.getConstant();
         setResult(res);
     }
 
-    void visit(ast::CommentExp & e)
-    {
-        // ignored
-    }
-
-    void visit(ast::NilExp & e)
-    {
-        // nothing to do
-    }
-
     void visit(ast::CallExp & e, const unsigned int lhs)
     {
+        // TODO: e.getName() is not always a simple var: foo(a)(b)
         if (e.getName().isSimpleVar())
         {
             ast::SimpleVar & var = static_cast<ast::SimpleVar &>(e.getName());
             symbol::Symbol & sym = var.getSymbol();
             const std::wstring & name = sym.getName();
             Info & info = getSymInfo(sym); // that put the sym in the current block !
+           Result & res = e.getName().getDecorator().setResult(info.type);
+           res.setConstant(info.getConstant());
+           res.setRange(info.getRange());
+           res.setMaxIndex(info.getMaxIndex());
 
-            // Special analysis cases: size, zeros, ones, ...
-            MapSymCall::iterator it = symscall.find(sym.getName());
-            if (it != symscall.end() && it->second.get()->analyze(*this, lhs, e))
-            {
-                pushCall(e.getDecorator().getCall());
-                return;
-            }
+            logger.log(L"CallExp", e.getLocation(), name);
 
-            visitArguments(name, lhs, info.type, e, e.getArgs());
-            pushCall(e.getDecorator().getCall());
-        }
-    }
-
-    void visit(ast::CallExp & e)
-    {
-        visit(e, 1);
-    }
-
-    void visit(ast::CellCallExp & e)
-    {
-        visit(static_cast<ast::CallExp &>(e));
-    }
-
-    void visit(ast::OpExp & e)
-    {
-        e.getLeft().accept(*this);
-        Result LR = getResult();
-        e.getRight().accept(*this);
-        Result & RR = getResult();
-        TIType & LT = LR.getType();
-        TIType & RT = RR.getType();
-        TIType resT;
-        int tempId = -1;
-
-        switch (e.getOper())
-        {
-            case ast::OpExp::plus :
-            case ast::OpExp::minus :
-            case ast::OpExp::dottimes :
+            if (info.type.type == TIType::MACRO || info.type.type == TIType::MACROFILE || info.type.type == TIType::FUNCTION)
             {
-                // TODO: check if the rules for addition and subtraction are the same
-                // If a temp is LHS or RHS we could use it again to avoid a malloc
-                // TODO: It should be ok for element-wise operations (check this assumption)
-                resT = check_add(dm.getGVN(), LT, RT);
-                if (resT.isUnknownDims())
-                {
-                    const bool ret = getCM().check(ConstraintManager::SAMEDIMS, LT.rows.getValue(), LT.cols.getValue(), RT.rows.getValue(), RT.cols.getValue());
-                    if (ret)
-                    {
-                        resT = check_add(dm.getGVN(), LT, RT);
-                    }
-                    else
-                    {
-                        resT = check_add(dm.getGVN(), LT.asUnknownMatrix(), RT.asUnknownMatrix());
-                    }
-                }
-                if (!resT.isscalar())
+                if (name == L"error")
                 {
-                    if (LR.istemp() && LT == resT)
-                    {
-                        tempId = LR.getTempId();
-                        temp.remove(RT, RR.getTempId());
-                    }
-                    else if (RR.istemp() && RT == resT)
-                    {
-                        tempId = RR.getTempId();
-                        temp.remove(LT, LR.getTempId());
-                    }
-                    else
-                    {
-                        tempId = temp.add(resT);
-                    }
+                    getDM().getCurrent()->setReturn(true);
                 }
-                break;
-            }
-            case ast::OpExp::times :
-            {
-                resT = check_times(dm.getGVN(), LT, RT);
-                if (resT.isUnknownDims())
+
+                // Special analysis cases: size, zeros, ones, ...
+                MapSymCall::iterator it = symscall.find(sym.getName());
+                if (it != symscall.end())
                 {
-                    const bool ret = getCM().check(ConstraintManager::EQUAL, LT.cols.getValue(), RT.rows.getValue());
-                    if (ret)
+                    if (getCM().checkGlobalConstant(sym) && it->second.get()->analyze(*this, lhs, e))
                     {
-                        resT = check_times(dm.getGVN(), LT, RT);
+                        pushCall(e.getDecorator().getCall());
+                        return;
                     }
-                    else
-                    {
-                        resT = check_times(dm.getGVN(), LT.asUnknownMatrix(), RT.asUnknownMatrix());
-                    }
-                }
-                temp.remove(LT, LR.getTempId());
-                temp.remove(RT, RR.getTempId());
-                if (resT.isknown() && !resT.isscalar())
-                {
-                    tempId = temp.add(resT);
-                }
-                break;
-            }
-            case ast::OpExp::rdivide :
-            {
-                // multiplication is not commutative for matrice pxq
-                resT = check_times(dm.getGVN(), LT, RT);
-                temp.remove(LT, LR.getTempId());
-                temp.remove(RT, RR.getTempId());
-                if (resT.isknown() && !resT.isscalar())
-                {
-                    tempId = temp.add(resT);
                 }
-                break;
+
+                visitArguments(name, lhs, info.type, e, e.getArgs());
+                pushCall(e.getDecorator().getCall());
             }
-            case ast::OpExp::krontimes :
+            else
             {
-                resT = check_krontimes(dm.getGVN(), LT, RT);
-                temp.remove(LT, LR.getTempId());
-                temp.remove(RT, RR.getTempId());
-                if (resT.isknown() && !resT.isscalar())
-                {
-                    tempId = temp.add(resT);
-                }
-                break;
+                analyzeIndices(info.type, e);
             }
         }
-
-        e.getDecorator().res = Result(resT, tempId);
-        setResult(e.getDecorator().res);
     }
 
-    void visit(ast::LogicalOpExp & e)
+    void visit(ast::CallExp & e)
     {
-        e.getLeft().accept(*this);
-        e.getRight().accept(*this);
+        visit(e, 1);
     }
 
-    void visit(ast::AssignExp & e)
+    void visit(ast::CellCallExp & 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);
-          Result & RR = getResult();
-          // Don't remove tmp... temp.remove(RR);
-          var.getDecorator().res = RR;
-
-          set_sym_use(sym, SymInfo::REPLACE);
-          set_sym_type(sym, getResult().get_type());
-          }
-          elseg
-          {
-          // TODO: handle this case
-          }*/
-
-        if (e.getLeftExp().isSimpleVar())
-        {
-            ast::SimpleVar & var = static_cast<ast::SimpleVar &>(e.getLeftExp());
-            symbol::Symbol & sym = var.getSymbol();
-
-            if (e.getRightExp().isSimpleVar())
-            {
-                // We have a=b (so the data associated to b is shared with a)
-                symbol::Symbol & symR = static_cast<ast::SimpleVar &>(e.getRightExp()).getSymbol();
-                dm.share(sym, symR, getSymInfo(symR).getType(), &e);
-            }
-            else
-            {
-                // We have something like a=expression
-                if (e.getRightExp().isCallExp())
-                {
-                    visit(static_cast<ast::CallExp &>(e.getRightExp()), /* LHS */ 1);
-                }
-                else
-                {
-                    e.getRightExp().accept(*this);
-                }
-                Result & RR = getResult();
-                // Don't remove tmp... temp.remove(RR);
-                var.getDecorator().res = RR;
-                Info & info = dm.define(sym, RR.getType(), &e);
-                double value;
-                if (asDouble(e.getRightExp(), value) || RR.getConstant().getDblValue(value))
-                {
-                    info.getConstant().set(value);
-                }
-                if (GVN::Value * gvnValue = RR.getConstant().getGVNValue())
-                {
-                    info.getConstant().set(gvnValue);
-                }
-            }
-        }
-        else if (e.getLeftExp().isCallExp())
-        {
-            // We have something like a(12)=...
-            ast::CallExp & ce = static_cast<ast::CallExp &>(e.getLeftExp());
-            if (ce.getName().isSimpleVar())
-            {
-                symbol::Symbol & symL = static_cast<ast::SimpleVar &>(ce.getName()).getSymbol();
-                e.getRightExp().accept(*this);
-                Result & RR = getResult();
-                ce.getDecorator().res = RR;
-                dm.write(symL, RR.getType(), &e);
-            }
-        }
-        else if (e.getLeftExp().isAssignListExp())
-        {
-            ast::AssignListExp & ale = static_cast<ast::AssignListExp &>(e.getLeftExp());
-            if (e.getRightExp().isCallExp())
-            {
-                const ast::exps_t & exps = ale.getExps();
-                visit(static_cast<ast::CallExp &>(e.getRightExp()), /* LHS */ static_cast<unsigned int>(exps.size()));
-                std::vector<Result>::iterator j = multipleLHS.begin();
-                for (const auto exp : exps)
-                {
-                    // TODO: handle fields...
-                    if (exp->isSimpleVar() && j != multipleLHS.end())
-                    {
-                        ast::SimpleVar & var = *static_cast<ast::SimpleVar *>(exp);
-                        symbol::Symbol & sym = var.getSymbol();
-                        Info & info = dm.define(sym, j->getType(), exp);
-                        info.setConstant(j->getConstant());
-                        ++j;
-                    }
-                }
-            }
-        }
+        logger.log(L"CellCallExp", e.getLocation());
+        visit(static_cast<ast::CallExp &>(e));
     }
 
-    void visit(ast::IfExp & e)
+    void visit(ast::LogicalOpExp & e)
     {
-        dm.addBlock(Block::EXCLUSIVE, &e);
-        // TODO: analyze the test, e.g. a=argn(2); if a==1....
-        // When we analyze a macro call, argn(2) is known so we are able to take the good branch and skip the analysis
-        // the others.
-        // There is a lot of code with: rhs=argn(2) or if argn(2)==1 ... then...
-        e.getTest().accept(*this);
-        dm.addBlock(Block::NORMAL, &e.getThen());
-        e.getThen().accept(*this);
-        dm.finalizeBlock();
-        dm.addBlock(Block::NORMAL, e.hasElse() ? &e.getElse() : nullptr);
-        if (e.hasElse())
-        {
-            e.getElse().accept(*this);
-        }
-        dm.finalizeBlock();
-        dm.finalizeBlock();
+        logger.log(L"LogicalOpExp", e.getLocation());
+        visit(static_cast<ast::OpExp &>(e));
     }
 
     void visit(ast::WhileExp & e)
     {
+        logger.log(L"WhileExp", e.getLocation());
         e.getTest().accept(*this);
         e.getBody().accept(*this);
     }
 
     void visit(ast::ForExp & e)
     {
+        // TODO: pb de propagation de constante ds le corps du loop
+        // b = 0; for....; b=b+..; end => le 2nd "b" est replaced by 0
+
+        logger.log(L"ForExp", e.getLocation());
         dm.addBlock(Block::LOOP, &e);
         e.getVardec().accept(*this);
         dm.addBlock(Block::NORMAL, &e.getBody());
         e.getBody().accept(*this);
 
-        if (dm.requiresAnotherTrip())
+        if (false && dm.requiresAnotherTrip())
         {
-            std::cerr << "Invalid forexp: types or refcount are not the same before and after the loop" << std::endl;
+            std::wcerr << "Invalid forexp: types or refcount are not the same before and after the loop" << std::endl;
 
             dm.finalizeBlock();
             dm.addBlock(Block::NORMAL, &e.getBody());
@@ -590,85 +453,57 @@ private:
 
     void visit(ast::BreakExp & e)
     {
+        logger.log(L"BreakExp", e.getLocation());
         // nothing to do
     }
 
     void visit(ast::ContinueExp & e)
     {
+        logger.log(L"ContinueExp", e.getLocation());
         // nothing to do
     }
 
     void visit(ast::TryCatchExp & e)
     {
+        logger.log(L"TryCatchExp", e.getLocation());
         e.getTry().accept(*this);
         e.getCatch().accept(*this);
     }
 
-    void visit(ast::SelectExp & e)
-    {
-        dm.addBlock(Block::EXCLUSIVE, &e);
-        e.getSelect()->accept(*this);
-        ast::exps_t cases = e.getCases();
-        for (auto exp : cases)
-        {
-            dm.addBlock(Block::NORMAL, exp);
-            exp->accept(*this);
-            dm.finalizeBlock();
-        }
-
-        if (e.getDefaultCase())
-        {
-            dm.addBlock(Block::NORMAL, e.getDefaultCase());
-            e.getDefaultCase()->accept(*this);
-            dm.finalizeBlock();
-        }
-        dm.finalizeBlock();
-    }
-
     void visit(ast::CaseExp & e)
     {
+        logger.log(L"CaseExp", e.getLocation());
         e.getTest()->accept(*this);
         e.getBody()->accept(*this);
     }
 
     void visit(ast::ReturnExp & e)
     {
+        logger.log(L"ReturnExp", e.getLocation());
+        getDM().getCurrent()->setReturn(true);
         // Bug with return;
         //e.exp_get().accept(*this);
+
     }
 
     void visit(ast::FieldExp & e)
     {
+        logger.log(L"FieldExp", e.getLocation());
         // 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.getExp().accept(*this);
-    }
-
-    void visit(ast::TransposeExp & e)
-    {
-        e.getExp().accept(*this);
-        Result & res = getResult();
-        const TIType & type = res.getType();
-        e.getDecorator().res = Result(TIType(dm.getGVN(), type.type, type.cols, type.rows));
-        setResult(e.getDecorator().res);
-    }
-
-    void visit(ast::MatrixExp & e);
-    void visit(ast::MatrixLineExp & e) { }
-
     void visit(ast::CellExp & e)
     {
+        logger.log(L"CellExp", e.getLocation());
         visit(static_cast<ast::MatrixExp &>(e));
     }
 
     void visit(ast::SeqExp & e)
     {
+        logger.log(L"SeqExp", e.getLocation());
         for (const auto exp : e.getExps())
         {
             if (exp->isCallExp())
@@ -680,10 +515,15 @@ private:
                 exp->accept(*this);
             }
         }
+       if (!e.getParent())
+       {
+           //e.accept(dv);
+       }
     }
 
     void visit(ast::ArrayListExp & e)
     {
+        logger.log(L"ArrayListExp", e.getLocation());
         const ast::exps_t & exps = e.getExps();
         for (const auto exp : e.getExps())
         {
@@ -693,12 +533,14 @@ private:
 
     void visit(ast::AssignListExp & e)
     {
+        logger.log(L"AssignListExp", e.getLocation());
         visit(static_cast<ast::ArrayListExp &>(e));
     }
 
     void visit(ast::VarDec & e)
     {
         // VarDec is only used in For loop for iterator declaration
+        logger.log(L"VarDec", e.getLocation());
         const symbol::Symbol & sym = e.getSymbol();
         if (e.getInit().isListExp())
         {
@@ -715,6 +557,9 @@ private:
             {
                 e.setListInfo(ForList64());
                 le.accept(*this);
+                Result & res = getResult();
+                Info & info = dm.define(sym, res.getType(), &e);
+                info.setRange(res.getRange());
             }
         }
     }
@@ -724,18 +569,9 @@ private:
         /*e.args_get().accept(*this);
           e.returns_get().accept(*this);
           e.body_get().accept(*this);*/
+        logger.log(L"FunctionDec", e.getLocation());
         dm.macrodef(&e);
     }
-
-    void visit(ast::ListExp & e);
-
-    void visit(ast::OptimizedExp & e)
-    {
-    }
-
-    void visit(ast::DAXPYExp & e)
-    {
-    }
 };
 
 } // namespace analysis
index 95dd047..a98637e 100644 (file)
 
 namespace analysis
 {
-class Call
-{
-
-public:
-
-    enum Kind {UNDEFINED, IDENTITY, HYPOT, DOTHYPOT, __COUNT__};
-
-private:
-
-    Kind kind;
-    TIType type;
-    std::wstring name;
-    std::vector<TIType> args;
-
-public:
-
-    Call(Kind _kind, const TIType & _type, const std::wstring & _name, const std::vector<TIType> & _args) : kind(_kind),
-        type(_type),
-        name(_name),
-        args(_args) { }
-
-    Call(const TIType & _type, const std::wstring & _name, const std::vector<TIType> & _args) : Call(UNDEFINED, _type, _name, _args) { }
-    Call(Kind _kind, const TIType & _type, const std::wstring & _name) : kind(_kind),
-        type(_type),
-        name(_name) { }
-    Call(const TIType & _type, const std::wstring & _name) : Call(UNDEFINED, _type, _name) { }
-
-    Call(const std::wstring & _name) : kind(UNDEFINED), type(), name(_name) { }
-    Call(Call && call) : kind(call.kind), type(call.type), name(call.name), args(call.args) { }
-
-    inline void setName(const std::wstring & _name)
+    class Call
     {
-        name = _name;
-    }
 
-    inline const std::wstring & getName() const
-    {
-        return name;
-    }
+    private:
 
-    inline const TIType & getType() const
-    {
-        return type;
-    }
+        const std::wstring name;
+        std::vector<TIType> args;
 
-    inline void setKind(Kind _kind)
-    {
-        kind = _kind;
-    }
+    public:
 
-    inline Kind getKind() const
-    {
-        return kind;
-    }
+        Call(const std::wstring & _name, const std::vector<TIType> & _args) : name(_name), args(_args) { }
+       Call(const std::wstring & _name, const TIType & _arg) : name(_name), args(1, _arg) { }
+        Call(const std::wstring & _name) : name(_name) { }
+        Call(Call && call) : name(call.name), args(call.args) { }
 
-    inline void setArgs(const std::vector<TIType> & _args)
-    {
-        args = _args;
-    }
+        inline const std::wstring & getName() const
+            {
+                return name;
+            }
 
-    inline std::vector<TIType> & getArgs()
-    {
-        return args;
-    }
+        inline void setArgs(const std::vector<TIType> & _args)
+            {
+                args = _args;
+            }
 
-    friend std::wostream & operator<<(std::wostream & out, const Call & res)
-    {
-        out << L"Call " << res.name << L"{" << res.type << L"}, Identity:" << (res.kind == IDENTITY ? L"T" : L"F");
-        return out;
-    }
-};
+        inline const std::vector<TIType> & getArgs() const
+            {
+                return args;
+            }
+
+        friend std::wostream & operator<<(std::wostream & out, const Call & res)
+            {
+                out << L"Call " << res.name;
+                return out;
+            }
+    };
 
 } // namespace analysis
 
index 0a76e61..59c24a2 100644 (file)
 
 #include "gvn/GVN.hxx"
 
+namespace types
+{
+class InternalType;
+}
+
 namespace analysis
 {
-class ConstantValue
+class EXTERN_AST ConstantValue
 {
 
 public:
 
-    enum Kind : unsigned char { DOUBLE, GVNVAL, STRING, BOOLEAN, COMPLEX, UNKNOWN };
+    enum Kind : unsigned char { GVNVAL, ITVAL, UNKNOWN };
 
 private:
+
     union Value
     {
-        double dbl;
         GVN::Value * gvnVal;
-        const std::wstring * str = NULL;
-        bool boolean;
-        //std::complex<double> cplx;
+        types::InternalType * pIT;
 
         Value() { }
-        Value(const double val) : dbl(val) { }
         Value(GVN::Value * val) : gvnVal(val) { }
-        Value(const std::wstring * val) : str(val) { }
-        Value(const bool val) : boolean(val) { }
-        //Value(const std::complex<double> & val) : cplx(val) { }
+        Value(types::InternalType * val) : pIT(val) { }
     };
 
     Value val;
@@ -52,11 +52,20 @@ private:
 public:
 
     ConstantValue() : kind(UNKNOWN) { }
-    ConstantValue(double _val) : val(_val), kind(DOUBLE) { }
     ConstantValue(GVN::Value * _val) : val(_val), kind(GVNVAL) { }
-    ConstantValue(const std::wstring * _val) : val(_val), kind(STRING) { }
-    ConstantValue(bool _val) : val(_val), kind(BOOLEAN) { }
-    //ConstantValue(const std::complex<double> & _val) : val(_val), kind(COMPLEX) { }
+    ConstantValue(types::InternalType * _val);
+    ConstantValue(const ConstantValue & cv);
+    ConstantValue(ConstantValue && cv) : val(cv.val), kind(cv.kind)
+    {
+        cv.kind = UNKNOWN;
+    }
+
+    ConstantValue & operator=(const ConstantValue & R);
+    ConstantValue & operator=(types::InternalType * const pIT);
+    ConstantValue & operator=(GVN::Value * const _val);
+    ConstantValue & operator=(ConstantValue && R);
+
+    ~ConstantValue();
 
     inline Kind getKind() const
     {
@@ -68,30 +77,19 @@ public:
         return kind != UNKNOWN;
     }
 
-    inline bool getDblValue(double & _val) const
+    inline types::InternalType * getIT() const
     {
-        if (kind == DOUBLE)
-        {
-            _val = val.dbl;
-            return true;
-        }
-        else if (kind == GVNVAL)
+        if (kind == ITVAL)
         {
-            if (GVN::Value * gvnValue = val.gvnVal)
-            {
-                if (gvnValue->poly->isConstant())
-                {
-                    _val = gvnValue->poly->constant;
-                    return true;
-                }
-            }
+            return val.pIT;
         }
-        return false;
+
+        return nullptr;
     }
 
     inline GVN::Value * getGVNValue() const
     {
-        if (kind == ConstantValue::GVNVAL)
+        if (kind == GVNVAL)
         {
             return val.gvnVal;
         }
@@ -99,135 +97,27 @@ public:
         return nullptr;
     }
 
-    template<typename T> inline void set(T _val);
+    bool getGVNValue(GVN & gvn, GVN::Value *& _val) const;
+    bool getDblValue(double & _val) const;
+    bool getBoolValue(bool & _val) const;
+    bool getCplxValue(std::complex<double> & _val) const;
+    bool getStrValue(std::wstring & val) const;
+
     template<typename T> inline T get() const;
 
     void merge(const ConstantValue & cv);
 
-    friend std::wostream & operator<<(std::wostream & out, const ConstantValue & cv)
-    {
-        switch (cv.kind)
-        {
-            case ConstantValue::DOUBLE:
-                out << cv.val.dbl;
-                break;
-            case ConstantValue::GVNVAL:
-                out << *cv.val.gvnVal;
-                break;
-            case ConstantValue::STRING:
-                out << L"\"" << *cv.val.str << L"\"";
-                break;
-            case ConstantValue::BOOLEAN:
-                out << (cv.val.boolean ? L"T" : L"F");
-                break;
-            //case ConstantValue::COMPLEX:
-            //    out << cv.val.cplx.real() << L"+i*" << cv.val.cplx.imag();
-            //    break;
-            default:
-                break;
-        }
-
-        return out;
-    }
-
-private:
-
-    template<typename T, bool Ptr>
-    struct __merge
-    {
-        inline void operator()(ConstantValue & cv1, const ConstantValue & cv2);
-    };
-
-    template<typename T>
-    struct __merge<T, true>
-    {
-        inline void operator()(ConstantValue & cv1, const ConstantValue & cv2)
-        {
-            T t1 = cv1.get<T>();
-            T t2 = cv2.get<T>();
-            if (t1 != t2 && *t1 != *t2)
-            {
-                cv1.kind = UNKNOWN;
-            }
-        }
-    };
-
-    template<typename T>
-    struct __merge<T, false>
-    {
-        inline void operator()(ConstantValue & cv1, const ConstantValue & cv2)
-        {
-            if (cv1.get<T>() != cv2.get<T>())
-            {
-                cv1.kind = UNKNOWN;
-            }
-        }
-    };
-
-    template<typename T>
-    inline void merge(const ConstantValue & cv)
-    {
-        __merge<T, std::is_pointer<T>::value>()(*this, cv);
-    }
-
+    friend std::wostream & operator<<(std::wostream & out, const ConstantValue & cv);
 };
 
-template<> inline void ConstantValue::set<>(int _val)
-{
-    val = (double)_val;
-    kind = DOUBLE;
-}
-template<> inline void ConstantValue::set<>(unsigned int _val)
-{
-    val = (double)_val;
-    kind = DOUBLE;
-}
-template<> inline void ConstantValue::set<>(double _val)
-{
-    val = _val;
-    kind = DOUBLE;
-}
-template<> inline void ConstantValue::set<>(GVN::Value * _val)
-{
-    val = _val;
-    kind = GVNVAL;
-}
-template<> inline void ConstantValue::set<>(const std::wstring * _val)
-{
-    val = _val;
-    kind = STRING;
-}
-template<> inline void ConstantValue::set<>(bool _val)
-{
-    val = _val;
-    kind = BOOLEAN;
-}
-//template<> inline void ConstantValue::set<>(std::complex<double> && _val)
-//{
-//    val = _val;
-//    kind = COMPLEX;
-//}
-
-template<> inline double ConstantValue::get<>() const
-{
-    return val.dbl;
-}
 template<> inline GVN::Value * ConstantValue::get<>() const
 {
     return val.gvnVal;
 }
-template<> inline const std::wstring * ConstantValue::get<>() const
-{
-    return val.str;
-}
-template<> inline bool ConstantValue::get<>() const
+template<> inline types::InternalType * ConstantValue::get<>() const
 {
-    return val.boolean;
+    return val.pIT;
 }
-//template<> inline const std::complex<double> & ConstantValue::get<>() const
-//{
-//    return val.cplx;
-//}
 
 } // namespace analysis
 
index e69de29..ab7b4f9 100644 (file)
@@ -0,0 +1,278 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __CONSTANT_VISITOR_HXX__
+#define __CONSTANT_VISITOR_HXX__
+
+#include <iostream>
+#include <string>
+#include <unordered_set>
+
+#include "visitor.hxx"
+#include "execvisitor.hxx"
+#include "allexp.hxx"
+#include "allvar.hxx"
+#include "Chrono.hxx"
+
+namespace analysis
+{
+
+class AnalysisVisitor;
+
+class ConstantVisitor : public ast::Visitor, public Chrono
+{
+
+    bool _result;
+
+    AnalysisVisitor * parent;
+    ast::ExecVisitor exec;
+    unsigned int lhs;
+    const bool evalSymbols;
+
+    static std::unordered_set<std::wstring> constants;
+
+public:
+
+    ConstantVisitor(AnalysisVisitor & _parent) : parent(&_parent), lhs(1), evalSymbols(true)
+    {
+        start_chrono();
+    }
+
+    ConstantVisitor(const bool _evalSymbols = true) : parent(nullptr), evalSymbols(_evalSymbols)
+    {
+        start_chrono();
+    }
+
+    virtual ~ConstantVisitor()
+    {
+    }
+
+    inline void print_info()
+    {
+        stop_chrono();
+    }
+
+    inline ast::ExecVisitor & getExec()
+    {
+        return exec;
+    }
+
+    inline void setLHS(const unsigned int _lhs)
+    {
+        lhs = _lhs;
+    }
+
+private:
+
+    inline static std::unordered_set<std::wstring> init()
+    {
+        std::unordered_set<std::wstring> _constants;
+        _constants.emplace(L"%pi");
+        _constants.emplace(L"%eps");
+        _constants.emplace(L"%e");
+        _constants.emplace(L"%i");
+        _constants.emplace(L"%nan");
+        _constants.emplace(L"%inf");
+        _constants.emplace(L"%t");
+        _constants.emplace(L"%f");
+        _constants.emplace(L"%T");
+        _constants.emplace(L"%F");
+        _constants.emplace(L"SCI");
+        _constants.emplace(L"WSCI");
+        _constants.emplace(L"SCIHOME");
+        _constants.emplace(L"TMPDIR");
+
+        return _constants;
+    }
+
+    inline void setResult(const bool val)
+    {
+        _result = val;
+    }
+
+public:
+
+    inline bool getResult()
+    {
+        return _result;
+    }
+
+    void visit(ast::SimpleVar & e);
+    void visit(ast::NotExp & e);
+    void visit(ast::TransposeExp & e);
+    void visit(ast::MatrixExp & e);
+    void visit(ast::CellExp & e);
+    void visit(ast::CallExp & e);
+    void visit(ast::OpExp & e);
+    void visit(ast::LogicalOpExp & e);
+    void visit(ast::ListExp & e);
+
+    void visit(ast::IfExp & e)
+    {
+    }
+
+    void visit(ast::DollarVar & e)
+    {
+        setResult(false);
+    }
+
+    void visit(ast::ColonVar & e)
+    {
+        setResult(false);
+    }
+
+    void visit(ast::ArrayListVar & e)
+    {
+    }
+
+    void visit(ast::DoubleExp & e)
+    {
+        setResult(true);
+    }
+
+    void visit(ast::BoolExp & e)
+    {
+        setResult(true);
+    }
+
+    void visit(ast::StringExp & e)
+    {
+        setResult(true);
+    }
+
+    void visit(ast::CommentExp & e)
+    {
+        // ignored
+    }
+
+    void visit(ast::NilExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::CellCallExp & e)
+    {
+        setResult(false);
+    }
+
+    void visit(ast::AssignExp & e)
+    {
+    }
+
+    void visit(ast::WhileExp & e)
+    {
+    }
+
+    void visit(ast::ForExp & e)
+    {
+    }
+
+    void visit(ast::BreakExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::ContinueExp & e)
+    {
+        // nothing to do
+    }
+
+    void visit(ast::TryCatchExp & e)
+    {
+    }
+
+    void visit(ast::SelectExp & e)
+    {
+    }
+
+    void visit(ast::CaseExp & e)
+    {
+    }
+
+    void visit(ast::ReturnExp & e)
+    {
+    }
+
+    void visit(ast::FieldExp & e)
+    {
+    }
+
+    void visit(ast::MatrixLineExp & e)
+    {
+    }
+
+    void visit(ast::SeqExp & e)
+    {
+    }
+
+    void visit(ast::ArrayListExp & e)
+    {
+    }
+
+    void visit(ast::AssignListExp & e)
+    {
+    }
+
+    void visit(ast::VarDec & e)
+    {
+    }
+
+    void visit(ast::FunctionDec & e)
+    {
+    }
+
+    void visit(ast::OptimizedExp & e)
+    {
+    }
+
+    void visit(ast::MemfillExp & e)
+    {
+    }
+
+    void visit(ast::DAXPYExp & e)
+    {
+    }
+
+    void visit(ast::IntSelectExp & e)
+    {
+    }
+
+    void visit(ast::StringSelectExp & e)
+    {
+    }
+
+private:
+
+    inline bool execAndReplace(ast::Exp & e)
+    {
+        try
+        {
+            e.accept(exec);
+            types::InternalType * pIT = exec.getResult();
+            exec.setResult(nullptr);
+            ast::Exp * exp = pIT->getExp(e.getLocation());
+            if (exp)
+            {
+                exp->setVerbose(e.isVerbose());
+                e.replace(exp);
+                return true;
+            }
+        }
+        catch (const ast::ScilabException & /*se*/) { }
+
+        return false;
+    }
+};
+
+} // namespace analysis
+
+#endif // __CONSTANT_VISITOR_HXX__
index e30f293..ef6944c 100644 (file)
@@ -28,8 +28,10 @@ struct Decorator
     bool cloneData;
     bool deleteData;
     bool hasRefCount;
+    bool safeIndex;
+    bool safeInsertion;
 
-    Decorator() : res(), call(nullptr), cloneData(false), deleteData(false), hasRefCount(false) { }
+    Decorator() : res(), call(nullptr), cloneData(false), deleteData(false), hasRefCount(false), safeIndex(false), safeInsertion(false) { }
 
     ~Decorator()
     {
@@ -41,17 +43,32 @@ struct Decorator
         return call;
     }
 
-    inline Call & setCall(Call && call)
+    inline Call & setCall(Call * _call)
     {
-        delete this->call;
-        this->call = new Call(std::move(call));
-        return *this->call;
+       delete call;
+        call = _call;
+        return *call;
     }
 
-    inline Call & setCall(Call * call)
+    inline Call & setCall(const std::wstring & name)
     {
-        this->call = call;
-        return *this->call;
+       delete call;
+        call = new Call(name);
+        return *call;
+    }
+
+    inline Call & setCall(const std::wstring & name, const std::vector<TIType> & args)
+    {
+       delete call;
+        call = new Call(name, args);
+        return *call;
+    }
+    
+    inline Call & setCall(const std::wstring & name, const TIType & arg)
+    {
+       delete call;
+        call = new Call(name, arg);
+        return *call;
     }
 
     inline Result & setResult(Result && _res)
@@ -60,6 +77,16 @@ struct Decorator
         return res;
     }
 
+    inline const Result & getResult() const
+    {
+        return res;
+    }
+
+    inline Result & getResult()
+    {
+        return res;
+    }
+
     friend std::wostream & operator<<(std::wostream & out, const Decorator & deco)
     {
         out << deco.res;
@@ -69,7 +96,9 @@ struct Decorator
         }
         out << L", Cl:" << (deco.cloneData ? L"T" : L"F")
             << L", Del:" << (deco.deleteData ? L"T" : L"F")
-            << L", RefC:" << (deco.hasRefCount ? L"T" : L"F");
+            << L", RefC:" << (deco.hasRefCount ? L"T" : L"F")
+            << L", SafeIndex:" << (deco.safeIndex ? L"T" : L"F")
+            << L", SafeInsertion:" << (deco.safeInsertion ? L"T" : L"F");
 
         return out;
     }
index d193e36..4dd97d3 100644 (file)
@@ -159,69 +159,70 @@ public:
     }
 
     inline static uint64_t size(const double min, const double max, const double step)
-       {
-           return (uint64_t)std::floor((max - min) / step) + 1;
-       }
+    {
+        return (uint64_t)std::floor((max - min) / step) + 1;
+    }
 
     inline static int checkList(const double min, const double max, const double step, double & out)
-       {
-           if (step == 0)
-           {
-               if (tools::isNaN(min) || tools::isNaN(max))
-               {
-                   out = tools::NaN();
-                   return 1; // one value
-               }
-               else
-               {
-                   return 0; // empty
-               }
-           }
-           else
-           {
-               if (tools::isNaN(min) || tools::isNaN(step) || tools::isNaN(max))
-               {
-                   out = tools::NaN();
-                   return 1; // one value
-               }
-               else
-               {
-                   if (min < max)
-                   {
-                       if (step < 0)
-                       {
-                           return 0; //empty
-                       }
-                   }
-                   else if (step > 0)
-                   {
-                       return 0; // empty
-                   }
-
-                   if (!tools::isFinite(min) || !tools::isFinite(max))
-                   {
-                       out = tools::NaN();
-                       return 1; // one value
-                   }
-                   else
-                   {
-                       return 2; //one or more...
-                   }
-               }
-           }
-       }
+    {
+        if (step == 0)
+        {
+            if (tools::isNaN(min) || tools::isNaN(max))
+            {
+                out = tools::NaN();
+                return 1; // one value
+            }
+            else
+            {
+                return 0; // empty
+            }
+        }
+        else
+        {
+            if (tools::isNaN(min) || tools::isNaN(step) || tools::isNaN(max))
+            {
+                out = tools::NaN();
+                return 1; // one value
+            }
+            else
+            {
+                if (min < max)
+                {
+                    if (step < 0)
+                    {
+                        return 0; //empty
+                    }
+                }
+                else if (step > 0)
+                {
+                    return 0; // empty
+                }
+
+                if (!tools::isFinite(min) || !tools::isFinite(max))
+                {
+                    out = tools::NaN();
+                    return 1; // one value
+                }
+                else
+                {
+                    return 2; //one or more...
+                }
+            }
+        }
+    }
 
 private:
 
     inline bool isempty() const
     {
-       return isempty(min, max, step);
+        return isempty(min, max, step);
     }
 
     template<typename U>
     inline static bool is_int(const double x)
     {
-        return x == tools::trunc(x) && x <= std::numeric_limits<U>::max() && x >= std::numeric_limits<U>::min();
+        const U y = (U)tools::trunc(x);
+        return x == y && y <= std::numeric_limits<U>::max() && y >= std::numeric_limits<U>::min();
     }
 
     template<typename U>
index 1b300d5..4546831 100644 (file)
@@ -16,6 +16,8 @@
 #include <iostream>
 
 #include "gvn/GVN.hxx"
+#include "gvn/SymbolicDimension.hxx"
+#include "gvn/SymbolicRange.hxx"
 #include "TIType.hxx"
 #include "tools.hxx"
 #include "ConstantValue.hxx"
@@ -31,17 +33,18 @@ public:
 
 private:
 
-    bool visited;
     TIType type;
     int tempId;
     FnName fnname;
     ConstantValue constant;
+    SymbolicRange range;
+    SymbolicDimension maxIndex;
 
 public:
 
-    Result() : visited(false), type(), tempId(-1) { }
-    Result(const TIType & _type, const int _tempId = -1) : visited(true), type(_type), tempId(_tempId) { }
-    Result(TIType && _type, const int _tempId = -1) : visited(true), type(_type), tempId(_tempId) { }
+    Result() : type(), tempId(-1) { }
+    Result(const TIType & _type, const int _tempId = -1) : type(_type), tempId(_tempId) { }
+    Result(TIType && _type, const int _tempId = -1) : type(_type), tempId(_tempId) { }
 
     inline bool istemp() const
     {
@@ -50,7 +53,6 @@ public:
 
     inline void setFnName(FnName _fnname)
     {
-        visited = true;
         fnname = _fnname;
     }
 
@@ -90,11 +92,50 @@ public:
         return constant;
     }
 
-    inline bool hasBeenVisited() const
+    inline SymbolicRange & getRange()
     {
-        return visited;
+        return range;
     }
 
+    inline const SymbolicRange & getRange() const
+    {
+        return range;
+    }
+
+    inline SymbolicRange & setRange(SymbolicRange & _range)
+    {
+        range = _range;
+        return range;
+    }
+
+    inline SymbolicRange & setRange(SymbolicRange && _range)
+    {
+        range = _range;
+        return range;
+    }
+
+    inline SymbolicDimension & getMaxIndex()
+       {
+           return maxIndex;
+       }
+    
+    inline const SymbolicDimension & getMaxIndex() const
+       {
+           return maxIndex;
+       }
+
+    inline SymbolicDimension & setMaxIndex(SymbolicDimension & _maxIndex)
+    {
+        maxIndex = _maxIndex;
+        return maxIndex;
+    }
+
+    inline SymbolicDimension & setMaxIndex(SymbolicDimension && _maxIndex)
+    {
+        maxIndex = _maxIndex;
+        return maxIndex;
+    }
+    
     friend std::wostream & operator<<(std::wostream & out, const Result & res)
     {
         out << L"Result {" << res.type << L", temp id:" << res.tempId << L", constant:" << res.constant << L"}";
index a203e19..c8bde34 100644 (file)
@@ -27,32 +27,34 @@ namespace analysis
 {
 struct TIType
 {
-    enum Type { EMPTY = 0, BOOLEAN, COMPLEX, CELL, DOUBLE, DOUBLEUINT, FUNCTION, INT16, INT32, INT64, INT8, LIST, LIBRARY, MACRO, MACROFILE, MLIST, POLYNOMIAL, STRING, SPARSE, STRUCT, TLIST, UINT16, UINT32, UINT64, UINT8, UNKNOWN, COUNT };
+    static const std::wstring _boolean_, _ce_, _constant_, _fptr_, _function_, _int16_, _int32_, _int64_, _int8_, _library_, _list_, _mlist_, _polynomial_, _sparse_, _st_, _string_, _tlist_, _uint16_, _uint32_, _uint64_, _uint8_, _unknown_;
+
+    enum Type { EMPTY = 0, BOOLEAN, COMPLEX, CELL, DOUBLE, FUNCTION, INT16, INT32, INT64, INT8, LIST, LIBRARY, MACRO, MACROFILE, MLIST, POLYNOMIAL, STRING, SPARSE, STRUCT, TLIST, UNKNOWN, UINT16, UINT32, UINT64, UINT8, COUNT };
     Type type;
     SymbolicDimension rows;
     SymbolicDimension cols;
     bool scalar;
 
     TIType(const Type _type = UNKNOWN) : type(_type), scalar(true) { }
-    TIType(GVN & gvn) : type(UNKNOWN), rows(gvn, tools::NaN()), cols(gvn, tools::NaN()), scalar(false) { }
+    TIType(GVN & gvn) : type(UNKNOWN), rows(gvn, 0.), cols(gvn, 0.), scalar(false) { }
     TIType(GVN & gvn, const Type _type) : type(_type), rows(gvn, _type == EMPTY ? 0 : 1), cols(gvn, _type == EMPTY ? 0 : 1), scalar(_type != EMPTY) { }
     TIType(GVN & gvn, const Type _type, const int _rows, const int _cols) : type(_type), rows(gvn, _rows), cols(gvn, _cols), scalar(_rows == 1 && _cols == 1) { }
     TIType(GVN & gvn, Type _type, const SymbolicDimension & _rows, const SymbolicDimension & _cols) : type(_type), rows(_rows), cols(_cols), scalar(_rows == 1 && _cols == 1) { }
-    TIType(GVN & gvn, const Type _type, const bool _scalar, const bool _unknown) : type(_type), rows(gvn, getDimValue(_scalar, _unknown)), cols(gvn, getDimValue(_scalar, _unknown)), scalar(_scalar) { }
+    TIType(GVN & gvn, const Type _type, const bool _scalar) : type(_type), rows(gvn, _scalar ? 1. : -1.), cols(gvn, _scalar ? 1. : -1.), scalar(_scalar) { }
 
-    inline static double getDimValue(const bool scalar, const bool unknown)
+    inline bool hasValidDims() const
     {
-        return scalar ? 1. : (unknown ? tools::NaN() : -1.);
+        return rows != -2 && cols != -2;
     }
 
-    inline TIType asMatrix()
+    inline bool hasInvalidDims() const
     {
-        return TIType(*rows.getGVN(), type, 0, 0);
+        return rows == -2;
     }
 
     inline TIType asUnknownMatrix()
     {
-        return TIType(*rows.getGVN(), type, false, true);
+        return TIType(*rows.getGVN(), type, false);
     }
 
     inline bool isscalar() const
@@ -110,11 +112,23 @@ struct TIType
         return type != UNKNOWN;
     }
 
+    inline bool isunknown() const
+    {
+        return type == UNKNOWN;
+    }
+
     inline bool isConstantDims() const
     {
         return rows.isConstant() && cols.isConstant();
     }
 
+    inline void swapDims()
+    {
+        GVN::Value * r = rows.getValue();
+        rows.setValue(cols.getValue());
+        cols.setValue(r);
+    }
+
     inline std::size_t hashPureType() const
     {
         return isscalar() ? type : (type + TIType::COUNT + 1);
@@ -139,13 +153,27 @@ struct TIType
         else if ((this->type != COMPLEX || type.type != DOUBLE) && this->type != type.type)
         {
             this->type = UNKNOWN;
+            rows.setValue(0.);
+            cols.setValue(0.);
         }
         else if ((!scalar || !type.scalar) && (rows != type.rows || cols != type.cols))
         {
-            rows.invalid();
-            cols.invalid();
+            if (rows != type.rows)
+            {
+                rows.setValue(rows.getGVN()->getValue());
+            }
+            if (cols != type.cols)
+            {
+                cols.setValue(cols.getGVN()->getValue());
+            }
             scalar = false;
         }
+        /*else if ((!scalar || !type.scalar) && (rows != type.rows || cols != type.cols))
+        {
+        rows.invalid();
+        cols.invalid();
+        scalar = false;
+        }*/
     }
 
     template<typename> static Type getTI();
@@ -165,8 +193,6 @@ struct TIType
                 return kd ? (scalar ? "S_ce" : "M_ce") : "U_ce";
             case DOUBLE :
                 return kd ? (scalar ? "S_d" : "M_d") : "U_d";
-            case DOUBLEUINT :
-                return kd ? (scalar ? "S_dui" : "M_dui") : "U_dui";
             case FUNCTION :
                 return kd ? (scalar ? "S_fn" : "M_fn") : "U_fn";
             case INT16 :
@@ -197,6 +223,8 @@ struct TIType
                 return kd ? (scalar ? "S_st" : "M_st") : "U_st";
             case TLIST :
                 return kd ? (scalar ? "S_tl" : "M_tl") : "U_tl";
+            case UNKNOWN :
+                return kd ? (scalar ? "S_u" : "M_u") : "U_u";
             case UINT16 :
                 return kd ? (scalar ? "S_ui16" : "M_ui16") : "U_ui16";
             case UINT32 :
@@ -275,8 +303,6 @@ struct TIType
                 return L"cell";
             case DOUBLE :
                 return L"double";
-            case DOUBLEUINT :
-                return L"doubleuint";
             case FUNCTION :
                 return L"function";
             case INT16 :
@@ -307,6 +333,8 @@ struct TIType
                 return L"struct";
             case TLIST :
                 return L"tlist";
+            case UNKNOWN :
+                return L"unknown";
             case UINT16 :
                 return L"uint16";
             case UINT32 :
@@ -315,11 +343,137 @@ struct TIType
                 return L"uint64";
             case UINT8 :
                 return L"uint8";
-            default:
-                break;
+            default :
+                return L"unknown";
         }
+    }
 
-        return L"unknown";
+    inline const std::wstring & getScilabString() const
+    {
+        return getScilabString(type);
+    }
+
+    inline static const std::wstring & getScilabString(Type t)
+    {
+        switch (t)
+        {
+            case EMPTY :
+                return _constant_;
+            case BOOLEAN :
+                return _boolean_;
+            case COMPLEX :
+                return _constant_;
+            case CELL :
+                return _ce_;
+            case DOUBLE :
+                return _constant_;
+            case FUNCTION :
+                return _fptr_;
+            case INT16 :
+                return _int16_;
+            case INT32 :
+                return _int32_;
+            case INT64 :
+                return _int64_;
+            case INT8 :
+                return _int8_;
+            case LIST :
+                return _list_;
+            case LIBRARY :
+                return _library_;
+            case MACRO :
+                return _function_;
+            case MACROFILE :
+                return _function_;
+            case MLIST :
+                return _mlist_;
+            case POLYNOMIAL :
+                return _polynomial_;
+            case STRING :
+                return _string_;
+            case SPARSE :
+                return _sparse_;
+            case STRUCT :
+                return _st_;
+            case TLIST :
+                return _tlist_;
+            case UNKNOWN :
+                return _unknown_;
+            case UINT16 :
+                return _uint16_;
+            case UINT32 :
+                return _uint32_;
+            case UINT64 :
+                return _uint64_;
+            case UINT8 :
+                return _uint8_;
+            default :
+                return _unknown_;
+        }
+    }
+
+    inline int getScilabCode() const
+    {
+        return getScilabCode(type);
+    }
+
+    inline static int getScilabCode(Type t)
+    {
+        switch (t)
+        {
+            case EMPTY :
+                return 1;
+            case BOOLEAN :
+                return 4;
+            case COMPLEX :
+                return 1;
+            case CELL :
+                return 17;
+            case DOUBLE :
+                return 1;
+            case FUNCTION :
+                return 130;
+            case INT16 :
+                return 8;
+            case INT32 :
+                return 8;
+            case INT64 :
+                return 8;
+            case INT8 :
+                return 8;
+            case LIST :
+                return 15;
+            case LIBRARY :
+                return 14;
+            case MACRO :
+                return 11;
+            case MACROFILE :
+                return 13;
+            case MLIST :
+                return 17;
+            case POLYNOMIAL :
+                return 2;
+            case STRING :
+                return 10;
+            case SPARSE :
+                return 5;
+            case STRUCT :
+                return 17;
+            case TLIST :
+                return 16;
+            case UNKNOWN :
+                return -1;
+            case UINT16 :
+                return 8;
+            case UINT32 :
+                return 8;
+            case UINT64 :
+                return 8;
+            case UINT8 :
+                return 8;
+            default :
+                return -1;
+        }
     }
 
     friend std::wostream & operator<<(std::wostream & out, const TIType & type)
@@ -341,9 +495,6 @@ struct TIType
             case DOUBLE :
                 out << L"double";
                 break;
-            case DOUBLEUINT :
-                out << L"doubleuint";
-                break;
             case FUNCTION :
                 out << L"function";
                 break;
@@ -389,6 +540,9 @@ struct TIType
             case TLIST :
                 out << L"tlist";
                 break;
+            case UNKNOWN :
+                out << L"unknown";
+                break;
             case UINT16 :
                 out << L"uint16";
                 break;
@@ -401,8 +555,8 @@ struct TIType
             case UINT8 :
                 out << L"uint8";
                 break;
-            default:
-                out << L"unknown";
+            default :
+                break;
         }
 
         if (type.type != EMPTY && type.type != UNKNOWN)
@@ -477,4 +631,4 @@ struct hash<analysis::TIType>
 };
 } // namespace std
 
-#endif // __TITYPE_HXX__
+#endif // __TITYPE_HXX__
\ No newline at end of file
diff --git a/scilab/modules/ast/includes/analysis/analyzers/CeilAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/CeilAnalyzer.hxx
new file mode 100644 (file)
index 0000000..fc52592
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *  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 __CEIL_ANALYZER_HXX__
+#define __CEIL_ANALYZER_HXX__
+
+#include <string>
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class CeilAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    CeilAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __CEIL_ANALYZER_HXX__
diff --git a/scilab/modules/ast/includes/analysis/analyzers/FindAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/FindAnalyzer.hxx
new file mode 100644 (file)
index 0000000..ccd6e27
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ *  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 __FIND_ANALYZER_HXX__
+#define __FIND_ANALYZER_HXX__
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class FindAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    FindAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __FIND_ANALYZER_HXX__
diff --git a/scilab/modules/ast/includes/analysis/analyzers/IconvertAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/IconvertAnalyzer.hxx
new file mode 100644 (file)
index 0000000..7a29e5f
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __ICONVERT_ANALYZER_HXX__
+#define __ICONVERT_ANALYZER_HXX__
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class IconvertAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    IconvertAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __ICONVERT_ANALYZER_HXX__
diff --git a/scilab/modules/ast/includes/analysis/analyzers/InttypeAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/InttypeAnalyzer.hxx
new file mode 100644 (file)
index 0000000..3fa35cf
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __INTTYPE_ANALYZER_HXX__
+#define __INTTYPE_ANALYZER_HXX__
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class InttypeAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    InttypeAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __INTTYPE_ANALYZER_HXX__
diff --git a/scilab/modules/ast/includes/analysis/analyzers/IsrealAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/IsrealAnalyzer.hxx
new file mode 100644 (file)
index 0000000..94e31aa
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __ISREAL_ANALYZER_HXX__
+#define __ISREAL_ANALYZER_HXX__
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class IsrealAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    IsrealAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __ISREAL_ANALYZER_HXX__
diff --git a/scilab/modules/ast/includes/analysis/analyzers/IsscalarAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/IsscalarAnalyzer.hxx
new file mode 100644 (file)
index 0000000..cc58574
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __ISSCALAR_ANALYZER_HXX__
+#define __ISSCALAR_ANALYZER_HXX__
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class IsscalarAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    IsscalarAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __ISSCALAR_ANALYZER_HXX__
@@ -26,6 +26,10 @@ public:
     MatrixAnalyzer() : CallAnalyzer() { }
 
     bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+
+private:
+
+    bool analyze2Args(AnalysisVisitor & visitor, const ast::exps_t & args, ast::CallExp & e);
 };
 
 } // namespace analysis
diff --git a/scilab/modules/ast/includes/analysis/analyzers/OperAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/OperAnalyzer.hxx
new file mode 100644 (file)
index 0000000..7a29d18
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __OPER_ANALYZER_HXX__
+#define __OPER_ANALYZER_HXX__
+
+namespace analysis
+{
+
+    class AnalysisVisitor;
+    class Exp;
+    class OpExp;
+
+    class OperAnalyzer
+    {
+
+    public:
+
+        OperAnalyzer() { }
+
+        bool analyze(AnalysisVisitor & visitor, ast::Exp & e);
+        ast::MemfillExp * analyzeMemfill(AnalysisVisitor & visitor, ast::OpExp & oe);
+    };
+
+} // namespace analysis
+
+#endif // __OPER_ANALYZER_HXX__
diff --git a/scilab/modules/ast/includes/analysis/analyzers/TypeAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/TypeAnalyzer.hxx
new file mode 100644 (file)
index 0000000..b6fd2f8
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __TYPE_ANALYZER_HXX__
+#define __TYPE_ANALYZER_HXX__
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class TypeAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    TypeAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __TYPE_ANALYZER_HXX__
diff --git a/scilab/modules/ast/includes/analysis/analyzers/TypeofAnalyzer.hxx b/scilab/modules/ast/includes/analysis/analyzers/TypeofAnalyzer.hxx
new file mode 100644 (file)
index 0000000..0165d13
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - 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 __TYPEOF_ANALYZER_HXX__
+#define __TYPEOF_ANALYZER_HXX__
+
+#include "CallAnalyzer.hxx"
+
+namespace analysis
+{
+
+class TypeofAnalyzer : public CallAnalyzer
+{
+
+public:
+
+    TypeofAnalyzer() : CallAnalyzer() { }
+
+    bool analyze(AnalysisVisitor & visitor, const unsigned int lhs, ast::CallExp & e);
+};
+
+} // namespace analysis
+
+#endif // __TYPEOF_ANALYZER_HXX__
index 1601609..faf2da4 100644 (file)
 #include <vector>
 
 #include "TIType.hxx"
+#include "tools.hxx"
 
+#include "check_____dotpower____.hxx"
 #include "check_rand.hxx"
-#include "check_int.hxx"
-#include "check_transp.hxx"
-#include "check_dothypot.hxx"
+#include "check_____ge____.hxx"
+#include "check_____or____.hxx"
+#include "check_____power____.hxx"
+#include "check_____not____.hxx"
+#include "check_isreal.hxx"
+#include "check_____transp____.hxx"
+#include "check_abs.hxx"
 #include "check_cosh.hxx"
-#include "check_hypot.hxx"
+#include "check_typeof.hxx"
+#include "check_int16.hxx"
+#include "check_iconvert.hxx"
+#include "check_gettext.hxx"
+#include "check_____neq____.hxx"
+#include "check_____and____.hxx"
 #include "check_tan.hxx"
 #include "check_cumsum.hxx"
+#include "check_size.hxx"
+#include "check_____andand____.hxx"
 #include "check_asin.hxx"
-#include "check_isnan.hxx"
-#include "check_sub.hxx"
+#include "check_____dottransp____.hxx"
+#include "check_or.hxx"
+#include "check_____eq____.hxx"
+#include "check_log.hxx"
 #include "check_floor.hxx"
-#include "check_dottimes.hxx"
+#include "check_int.hxx"
 #include "check_fix.hxx"
 #include "check_sqrt.hxx"
 #include "check_uint16.hxx"
-#include "check_add.hxx"
-#include "check_abs.hxx"
+#include "check_____le____.hxx"
 #include "check_zeros.hxx"
+#include "check_ls.hxx"
 #include "check_max.hxx"
 #include "check_uint32.hxx"
 #include "check_int64.hxx"
 #include "check_prod.hxx"
+#include "check_type.hxx"
 #include "check_sin.hxx"
-#include "check_krontimes.hxx"
+#include "check_round.hxx"
+#include "check_____krontimes____.hxx"
 #include "check_int32.hxx"
-#include "check_dottransp.hxx"
-#include "check_int16.hxx"
+#include "check_____gt____.hxx"
+#include "check_inttype.hxx"
 #include "check_exp.hxx"
 #include "check_atan.hxx"
-#include "check_dotrdiv.hxx"
+#include "check_____dotrdiv____.hxx"
+#include "check_imag.hxx"
 #include "check_uint8.hxx"
 #include "check_ceil.hxx"
+#include "check_uint64.hxx"
+#include "check_____lt____.hxx"
 #include "check_sinm.hxx"
 #include "check_isinf.hxx"
+#include "check_____sub____.hxx"
 #include "check_sinh.hxx"
+#include "check_toc.hxx"
+#include "check_isscalar.hxx"
 #include "check_int8.hxx"
-#include "check_log.hxx"
-#include "check_uint64.hxx"
+#include "check_____rdivide____.hxx"
+#include "check_matrix.hxx"
+#include "check_____oror____.hxx"
 #include "check_cos.hxx"
+#include "check_and.hxx"
+#include "check_____unaryminus____.hxx"
 #include "check_tanh.hxx"
-#include "check_min.hxx"
-#include "check_times.hxx"
+#include "check_____add____.hxx"
+#include "check_isnan.hxx"
+#include "check_imult.hxx"
+#include "check_____times____.hxx"
+#include "check_argn.hxx"
 #include "check_cumprod.hxx"
 #include "check_erf.hxx"
 #include "check_ones.hxx"
 #include "check_erfc.hxx"
+#include "check_min.hxx"
 #include "check_sum.hxx"
+#include "check_____ldivide____.hxx"
 #include "check_acos.hxx"
-#include "check_round.hxx"
+#include "check_____dottimes____.hxx"
 
 namespace analysis
 {
@@ -105,15 +136,16 @@ class Checkers
     {
         inline std::size_t operator()(const __NName & nn) const
         {
-            return (std::hash<std::wstring>()(nn.name) << 4) ^ nn.nargs;
+            return tools::hash_combine(std::hash<std::wstring>()(nn.name), nn.nargs);
         }
     };
 
     typedef std::unordered_map<__NName, __Infos, __Hasher> CheckersMap;
     static CheckersMap map;
-    static TIType (*ARGS0[3])(GVN &);
-    static TIType (*ARGS1[40])(GVN &, const TIType &);
-    static TIType (*ARGS2[5])(GVN &, const TIType &, const TIType &);
+    static TIType (*ARGS0[6])(GVN &);
+    static TIType (*ARGS1[53])(GVN &, const TIType &);
+    static TIType (*ARGS2[10])(GVN &, const TIType &, const TIType &);
+    static TIType (*ARGS3[1])(GVN &, const TIType &, const TIType &, const TIType &);
 
 public:
 
@@ -132,6 +164,8 @@ public:
                     return ARGS1[i->second.pos](gvn, args[0]);
                 case 2:
                     return ARGS2[i->second.pos](gvn, args[0], args[1]);
+                case 3:
+                    return ARGS3[i->second.pos](gvn, args[0], args[1], args[2]);
             }
         }
 
@@ -158,6 +192,16 @@ public:
         return false;
     }
 
+    static bool isConst(const std::wstring & name, unsigned short nargs = 1)
+    {
+        CheckersMap::const_iterator i = map.find(__NName(nargs, name));
+        if (i != map.end())
+        {
+            return !i->second.notconst;
+        }
+        return false;
+    }
+
 private:
 
     static CheckersMap initMap()
@@ -165,100 +209,144 @@ private:
         CheckersMap map;
         map.emplace(__NName(0, L"rand"), __Infos(0, false, true, false));
         map.emplace(__NName(0, L"zeros"), __Infos(1, false, false, false));
-        map.emplace(__NName(0, L"ones"), __Infos(2, false, false, false));
+        map.emplace(__NName(0, L"ls"), __Infos(2, false, true, false));
+        map.emplace(__NName(0, L"toc"), __Infos(3, false, true, false));
+        map.emplace(__NName(0, L"argn"), __Infos(4, false, false, false));
+        map.emplace(__NName(0, L"ones"), __Infos(5, false, false, false));
         map.emplace(__NName(1, L"rand"), __Infos(0, false, true, false));
-        map.emplace(__NName(1, L"int"), __Infos(1, true, false, true));
-        map.emplace(__NName(1, L"cosh"), __Infos(2, true, false, true));
-        map.emplace(__NName(1, L"tan"), __Infos(3, true, false, true));
-        map.emplace(__NName(1, L"cumsum"), __Infos(4, true, false, true));
-        map.emplace(__NName(1, L"asin"), __Infos(5, true, false, false));
-        map.emplace(__NName(1, L"isnan"), __Infos(6, true, false, true));
-        map.emplace(__NName(1, L"floor"), __Infos(7, true, false, true));
-        map.emplace(__NName(1, L"fix"), __Infos(8, true, false, true));
-        map.emplace(__NName(1, L"sqrt"), __Infos(9, true, false, true));
-        map.emplace(__NName(1, L"uint16"), __Infos(10, true, false, true));
-        map.emplace(__NName(1, L"abs"), __Infos(11, true, false, true));
-        map.emplace(__NName(1, L"zeros"), __Infos(12, false, false, false));
-        map.emplace(__NName(1, L"max"), __Infos(13, false, false, true));
-        map.emplace(__NName(1, L"uint32"), __Infos(14, true, false, true));
-        map.emplace(__NName(1, L"int64"), __Infos(15, true, false, true));
-        map.emplace(__NName(1, L"prod"), __Infos(16, false, false, true));
-        map.emplace(__NName(1, L"sin"), __Infos(17, true, false, true));
-        map.emplace(__NName(1, L"int32"), __Infos(18, true, false, true));
-        map.emplace(__NName(1, L"int16"), __Infos(19, true, false, true));
-        map.emplace(__NName(1, L"exp"), __Infos(20, true, false, true));
-        map.emplace(__NName(1, L"atan"), __Infos(21, true, false, false));
-        map.emplace(__NName(1, L"uint8"), __Infos(22, true, false, true));
-        map.emplace(__NName(1, L"ceil"), __Infos(23, true, false, true));
-        map.emplace(__NName(1, L"sinm"), __Infos(24, false, false, false));
-        map.emplace(__NName(1, L"isinf"), __Infos(25, true, false, true));
-        map.emplace(__NName(1, L"sinh"), __Infos(26, true, false, true));
-        map.emplace(__NName(1, L"int8"), __Infos(27, true, false, true));
-        map.emplace(__NName(1, L"log"), __Infos(28, true, false, false));
-        map.emplace(__NName(1, L"uint64"), __Infos(29, true, false, true));
-        map.emplace(__NName(1, L"cos"), __Infos(30, true, false, true));
-        map.emplace(__NName(1, L"tanh"), __Infos(31, true, false, true));
-        map.emplace(__NName(1, L"min"), __Infos(32, false, false, true));
-        map.emplace(__NName(1, L"cumprod"), __Infos(33, true, false, true));
-        map.emplace(__NName(1, L"erf"), __Infos(34, true, false, true));
-        map.emplace(__NName(1, L"ones"), __Infos(35, false, false, false));
-        map.emplace(__NName(1, L"erfc"), __Infos(36, true, false, true));
-        map.emplace(__NName(1, L"sum"), __Infos(37, false, false, true));
-        map.emplace(__NName(1, L"acos"), __Infos(38, true, false, false));
-        map.emplace(__NName(1, L"round"), __Infos(39, true, false, true));
+        map.emplace(__NName(1, L"isreal"), __Infos(1, false, false, false));
+        map.emplace(__NName(1, L"abs"), __Infos(2, true, false, true));
+        map.emplace(__NName(1, L"cosh"), __Infos(3, true, false, true));
+        map.emplace(__NName(1, L"typeof"), __Infos(4, false, false, false));
+        map.emplace(__NName(1, L"int16"), __Infos(5, true, false, true));
+        map.emplace(__NName(1, L"gettext"), __Infos(6, false, true, false));
+        map.emplace(__NName(1, L"tan"), __Infos(7, true, false, true));
+        map.emplace(__NName(1, L"cumsum"), __Infos(8, true, false, true));
+        map.emplace(__NName(1, L"size"), __Infos(9, false, false, false));
+        map.emplace(__NName(1, L"asin"), __Infos(10, true, false, false));
+        map.emplace(__NName(1, L"or"), __Infos(11, false, false, false));
+        map.emplace(__NName(1, L"log"), __Infos(12, true, false, false));
+        map.emplace(__NName(1, L"floor"), __Infos(13, true, false, true));
+        map.emplace(__NName(1, L"int"), __Infos(14, true, false, true));
+        map.emplace(__NName(1, L"fix"), __Infos(15, true, false, true));
+        map.emplace(__NName(1, L"sqrt"), __Infos(16, true, false, true));
+        map.emplace(__NName(1, L"uint16"), __Infos(17, true, false, true));
+        map.emplace(__NName(1, L"zeros"), __Infos(18, false, false, false));
+        map.emplace(__NName(1, L"ls"), __Infos(19, false, true, false));
+        map.emplace(__NName(1, L"max"), __Infos(20, false, false, true));
+        map.emplace(__NName(1, L"uint32"), __Infos(21, true, false, true));
+        map.emplace(__NName(1, L"int64"), __Infos(22, true, false, true));
+        map.emplace(__NName(1, L"prod"), __Infos(23, false, false, true));
+        map.emplace(__NName(1, L"type"), __Infos(24, false, false, false));
+        map.emplace(__NName(1, L"sin"), __Infos(25, true, false, true));
+        map.emplace(__NName(1, L"round"), __Infos(26, true, false, true));
+        map.emplace(__NName(1, L"int32"), __Infos(27, true, false, true));
+        map.emplace(__NName(1, L"inttype"), __Infos(28, false, false, false));
+        map.emplace(__NName(1, L"exp"), __Infos(29, true, false, true));
+        map.emplace(__NName(1, L"atan"), __Infos(30, true, false, false));
+        map.emplace(__NName(1, L"imag"), __Infos(31, false, false, false));
+        map.emplace(__NName(1, L"uint8"), __Infos(32, true, false, true));
+        map.emplace(__NName(1, L"ceil"), __Infos(33, true, false, true));
+        map.emplace(__NName(1, L"uint64"), __Infos(34, true, false, true));
+        map.emplace(__NName(1, L"sinm"), __Infos(35, false, false, false));
+        map.emplace(__NName(1, L"isinf"), __Infos(36, true, false, true));
+        map.emplace(__NName(1, L"sinh"), __Infos(37, true, false, true));
+        map.emplace(__NName(1, L"isscalar"), __Infos(38, false, false, false));
+        map.emplace(__NName(1, L"int8"), __Infos(39, true, false, true));
+        map.emplace(__NName(1, L"cos"), __Infos(40, true, false, true));
+        map.emplace(__NName(1, L"and"), __Infos(41, false, false, false));
+        map.emplace(__NName(1, L"tanh"), __Infos(42, true, false, true));
+        map.emplace(__NName(1, L"isnan"), __Infos(43, true, false, true));
+        map.emplace(__NName(1, L"imult"), __Infos(44, false, false, false));
+        map.emplace(__NName(1, L"argn"), __Infos(45, false, false, false));
+        map.emplace(__NName(1, L"cumprod"), __Infos(46, true, false, true));
+        map.emplace(__NName(1, L"erf"), __Infos(47, true, false, true));
+        map.emplace(__NName(1, L"ones"), __Infos(48, false, false, false));
+        map.emplace(__NName(1, L"erfc"), __Infos(49, true, false, true));
+        map.emplace(__NName(1, L"min"), __Infos(50, false, false, true));
+        map.emplace(__NName(1, L"sum"), __Infos(51, false, false, true));
+        map.emplace(__NName(1, L"acos"), __Infos(52, true, false, false));
         map.emplace(__NName(2, L"rand"), __Infos(0, false, true, false));
-        map.emplace(__NName(2, L"dothypot"), __Infos(1, true, false, true));
-        map.emplace(__NName(2, L"hypot"), __Infos(2, false, false, true));
-        map.emplace(__NName(2, L"zeros"), __Infos(3, false, false, false));
-        map.emplace(__NName(2, L"ones"), __Infos(4, false, false, false));
+        map.emplace(__NName(2, L"isreal"), __Infos(1, false, false, false));
+        map.emplace(__NName(2, L"iconvert"), __Infos(2, false, false, false));
+        map.emplace(__NName(2, L"gettext"), __Infos(3, false, true, false));
+        map.emplace(__NName(2, L"size"), __Infos(4, false, false, false));
+        map.emplace(__NName(2, L"or"), __Infos(5, false, false, false));
+        map.emplace(__NName(2, L"zeros"), __Infos(6, false, false, false));
+        map.emplace(__NName(2, L"matrix"), __Infos(7, false, false, false));
+        map.emplace(__NName(2, L"and"), __Infos(8, false, false, false));
+        map.emplace(__NName(2, L"ones"), __Infos(9, false, false, false));
+        map.emplace(__NName(3, L"matrix"), __Infos(0, false, false, false));
         ARGS0[0] = &check_rand;
         ARGS0[1] = &check_zeros;
-        ARGS0[2] = &check_ones;
+        ARGS0[2] = &check_ls;
+        ARGS0[3] = &check_toc;
+        ARGS0[4] = &check_argn;
+        ARGS0[5] = &check_ones;
         ARGS1[0] = &check_rand;
-        ARGS1[1] = &check_int;
-        ARGS1[2] = &check_cosh;
-        ARGS1[3] = &check_tan;
-        ARGS1[4] = &check_cumsum;
-        ARGS1[5] = &check_asin;
-        ARGS1[6] = &check_isnan;
-        ARGS1[7] = &check_floor;
-        ARGS1[8] = &check_fix;
-        ARGS1[9] = &check_sqrt;
-        ARGS1[10] = &check_uint16;
-        ARGS1[11] = &check_abs;
-        ARGS1[12] = &check_zeros;
-        ARGS1[13] = &check_max;
-        ARGS1[14] = &check_uint32;
-        ARGS1[15] = &check_int64;
-        ARGS1[16] = &check_prod;
-        ARGS1[17] = &check_sin;
-        ARGS1[18] = &check_int32;
-        ARGS1[19] = &check_int16;
-        ARGS1[20] = &check_exp;
-        ARGS1[21] = &check_atan;
-        ARGS1[22] = &check_uint8;
-        ARGS1[23] = &check_ceil;
-        ARGS1[24] = &check_sinm;
-        ARGS1[25] = &check_isinf;
-        ARGS1[26] = &check_sinh;
-        ARGS1[27] = &check_int8;
-        ARGS1[28] = &check_log;
-        ARGS1[29] = &check_uint64;
-        ARGS1[30] = &check_cos;
-        ARGS1[31] = &check_tanh;
-        ARGS1[32] = &check_min;
-        ARGS1[33] = &check_cumprod;
-        ARGS1[34] = &check_erf;
-        ARGS1[35] = &check_ones;
-        ARGS1[36] = &check_erfc;
-        ARGS1[37] = &check_sum;
-        ARGS1[38] = &check_acos;
-        ARGS1[39] = &check_round;
+        ARGS1[1] = &check_isreal;
+        ARGS1[2] = &check_abs;
+        ARGS1[3] = &check_cosh;
+        ARGS1[4] = &check_typeof;
+        ARGS1[5] = &check_int16;
+        ARGS1[6] = &check_gettext;
+        ARGS1[7] = &check_tan;
+        ARGS1[8] = &check_cumsum;
+        ARGS1[9] = &check_size;
+        ARGS1[10] = &check_asin;
+        ARGS1[11] = &check_or;
+        ARGS1[12] = &check_log;
+        ARGS1[13] = &check_floor;
+        ARGS1[14] = &check_int;
+        ARGS1[15] = &check_fix;
+        ARGS1[16] = &check_sqrt;
+        ARGS1[17] = &check_uint16;
+        ARGS1[18] = &check_zeros;
+        ARGS1[19] = &check_ls;
+        ARGS1[20] = &check_max;
+        ARGS1[21] = &check_uint32;
+        ARGS1[22] = &check_int64;
+        ARGS1[23] = &check_prod;
+        ARGS1[24] = &check_type;
+        ARGS1[25] = &check_sin;
+        ARGS1[26] = &check_round;
+        ARGS1[27] = &check_int32;
+        ARGS1[28] = &check_inttype;
+        ARGS1[29] = &check_exp;
+        ARGS1[30] = &check_atan;
+        ARGS1[31] = &check_imag;
+        ARGS1[32] = &check_uint8;
+        ARGS1[33] = &check_ceil;
+        ARGS1[34] = &check_uint64;
+        ARGS1[35] = &check_sinm;
+        ARGS1[36] = &check_isinf;
+        ARGS1[37] = &check_sinh;
+        ARGS1[38] = &check_isscalar;
+        ARGS1[39] = &check_int8;
+        ARGS1[40] = &check_cos;
+        ARGS1[41] = &check_and;
+        ARGS1[42] = &check_tanh;
+        ARGS1[43] = &check_isnan;
+        ARGS1[44] = &check_imult;
+        ARGS1[45] = &check_argn;
+        ARGS1[46] = &check_cumprod;
+        ARGS1[47] = &check_erf;
+        ARGS1[48] = &check_ones;
+        ARGS1[49] = &check_erfc;
+        ARGS1[50] = &check_min;
+        ARGS1[51] = &check_sum;
+        ARGS1[52] = &check_acos;
         ARGS2[0] = &check_rand;
-        ARGS2[1] = &check_dothypot;
-        ARGS2[2] = &check_hypot;
-        ARGS2[3] = &check_zeros;
-        ARGS2[4] = &check_ones;
+        ARGS2[1] = &check_isreal;
+        ARGS2[2] = &check_iconvert;
+        ARGS2[3] = &check_gettext;
+        ARGS2[4] = &check_size;
+        ARGS2[5] = &check_or;
+        ARGS2[6] = &check_zeros;
+        ARGS2[7] = &check_matrix;
+        ARGS2[8] = &check_and;
+        ARGS2[9] = &check_ones;
+        ARGS3[0] = &check_matrix;
 
         return map;
     }
diff --git a/scilab/modules/ast/includes/analysis/checkers/check_____add____.hxx b/scilab/modules/ast/includes/analysis/checkers/check_____add____.hxx
new file mode 100644 (file)
index 0000000..d674127
--- /dev/null
@@ -0,0 +1,1930 @@
+/*
+ *  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 __CHECK_____ADD_____HXX__
+#define __CHECK_____ADD_____HXX__
+
+#include "TIType.hxx"
+
+namespace analysis
+{
+inline static TIType check_____add____(GVN & gvn, const TIType & in0, const TIType & in1)
+{
+    switch (in0.type)
+    {
+        case TIType::EMPTY :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    return in1;
+                }
+                case TIType::COMPLEX :
+                {
+                    return in1;
+                }
+                case TIType::DOUBLE :
+                {
+                    return in1;
+                }
+                case TIType::INT16 :
+                {
+                    return in1;
+                }
+                case TIType::INT32 :
+                {
+                    return in1;
+                }
+                case TIType::INT64 :
+                {
+                    return in1;
+                }
+                case TIType::INT8 :
+                {
+                    return in1;
+                }
+                case TIType::STRING :
+                {
+                    return in1;
+                }
+                case TIType::UINT16 :
+                {
+                    return in1;
+                }
+                case TIType::UINT32 :
+                {
+                    return in1;
+                }
+                case TIType::UINT64 :
+                {
+                    return in1;
+                }
+                case TIType::UINT8 :
+                {
+                    return in1;
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::BOOLEAN :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::DOUBLE, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::DOUBLE, -2, -2);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::COMPLEX, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::COMPLEX, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::DOUBLE, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::DOUBLE, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT16, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT8, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT8, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::COMPLEX :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::COMPLEX, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::COMPLEX, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::DOUBLE :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::DOUBLE, 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(gvn, TIType::DOUBLE, -2, -2);
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::COMPLEX, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::COMPLEX, -2, -2);
+                }
+                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(gvn, TIType::DOUBLE, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT16, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT8, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT8, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::INT16 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT16, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT16, -2, -2);
+                }
+                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(gvn, TIType::INT16, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT16, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT16, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::INT32 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT32, -2, -2);
+                }
+                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(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::INT64 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT64, -2, -2);
+                }
+                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(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT64, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::INT8 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT8, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::INT8, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT16, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::INT64, -2, -2);
+                }
+                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(gvn, TIType::INT8, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT8, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT8, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::STRING :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                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(gvn, TIType::STRING, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::UINT16 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT16, -2, -2);
+                }
+                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(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT16, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::UINT32 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT32, -2, -2);
+                }
+                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(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT32, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::UINT64 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                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(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::UINT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT64, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::UINT8 :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in0;
+                }
+                case TIType::BOOLEAN :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT8, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT8, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, 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(gvn, TIType::UINT8, -2, -2);
+                }
+                case TIType::UINT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT16, -2, -2);
+                }
+                case TIType::UINT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT32, -2, -2);
+                }
+                case TIType::UINT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return in1;
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in1;
+                    }
+                    return TIType(gvn, TIType::UINT64, -2, -2);
+                }
+                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(gvn, TIType::UINT8, -2, -2);
+                }
+                default :
+                    return TIType(gvn);
+            }
+            return TIType(gvn);
+        }
+        default :
+            return TIType(gvn);
+    }
+}
+
+} // namespace analysis
+
+#endif // __CHECK_____add_____HXX__
\ No newline at end of file
diff --git a/scilab/modules/ast/includes/analysis/checkers/check_____and____.hxx b/scilab/modules/ast/includes/analysis/checkers/check_____and____.hxx
new file mode 100644 (file)
index 0000000..194b84d
--- /dev/null
@@ -0,0 +1,2169 @@
+/*
+ *  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 __CHECK_____AND_____HXX__
+#define __CHECK_____AND_____HXX__
+
+#include "TIType.hxx"
+
+namespace analysis
+{
+inline static TIType check_____and____(GVN & gvn, 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(gvn);
+            }
+            return TIType(gvn);
+        }
+        case TIType::BOOLEAN :
+        {
+            switch (in1.type)
+            {
+                case TIType::EMPTY :
+                {
+                    return in1;
+                }
+                case TIType::COMPLEX :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::BOOLEAN, 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(gvn, TIType::BOOLEAN, -2, -2);
+                }
+                case TIType::DOUBLE :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::BOOLEAN, 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(gvn, TIType::BOOLEAN, -2, -2);
+                }
+                case TIType::INT16 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::BOOLEAN, 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(gvn, TIType::BOOLEAN, -2, -2);
+                }
+                case TIType::INT32 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::BOOLEAN, 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(gvn, TIType::BOOLEAN, -2, -2);
+                }
+                case TIType::INT64 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::BOOLEAN, 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(gvn, TIType::BOOLEAN, -2, -2);
+                }
+                case TIType::INT8 :
+                {
+                    if (in0.rows == 1 && in0.cols == 1)
+                    {
+                        return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
+                    }
+                    if (in1.rows == 1 && in1.cols == 1)
+                    {
+                        return in0;
+                    }
+                    if (in1.rows == in0.rows && in1.cols == in0.cols)
+                    {
+                        return in0;
+