Changeset 6d44da1 for src


Ignore:
Timestamp:
Sep 25, 2018, 11:35:34 AM (7 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
Children:
c6bbcdb
Parents:
341bb80 (diff), 7428ad9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into shared_library

Location:
src
Files:
5 added
21 edited

Legend:

Unmodified
Added
Removed
  • src/CodeTools/module.mk

    r341bb80 r6d44da1  
    1616
    1717SRC += CodeTools/DeclStats.cc \
     18        CodeTools/ResolvProtoDump.cc \
    1819        CodeTools/TrackLoc.cc
  • src/CompilationState.cc

    r341bb80 r6d44da1  
    3030        parsep = false,
    3131        resolvep = false,
     32        resolvprotop = false,
    3233        symtabp = false,
    3334        treep = false,
  • src/CompilationState.h

    r341bb80 r6d44da1  
    3131        parsep,
    3232        resolvep,
     33        resolvprotop,
    3334        symtabp,
    3435        treep,
  • src/GenPoly/ScrubTyVars.cc

    r341bb80 r6d44da1  
    5050                                delete typeInst;
    5151                                return new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) );
     52                          default:
     53                                assertf(false, "Unhandled tyvar kind: %d", tyVar->second.kind);
    5254                        } // switch
    5355                } // if
  • src/Makefile.am

    r341bb80 r6d44da1  
    4444# put into lib for now
    4545cfa_cpplibdir = $(CFA_LIBDIR)
    46 cfa_cpplib_PROGRAMS = ../driver/cfa-cpp
     46cfa_cpplib_PROGRAMS = ../driver/cfa-cpp demangler
    4747___driver_cfa_cpp_SOURCES = $(SRC)
    4848___driver_cfa_cpp_LDADD = -ldl                  # yywrap
     
    5050AM_CXXFLAGS = @HOST_FLAGS@ -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I./Parser -I$(srcdir)/Parser -I$(srcdir)/include -DYY_NO_INPUT -O2 -g -std=c++14
    5151AM_LDFLAGS  = @HOST_FLAGS@ -Xlinker -export-dynamic
     52ARFLAGS     = cr
     53
     54demangler_SOURCES = SymTab/demangler.cc
     55
     56demangler_LDADD = libdemangle.a     # yywrap
     57
     58noinst_LIBRARIES = libdemangle.a
     59libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
     60  SynTree/Type.cc \
     61  SynTree/VoidType.cc \
     62  SynTree/BasicType.cc \
     63  SynTree/PointerType.cc \
     64  SynTree/ArrayType.cc \
     65  SynTree/ReferenceType.cc \
     66  SynTree/FunctionType.cc \
     67  SynTree/ReferenceToType.cc \
     68  SynTree/TupleType.cc \
     69  SynTree/TypeofType.cc \
     70  SynTree/AttrType.cc \
     71  SynTree/VarArgsType.cc \
     72  SynTree/ZeroOneType.cc \
     73  SynTree/Constant.cc \
     74  SynTree/Expression.cc \
     75  SynTree/TupleExpr.cc \
     76  SynTree/CommaExpr.cc \
     77  SynTree/TypeExpr.cc \
     78  SynTree/ApplicationExpr.cc \
     79  SynTree/AddressExpr.cc \
     80  SynTree/Statement.cc \
     81  SynTree/CompoundStmt.cc \
     82  SynTree/DeclStmt.cc \
     83  SynTree/Declaration.cc \
     84  SynTree/DeclarationWithType.cc \
     85  SynTree/ObjectDecl.cc \
     86  SynTree/FunctionDecl.cc \
     87  SynTree/AggregateDecl.cc \
     88  SynTree/NamedTypeDecl.cc \
     89  SynTree/TypeDecl.cc \
     90  SynTree/Initializer.cc \
     91  SynTree/TypeSubstitution.cc \
     92  SynTree/Attribute.cc \
     93  SynTree/DeclReplacer.cc \
     94  CompilationState.cc \
     95  CodeGen/CodeGenerator.cc \
     96  CodeGen/FixMain.cc \
     97  CodeGen/GenType.cc \
     98  CodeGen/OperatorTable.cc \
     99  Common/Assert.cc \
     100  Common/Eval.cc \
     101  Common/SemanticError.cc \
     102  Common/UniqueName.cc \
     103  Concurrency/Keywords.cc \
     104  ControlStruct/ForExprMutator.cc \
     105  ControlStruct/LabelFixer.cc \
     106  ControlStruct/LabelGenerator.cc \
     107  ControlStruct/MLEMutator.cc \
     108  ControlStruct/Mutate.cc \
     109  GenPoly/GenPoly.cc \
     110  GenPoly/Lvalue.cc \
     111  InitTweak/GenInit.cc \
     112  InitTweak/InitTweak.cc \
     113  Parser/LinkageSpec.cc \
     114  ResolvExpr/AdjustExprType.cc \
     115  ResolvExpr/Alternative.cc \
     116  ResolvExpr/AlternativeFinder.cc \
     117  ResolvExpr/ExplodedActual.cc \
     118  ResolvExpr/CastCost.cc \
     119  ResolvExpr/CommonType.cc \
     120  ResolvExpr/ConversionCost.cc \
     121  ResolvExpr/CurrentObject.cc \
     122  ResolvExpr/FindOpenVars.cc \
     123  ResolvExpr/Occurs.cc \
     124  ResolvExpr/PolyCost.cc \
     125  ResolvExpr/PtrsAssignable.cc \
     126  ResolvExpr/PtrsCastable.cc \
     127  ResolvExpr/RenameVars.cc \
     128  ResolvExpr/Resolver.cc \
     129  ResolvExpr/ResolveTypeof.cc \
     130  ResolvExpr/TypeEnvironment.cc \
     131  ResolvExpr/Unify.cc \
     132  SymTab/Autogen.cc \
     133  SymTab/FixFunction.cc \
     134  SymTab/Indexer.cc \
     135  SymTab/Mangler.cc \
     136  SymTab/Validate.cc \
     137  Tuples/Explode.cc \
     138  Tuples/TupleAssignment.cc \
     139  Tuples/TupleExpansion.cc \
     140  Validate/HandleAttributes.cc
    52141
    53142MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
  • src/Makefile.in

    r341bb80 r6d44da1  
    6262######################### -*- Mode: Makefile-Gmake -*- ########################
    6363###############################################################################
     64
    6465
    6566VPATH = @srcdir@
     
    137138build_triplet = @build@
    138139host_triplet = @host@
    139 cfa_cpplib_PROGRAMS = ../driver/cfa-cpp$(EXEEXT)
     140cfa_cpplib_PROGRAMS = ../driver/cfa-cpp$(EXEEXT) demangler$(EXEEXT)
    140141subdir = src
    141142ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
     
    149150CONFIG_CLEAN_FILES =
    150151CONFIG_CLEAN_VPATH_FILES =
     152LIBRARIES = $(noinst_LIBRARIES)
     153AR = ar
     154AM_V_AR = $(am__v_AR_@AM_V@)
     155am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
     156am__v_AR_0 = @echo "  AR      " $@;
     157am__v_AR_1 =
     158libdemangle_a_AR = $(AR) $(ARFLAGS)
     159libdemangle_a_LIBADD =
     160am__dirstamp = $(am__leading_dot)dirstamp
     161am_libdemangle_a_OBJECTS = SymTab/Demangle.$(OBJEXT) \
     162        SymTab/ManglerCommon.$(OBJEXT) SynTree/Type.$(OBJEXT) \
     163        SynTree/VoidType.$(OBJEXT) SynTree/BasicType.$(OBJEXT) \
     164        SynTree/PointerType.$(OBJEXT) SynTree/ArrayType.$(OBJEXT) \
     165        SynTree/ReferenceType.$(OBJEXT) SynTree/FunctionType.$(OBJEXT) \
     166        SynTree/ReferenceToType.$(OBJEXT) SynTree/TupleType.$(OBJEXT) \
     167        SynTree/TypeofType.$(OBJEXT) SynTree/AttrType.$(OBJEXT) \
     168        SynTree/VarArgsType.$(OBJEXT) SynTree/ZeroOneType.$(OBJEXT) \
     169        SynTree/Constant.$(OBJEXT) SynTree/Expression.$(OBJEXT) \
     170        SynTree/TupleExpr.$(OBJEXT) SynTree/CommaExpr.$(OBJEXT) \
     171        SynTree/TypeExpr.$(OBJEXT) SynTree/ApplicationExpr.$(OBJEXT) \
     172        SynTree/AddressExpr.$(OBJEXT) SynTree/Statement.$(OBJEXT) \
     173        SynTree/CompoundStmt.$(OBJEXT) SynTree/DeclStmt.$(OBJEXT) \
     174        SynTree/Declaration.$(OBJEXT) \
     175        SynTree/DeclarationWithType.$(OBJEXT) \
     176        SynTree/ObjectDecl.$(OBJEXT) SynTree/FunctionDecl.$(OBJEXT) \
     177        SynTree/AggregateDecl.$(OBJEXT) \
     178        SynTree/NamedTypeDecl.$(OBJEXT) SynTree/TypeDecl.$(OBJEXT) \
     179        SynTree/Initializer.$(OBJEXT) \
     180        SynTree/TypeSubstitution.$(OBJEXT) SynTree/Attribute.$(OBJEXT) \
     181        SynTree/DeclReplacer.$(OBJEXT) CompilationState.$(OBJEXT) \
     182        CodeGen/CodeGenerator.$(OBJEXT) CodeGen/FixMain.$(OBJEXT) \
     183        CodeGen/GenType.$(OBJEXT) CodeGen/OperatorTable.$(OBJEXT) \
     184        Common/Assert.$(OBJEXT) Common/Eval.$(OBJEXT) \
     185        Common/SemanticError.$(OBJEXT) Common/UniqueName.$(OBJEXT) \
     186        Concurrency/Keywords.$(OBJEXT) \
     187        ControlStruct/ForExprMutator.$(OBJEXT) \
     188        ControlStruct/LabelFixer.$(OBJEXT) \
     189        ControlStruct/LabelGenerator.$(OBJEXT) \
     190        ControlStruct/MLEMutator.$(OBJEXT) \
     191        ControlStruct/Mutate.$(OBJEXT) GenPoly/GenPoly.$(OBJEXT) \
     192        GenPoly/Lvalue.$(OBJEXT) InitTweak/GenInit.$(OBJEXT) \
     193        InitTweak/InitTweak.$(OBJEXT) Parser/LinkageSpec.$(OBJEXT) \
     194        ResolvExpr/AdjustExprType.$(OBJEXT) \
     195        ResolvExpr/Alternative.$(OBJEXT) \
     196        ResolvExpr/AlternativeFinder.$(OBJEXT) \
     197        ResolvExpr/ExplodedActual.$(OBJEXT) \
     198        ResolvExpr/CastCost.$(OBJEXT) ResolvExpr/CommonType.$(OBJEXT) \
     199        ResolvExpr/ConversionCost.$(OBJEXT) \
     200        ResolvExpr/CurrentObject.$(OBJEXT) \
     201        ResolvExpr/FindOpenVars.$(OBJEXT) ResolvExpr/Occurs.$(OBJEXT) \
     202        ResolvExpr/PolyCost.$(OBJEXT) \
     203        ResolvExpr/PtrsAssignable.$(OBJEXT) \
     204        ResolvExpr/PtrsCastable.$(OBJEXT) \
     205        ResolvExpr/RenameVars.$(OBJEXT) ResolvExpr/Resolver.$(OBJEXT) \
     206        ResolvExpr/ResolveTypeof.$(OBJEXT) \
     207        ResolvExpr/TypeEnvironment.$(OBJEXT) \
     208        ResolvExpr/Unify.$(OBJEXT) SymTab/Autogen.$(OBJEXT) \
     209        SymTab/FixFunction.$(OBJEXT) SymTab/Indexer.$(OBJEXT) \
     210        SymTab/Mangler.$(OBJEXT) SymTab/Validate.$(OBJEXT) \
     211        Tuples/Explode.$(OBJEXT) Tuples/TupleAssignment.$(OBJEXT) \
     212        Tuples/TupleExpansion.$(OBJEXT) \
     213        Validate/HandleAttributes.$(OBJEXT)
     214libdemangle_a_OBJECTS = $(am_libdemangle_a_OBJECTS)
    151215am__installdirs = "$(DESTDIR)$(cfa_cpplibdir)"
    152216PROGRAMS = $(cfa_cpplib_PROGRAMS)
    153 am__dirstamp = $(am__leading_dot)dirstamp
    154217am__objects_1 = main.$(OBJEXT) MakeLibCfa.$(OBJEXT) \
    155218        CompilationState.$(OBJEXT) CodeGen/Generate.$(OBJEXT) \
     
    157220        CodeGen/FixNames.$(OBJEXT) CodeGen/FixMain.$(OBJEXT) \
    158221        CodeGen/OperatorTable.$(OBJEXT) CodeTools/DeclStats.$(OBJEXT) \
     222        CodeTools/ResolvProtoDump.$(OBJEXT) \
    159223        CodeTools/TrackLoc.$(OBJEXT) Concurrency/Keywords.$(OBJEXT) \
    160224        Concurrency/Waitfor.$(OBJEXT) Common/SemanticError.$(OBJEXT) \
     
    196260        ResolvExpr/CurrentObject.$(OBJEXT) \
    197261        ResolvExpr/ExplodedActual.$(OBJEXT) SymTab/Indexer.$(OBJEXT) \
    198         SymTab/Mangler.$(OBJEXT) SymTab/Validate.$(OBJEXT) \
    199         SymTab/FixFunction.$(OBJEXT) SymTab/Autogen.$(OBJEXT) \
    200         SynTree/Type.$(OBJEXT) SynTree/VoidType.$(OBJEXT) \
    201         SynTree/BasicType.$(OBJEXT) SynTree/PointerType.$(OBJEXT) \
    202         SynTree/ArrayType.$(OBJEXT) SynTree/ReferenceType.$(OBJEXT) \
    203         SynTree/FunctionType.$(OBJEXT) \
     262        SymTab/Mangler.$(OBJEXT) SymTab/ManglerCommon.$(OBJEXT) \
     263        SymTab/Validate.$(OBJEXT) SymTab/FixFunction.$(OBJEXT) \
     264        SymTab/Autogen.$(OBJEXT) SynTree/Type.$(OBJEXT) \
     265        SynTree/VoidType.$(OBJEXT) SynTree/BasicType.$(OBJEXT) \
     266        SynTree/PointerType.$(OBJEXT) SynTree/ArrayType.$(OBJEXT) \
     267        SynTree/ReferenceType.$(OBJEXT) SynTree/FunctionType.$(OBJEXT) \
    204268        SynTree/ReferenceToType.$(OBJEXT) SynTree/TupleType.$(OBJEXT) \
    205269        SynTree/TypeofType.$(OBJEXT) SynTree/AttrType.$(OBJEXT) \
     
    225289___driver_cfa_cpp_OBJECTS = $(am____driver_cfa_cpp_OBJECTS)
    226290___driver_cfa_cpp_DEPENDENCIES =
     291am_demangler_OBJECTS = SymTab/demangler.$(OBJEXT)
     292demangler_OBJECTS = $(am_demangler_OBJECTS)
     293demangler_DEPENDENCIES = libdemangle.a
    227294AM_V_P = $(am__v_P_@AM_V@)
    228295am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
     
    279346am__v_CCLD_0 = @echo "  CCLD    " $@;
    280347am__v_CCLD_1 =
    281 SOURCES = $(___driver_cfa_cpp_SOURCES)
    282 DIST_SOURCES = $(___driver_cfa_cpp_SOURCES)
     348SOURCES = $(libdemangle_a_SOURCES) $(___driver_cfa_cpp_SOURCES) \
     349        $(demangler_SOURCES)
     350DIST_SOURCES = $(libdemangle_a_SOURCES) $(___driver_cfa_cpp_SOURCES) \
     351        $(demangler_SOURCES)
    283352am__can_run_installinfo = \
    284353  case $$AM_UPDATE_INFO_DIR in \
     
    451520        CodeGen/FixNames.cc CodeGen/FixMain.cc \
    452521        CodeGen/OperatorTable.cc CodeTools/DeclStats.cc \
    453         CodeTools/TrackLoc.cc Concurrency/Keywords.cc \
    454         Concurrency/Waitfor.cc Common/SemanticError.cc \
    455         Common/UniqueName.cc Common/DebugMalloc.cc Common/Assert.cc \
    456         Common/Heap.cc Common/Eval.cc ControlStruct/LabelGenerator.cc \
     522        CodeTools/ResolvProtoDump.cc CodeTools/TrackLoc.cc \
     523        Concurrency/Keywords.cc Concurrency/Waitfor.cc \
     524        Common/SemanticError.cc Common/UniqueName.cc \
     525        Common/DebugMalloc.cc Common/Assert.cc Common/Heap.cc \
     526        Common/Eval.cc ControlStruct/LabelGenerator.cc \
    457527        ControlStruct/LabelFixer.cc ControlStruct/MLEMutator.cc \
    458528        ControlStruct/Mutate.cc ControlStruct/ForExprMutator.cc \
     
    477547        ResolvExpr/Occurs.cc ResolvExpr/TypeEnvironment.cc \
    478548        ResolvExpr/CurrentObject.cc ResolvExpr/ExplodedActual.cc \
    479         SymTab/Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \
    480         SymTab/FixFunction.cc SymTab/Autogen.cc SynTree/Type.cc \
    481         SynTree/VoidType.cc SynTree/BasicType.cc \
     549        SymTab/Indexer.cc SymTab/Mangler.cc SymTab/ManglerCommon.cc \
     550        SymTab/Validate.cc SymTab/FixFunction.cc SymTab/Autogen.cc \
     551        SynTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \
    482552        SynTree/PointerType.cc SynTree/ArrayType.cc \
    483553        SynTree/ReferenceType.cc SynTree/FunctionType.cc \
     
    511581AM_CXXFLAGS = @HOST_FLAGS@ -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I./Parser -I$(srcdir)/Parser -I$(srcdir)/include -DYY_NO_INPUT -O2 -g -std=c++14
    512582AM_LDFLAGS = @HOST_FLAGS@ -Xlinker -export-dynamic
     583ARFLAGS = cr
     584demangler_SOURCES = SymTab/demangler.cc
     585demangler_LDADD = libdemangle.a     # yywrap
     586noinst_LIBRARIES = libdemangle.a
     587libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
     588  SynTree/Type.cc \
     589  SynTree/VoidType.cc \
     590  SynTree/BasicType.cc \
     591  SynTree/PointerType.cc \
     592  SynTree/ArrayType.cc \
     593  SynTree/ReferenceType.cc \
     594  SynTree/FunctionType.cc \
     595  SynTree/ReferenceToType.cc \
     596  SynTree/TupleType.cc \
     597  SynTree/TypeofType.cc \
     598  SynTree/AttrType.cc \
     599  SynTree/VarArgsType.cc \
     600  SynTree/ZeroOneType.cc \
     601  SynTree/Constant.cc \
     602  SynTree/Expression.cc \
     603  SynTree/TupleExpr.cc \
     604  SynTree/CommaExpr.cc \
     605  SynTree/TypeExpr.cc \
     606  SynTree/ApplicationExpr.cc \
     607  SynTree/AddressExpr.cc \
     608  SynTree/Statement.cc \
     609  SynTree/CompoundStmt.cc \
     610  SynTree/DeclStmt.cc \
     611  SynTree/Declaration.cc \
     612  SynTree/DeclarationWithType.cc \
     613  SynTree/ObjectDecl.cc \
     614  SynTree/FunctionDecl.cc \
     615  SynTree/AggregateDecl.cc \
     616  SynTree/NamedTypeDecl.cc \
     617  SynTree/TypeDecl.cc \
     618  SynTree/Initializer.cc \
     619  SynTree/TypeSubstitution.cc \
     620  SynTree/Attribute.cc \
     621  SynTree/DeclReplacer.cc \
     622  CompilationState.cc \
     623  CodeGen/CodeGenerator.cc \
     624  CodeGen/FixMain.cc \
     625  CodeGen/GenType.cc \
     626  CodeGen/OperatorTable.cc \
     627  Common/Assert.cc \
     628  Common/Eval.cc \
     629  Common/SemanticError.cc \
     630  Common/UniqueName.cc \
     631  Concurrency/Keywords.cc \
     632  ControlStruct/ForExprMutator.cc \
     633  ControlStruct/LabelFixer.cc \
     634  ControlStruct/LabelGenerator.cc \
     635  ControlStruct/MLEMutator.cc \
     636  ControlStruct/Mutate.cc \
     637  GenPoly/GenPoly.cc \
     638  GenPoly/Lvalue.cc \
     639  InitTweak/GenInit.cc \
     640  InitTweak/InitTweak.cc \
     641  Parser/LinkageSpec.cc \
     642  ResolvExpr/AdjustExprType.cc \
     643  ResolvExpr/Alternative.cc \
     644  ResolvExpr/AlternativeFinder.cc \
     645  ResolvExpr/ExplodedActual.cc \
     646  ResolvExpr/CastCost.cc \
     647  ResolvExpr/CommonType.cc \
     648  ResolvExpr/ConversionCost.cc \
     649  ResolvExpr/CurrentObject.cc \
     650  ResolvExpr/FindOpenVars.cc \
     651  ResolvExpr/Occurs.cc \
     652  ResolvExpr/PolyCost.cc \
     653  ResolvExpr/PtrsAssignable.cc \
     654  ResolvExpr/PtrsCastable.cc \
     655  ResolvExpr/RenameVars.cc \
     656  ResolvExpr/Resolver.cc \
     657  ResolvExpr/ResolveTypeof.cc \
     658  ResolvExpr/TypeEnvironment.cc \
     659  ResolvExpr/Unify.cc \
     660  SymTab/Autogen.cc \
     661  SymTab/FixFunction.cc \
     662  SymTab/Indexer.cc \
     663  SymTab/Mangler.cc \
     664  SymTab/Validate.cc \
     665  Tuples/Explode.cc \
     666  Tuples/TupleAssignment.cc \
     667  Tuples/TupleExpansion.cc \
     668  Validate/HandleAttributes.cc
     669
    513670all: $(BUILT_SOURCES)
    514671        $(MAKE) $(AM_MAKEFLAGS) all-am
     
    546703        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
    547704$(am__aclocal_m4_deps):
     705
     706clean-noinstLIBRARIES:
     707        -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
     708SymTab/$(am__dirstamp):
     709        @$(MKDIR_P) SymTab
     710        @: > SymTab/$(am__dirstamp)
     711SymTab/$(DEPDIR)/$(am__dirstamp):
     712        @$(MKDIR_P) SymTab/$(DEPDIR)
     713        @: > SymTab/$(DEPDIR)/$(am__dirstamp)
     714SymTab/Demangle.$(OBJEXT): SymTab/$(am__dirstamp) \
     715        SymTab/$(DEPDIR)/$(am__dirstamp)
     716SymTab/ManglerCommon.$(OBJEXT): SymTab/$(am__dirstamp) \
     717        SymTab/$(DEPDIR)/$(am__dirstamp)
     718SynTree/$(am__dirstamp):
     719        @$(MKDIR_P) SynTree
     720        @: > SynTree/$(am__dirstamp)
     721SynTree/$(DEPDIR)/$(am__dirstamp):
     722        @$(MKDIR_P) SynTree/$(DEPDIR)
     723        @: > SynTree/$(DEPDIR)/$(am__dirstamp)
     724SynTree/Type.$(OBJEXT): SynTree/$(am__dirstamp) \
     725        SynTree/$(DEPDIR)/$(am__dirstamp)
     726SynTree/VoidType.$(OBJEXT): SynTree/$(am__dirstamp) \
     727        SynTree/$(DEPDIR)/$(am__dirstamp)
     728SynTree/BasicType.$(OBJEXT): SynTree/$(am__dirstamp) \
     729        SynTree/$(DEPDIR)/$(am__dirstamp)
     730SynTree/PointerType.$(OBJEXT): SynTree/$(am__dirstamp) \
     731        SynTree/$(DEPDIR)/$(am__dirstamp)
     732SynTree/ArrayType.$(OBJEXT): SynTree/$(am__dirstamp) \
     733        SynTree/$(DEPDIR)/$(am__dirstamp)
     734SynTree/ReferenceType.$(OBJEXT): SynTree/$(am__dirstamp) \
     735        SynTree/$(DEPDIR)/$(am__dirstamp)
     736SynTree/FunctionType.$(OBJEXT): SynTree/$(am__dirstamp) \
     737        SynTree/$(DEPDIR)/$(am__dirstamp)
     738SynTree/ReferenceToType.$(OBJEXT): SynTree/$(am__dirstamp) \
     739        SynTree/$(DEPDIR)/$(am__dirstamp)
     740SynTree/TupleType.$(OBJEXT): SynTree/$(am__dirstamp) \
     741        SynTree/$(DEPDIR)/$(am__dirstamp)
     742SynTree/TypeofType.$(OBJEXT): SynTree/$(am__dirstamp) \
     743        SynTree/$(DEPDIR)/$(am__dirstamp)
     744SynTree/AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
     745        SynTree/$(DEPDIR)/$(am__dirstamp)
     746SynTree/VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
     747        SynTree/$(DEPDIR)/$(am__dirstamp)
     748SynTree/ZeroOneType.$(OBJEXT): SynTree/$(am__dirstamp) \
     749        SynTree/$(DEPDIR)/$(am__dirstamp)
     750SynTree/Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
     751        SynTree/$(DEPDIR)/$(am__dirstamp)
     752SynTree/Expression.$(OBJEXT): SynTree/$(am__dirstamp) \
     753        SynTree/$(DEPDIR)/$(am__dirstamp)
     754SynTree/TupleExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     755        SynTree/$(DEPDIR)/$(am__dirstamp)
     756SynTree/CommaExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     757        SynTree/$(DEPDIR)/$(am__dirstamp)
     758SynTree/TypeExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     759        SynTree/$(DEPDIR)/$(am__dirstamp)
     760SynTree/ApplicationExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     761        SynTree/$(DEPDIR)/$(am__dirstamp)
     762SynTree/AddressExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     763        SynTree/$(DEPDIR)/$(am__dirstamp)
     764SynTree/Statement.$(OBJEXT): SynTree/$(am__dirstamp) \
     765        SynTree/$(DEPDIR)/$(am__dirstamp)
     766SynTree/CompoundStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
     767        SynTree/$(DEPDIR)/$(am__dirstamp)
     768SynTree/DeclStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
     769        SynTree/$(DEPDIR)/$(am__dirstamp)
     770SynTree/Declaration.$(OBJEXT): SynTree/$(am__dirstamp) \
     771        SynTree/$(DEPDIR)/$(am__dirstamp)
     772SynTree/DeclarationWithType.$(OBJEXT): SynTree/$(am__dirstamp) \
     773        SynTree/$(DEPDIR)/$(am__dirstamp)
     774SynTree/ObjectDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     775        SynTree/$(DEPDIR)/$(am__dirstamp)
     776SynTree/FunctionDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     777        SynTree/$(DEPDIR)/$(am__dirstamp)
     778SynTree/AggregateDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     779        SynTree/$(DEPDIR)/$(am__dirstamp)
     780SynTree/NamedTypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     781        SynTree/$(DEPDIR)/$(am__dirstamp)
     782SynTree/TypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     783        SynTree/$(DEPDIR)/$(am__dirstamp)
     784SynTree/Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \
     785        SynTree/$(DEPDIR)/$(am__dirstamp)
     786SynTree/TypeSubstitution.$(OBJEXT): SynTree/$(am__dirstamp) \
     787        SynTree/$(DEPDIR)/$(am__dirstamp)
     788SynTree/Attribute.$(OBJEXT): SynTree/$(am__dirstamp) \
     789        SynTree/$(DEPDIR)/$(am__dirstamp)
     790SynTree/DeclReplacer.$(OBJEXT): SynTree/$(am__dirstamp) \
     791        SynTree/$(DEPDIR)/$(am__dirstamp)
     792CodeGen/$(am__dirstamp):
     793        @$(MKDIR_P) CodeGen
     794        @: > CodeGen/$(am__dirstamp)
     795CodeGen/$(DEPDIR)/$(am__dirstamp):
     796        @$(MKDIR_P) CodeGen/$(DEPDIR)
     797        @: > CodeGen/$(DEPDIR)/$(am__dirstamp)
     798CodeGen/CodeGenerator.$(OBJEXT): CodeGen/$(am__dirstamp) \
     799        CodeGen/$(DEPDIR)/$(am__dirstamp)
     800CodeGen/FixMain.$(OBJEXT): CodeGen/$(am__dirstamp) \
     801        CodeGen/$(DEPDIR)/$(am__dirstamp)
     802CodeGen/GenType.$(OBJEXT): CodeGen/$(am__dirstamp) \
     803        CodeGen/$(DEPDIR)/$(am__dirstamp)
     804CodeGen/OperatorTable.$(OBJEXT): CodeGen/$(am__dirstamp) \
     805        CodeGen/$(DEPDIR)/$(am__dirstamp)
     806Common/$(am__dirstamp):
     807        @$(MKDIR_P) Common
     808        @: > Common/$(am__dirstamp)
     809Common/$(DEPDIR)/$(am__dirstamp):
     810        @$(MKDIR_P) Common/$(DEPDIR)
     811        @: > Common/$(DEPDIR)/$(am__dirstamp)
     812Common/Assert.$(OBJEXT): Common/$(am__dirstamp) \
     813        Common/$(DEPDIR)/$(am__dirstamp)
     814Common/Eval.$(OBJEXT): Common/$(am__dirstamp) \
     815        Common/$(DEPDIR)/$(am__dirstamp)
     816Common/SemanticError.$(OBJEXT): Common/$(am__dirstamp) \
     817        Common/$(DEPDIR)/$(am__dirstamp)
     818Common/UniqueName.$(OBJEXT): Common/$(am__dirstamp) \
     819        Common/$(DEPDIR)/$(am__dirstamp)
     820Concurrency/$(am__dirstamp):
     821        @$(MKDIR_P) Concurrency
     822        @: > Concurrency/$(am__dirstamp)
     823Concurrency/$(DEPDIR)/$(am__dirstamp):
     824        @$(MKDIR_P) Concurrency/$(DEPDIR)
     825        @: > Concurrency/$(DEPDIR)/$(am__dirstamp)
     826Concurrency/Keywords.$(OBJEXT): Concurrency/$(am__dirstamp) \
     827        Concurrency/$(DEPDIR)/$(am__dirstamp)
     828ControlStruct/$(am__dirstamp):
     829        @$(MKDIR_P) ControlStruct
     830        @: > ControlStruct/$(am__dirstamp)
     831ControlStruct/$(DEPDIR)/$(am__dirstamp):
     832        @$(MKDIR_P) ControlStruct/$(DEPDIR)
     833        @: > ControlStruct/$(DEPDIR)/$(am__dirstamp)
     834ControlStruct/ForExprMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     835        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     836ControlStruct/LabelFixer.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     837        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     838ControlStruct/LabelGenerator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     839        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     840ControlStruct/MLEMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     841        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     842ControlStruct/Mutate.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     843        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     844GenPoly/$(am__dirstamp):
     845        @$(MKDIR_P) GenPoly
     846        @: > GenPoly/$(am__dirstamp)
     847GenPoly/$(DEPDIR)/$(am__dirstamp):
     848        @$(MKDIR_P) GenPoly/$(DEPDIR)
     849        @: > GenPoly/$(DEPDIR)/$(am__dirstamp)
     850GenPoly/GenPoly.$(OBJEXT): GenPoly/$(am__dirstamp) \
     851        GenPoly/$(DEPDIR)/$(am__dirstamp)
     852GenPoly/Lvalue.$(OBJEXT): GenPoly/$(am__dirstamp) \
     853        GenPoly/$(DEPDIR)/$(am__dirstamp)
     854InitTweak/$(am__dirstamp):
     855        @$(MKDIR_P) InitTweak
     856        @: > InitTweak/$(am__dirstamp)
     857InitTweak/$(DEPDIR)/$(am__dirstamp):
     858        @$(MKDIR_P) InitTweak/$(DEPDIR)
     859        @: > InitTweak/$(DEPDIR)/$(am__dirstamp)
     860InitTweak/GenInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
     861        InitTweak/$(DEPDIR)/$(am__dirstamp)
     862InitTweak/InitTweak.$(OBJEXT): InitTweak/$(am__dirstamp) \
     863        InitTweak/$(DEPDIR)/$(am__dirstamp)
     864Parser/$(am__dirstamp):
     865        @$(MKDIR_P) Parser
     866        @: > Parser/$(am__dirstamp)
     867Parser/$(DEPDIR)/$(am__dirstamp):
     868        @$(MKDIR_P) Parser/$(DEPDIR)
     869        @: > Parser/$(DEPDIR)/$(am__dirstamp)
     870Parser/LinkageSpec.$(OBJEXT): Parser/$(am__dirstamp) \
     871        Parser/$(DEPDIR)/$(am__dirstamp)
     872ResolvExpr/$(am__dirstamp):
     873        @$(MKDIR_P) ResolvExpr
     874        @: > ResolvExpr/$(am__dirstamp)
     875ResolvExpr/$(DEPDIR)/$(am__dirstamp):
     876        @$(MKDIR_P) ResolvExpr/$(DEPDIR)
     877        @: > ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     878ResolvExpr/AdjustExprType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     879        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     880ResolvExpr/Alternative.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     881        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     882ResolvExpr/AlternativeFinder.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     883        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     884ResolvExpr/ExplodedActual.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     885        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     886ResolvExpr/CastCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     887        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     888ResolvExpr/CommonType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     889        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     890ResolvExpr/ConversionCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     891        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     892ResolvExpr/CurrentObject.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     893        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     894ResolvExpr/FindOpenVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     895        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     896ResolvExpr/Occurs.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     897        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     898ResolvExpr/PolyCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     899        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     900ResolvExpr/PtrsAssignable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     901        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     902ResolvExpr/PtrsCastable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     903        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     904ResolvExpr/RenameVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     905        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     906ResolvExpr/Resolver.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     907        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     908ResolvExpr/ResolveTypeof.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     909        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     910ResolvExpr/TypeEnvironment.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     911        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     912ResolvExpr/Unify.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     913        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     914SymTab/Autogen.$(OBJEXT): SymTab/$(am__dirstamp) \
     915        SymTab/$(DEPDIR)/$(am__dirstamp)
     916SymTab/FixFunction.$(OBJEXT): SymTab/$(am__dirstamp) \
     917        SymTab/$(DEPDIR)/$(am__dirstamp)
     918SymTab/Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \
     919        SymTab/$(DEPDIR)/$(am__dirstamp)
     920SymTab/Mangler.$(OBJEXT): SymTab/$(am__dirstamp) \
     921        SymTab/$(DEPDIR)/$(am__dirstamp)
     922SymTab/Validate.$(OBJEXT): SymTab/$(am__dirstamp) \
     923        SymTab/$(DEPDIR)/$(am__dirstamp)
     924Tuples/$(am__dirstamp):
     925        @$(MKDIR_P) Tuples
     926        @: > Tuples/$(am__dirstamp)
     927Tuples/$(DEPDIR)/$(am__dirstamp):
     928        @$(MKDIR_P) Tuples/$(DEPDIR)
     929        @: > Tuples/$(DEPDIR)/$(am__dirstamp)
     930Tuples/Explode.$(OBJEXT): Tuples/$(am__dirstamp) \
     931        Tuples/$(DEPDIR)/$(am__dirstamp)
     932Tuples/TupleAssignment.$(OBJEXT): Tuples/$(am__dirstamp) \
     933        Tuples/$(DEPDIR)/$(am__dirstamp)
     934Tuples/TupleExpansion.$(OBJEXT): Tuples/$(am__dirstamp) \
     935        Tuples/$(DEPDIR)/$(am__dirstamp)
     936Validate/$(am__dirstamp):
     937        @$(MKDIR_P) Validate
     938        @: > Validate/$(am__dirstamp)
     939Validate/$(DEPDIR)/$(am__dirstamp):
     940        @$(MKDIR_P) Validate/$(DEPDIR)
     941        @: > Validate/$(DEPDIR)/$(am__dirstamp)
     942Validate/HandleAttributes.$(OBJEXT): Validate/$(am__dirstamp) \
     943        Validate/$(DEPDIR)/$(am__dirstamp)
     944
     945libdemangle.a: $(libdemangle_a_OBJECTS) $(libdemangle_a_DEPENDENCIES) $(EXTRA_libdemangle_a_DEPENDENCIES)
     946        $(AM_V_at)-rm -f libdemangle.a
     947        $(AM_V_AR)$(libdemangle_a_AR) libdemangle.a $(libdemangle_a_OBJECTS) $(libdemangle_a_LIBADD)
     948        $(AM_V_at)$(RANLIB) libdemangle.a
    548949install-cfa_cpplibPROGRAMS: $(cfa_cpplib_PROGRAMS)
    549950        @$(NORMAL_INSTALL)
     
    588989clean-cfa_cpplibPROGRAMS:
    589990        -test -z "$(cfa_cpplib_PROGRAMS)" || rm -f $(cfa_cpplib_PROGRAMS)
    590 CodeGen/$(am__dirstamp):
    591         @$(MKDIR_P) CodeGen
    592         @: > CodeGen/$(am__dirstamp)
    593 CodeGen/$(DEPDIR)/$(am__dirstamp):
    594         @$(MKDIR_P) CodeGen/$(DEPDIR)
    595         @: > CodeGen/$(DEPDIR)/$(am__dirstamp)
    596991CodeGen/Generate.$(OBJEXT): CodeGen/$(am__dirstamp) \
    597992        CodeGen/$(DEPDIR)/$(am__dirstamp)
    598 CodeGen/CodeGenerator.$(OBJEXT): CodeGen/$(am__dirstamp) \
    599         CodeGen/$(DEPDIR)/$(am__dirstamp)
    600 CodeGen/GenType.$(OBJEXT): CodeGen/$(am__dirstamp) \
    601         CodeGen/$(DEPDIR)/$(am__dirstamp)
    602993CodeGen/FixNames.$(OBJEXT): CodeGen/$(am__dirstamp) \
    603         CodeGen/$(DEPDIR)/$(am__dirstamp)
    604 CodeGen/FixMain.$(OBJEXT): CodeGen/$(am__dirstamp) \
    605         CodeGen/$(DEPDIR)/$(am__dirstamp)
    606 CodeGen/OperatorTable.$(OBJEXT): CodeGen/$(am__dirstamp) \
    607994        CodeGen/$(DEPDIR)/$(am__dirstamp)
    608995CodeTools/$(am__dirstamp):
     
    6141001CodeTools/DeclStats.$(OBJEXT): CodeTools/$(am__dirstamp) \
    6151002        CodeTools/$(DEPDIR)/$(am__dirstamp)
     1003CodeTools/ResolvProtoDump.$(OBJEXT): CodeTools/$(am__dirstamp) \
     1004        CodeTools/$(DEPDIR)/$(am__dirstamp)
    6161005CodeTools/TrackLoc.$(OBJEXT): CodeTools/$(am__dirstamp) \
    6171006        CodeTools/$(DEPDIR)/$(am__dirstamp)
    618 Concurrency/$(am__dirstamp):
    619         @$(MKDIR_P) Concurrency
    620         @: > Concurrency/$(am__dirstamp)
    621 Concurrency/$(DEPDIR)/$(am__dirstamp):
    622         @$(MKDIR_P) Concurrency/$(DEPDIR)
    623         @: > Concurrency/$(DEPDIR)/$(am__dirstamp)
    624 Concurrency/Keywords.$(OBJEXT): Concurrency/$(am__dirstamp) \
    625         Concurrency/$(DEPDIR)/$(am__dirstamp)
    6261007Concurrency/Waitfor.$(OBJEXT): Concurrency/$(am__dirstamp) \
    6271008        Concurrency/$(DEPDIR)/$(am__dirstamp)
    628 Common/$(am__dirstamp):
    629         @$(MKDIR_P) Common
    630         @: > Common/$(am__dirstamp)
    631 Common/$(DEPDIR)/$(am__dirstamp):
    632         @$(MKDIR_P) Common/$(DEPDIR)
    633         @: > Common/$(DEPDIR)/$(am__dirstamp)
    634 Common/SemanticError.$(OBJEXT): Common/$(am__dirstamp) \
    635         Common/$(DEPDIR)/$(am__dirstamp)
    636 Common/UniqueName.$(OBJEXT): Common/$(am__dirstamp) \
    637         Common/$(DEPDIR)/$(am__dirstamp)
    6381009Common/DebugMalloc.$(OBJEXT): Common/$(am__dirstamp) \
    639         Common/$(DEPDIR)/$(am__dirstamp)
    640 Common/Assert.$(OBJEXT): Common/$(am__dirstamp) \
    6411010        Common/$(DEPDIR)/$(am__dirstamp)
    6421011Common/Heap.$(OBJEXT): Common/$(am__dirstamp) \
    6431012        Common/$(DEPDIR)/$(am__dirstamp)
    644 Common/Eval.$(OBJEXT): Common/$(am__dirstamp) \
    645         Common/$(DEPDIR)/$(am__dirstamp)
    646 ControlStruct/$(am__dirstamp):
    647         @$(MKDIR_P) ControlStruct
    648         @: > ControlStruct/$(am__dirstamp)
    649 ControlStruct/$(DEPDIR)/$(am__dirstamp):
    650         @$(MKDIR_P) ControlStruct/$(DEPDIR)
    651         @: > ControlStruct/$(DEPDIR)/$(am__dirstamp)
    652 ControlStruct/LabelGenerator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
    653         ControlStruct/$(DEPDIR)/$(am__dirstamp)
    654 ControlStruct/LabelFixer.$(OBJEXT): ControlStruct/$(am__dirstamp) \
    655         ControlStruct/$(DEPDIR)/$(am__dirstamp)
    656 ControlStruct/MLEMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
    657         ControlStruct/$(DEPDIR)/$(am__dirstamp)
    658 ControlStruct/Mutate.$(OBJEXT): ControlStruct/$(am__dirstamp) \
    659         ControlStruct/$(DEPDIR)/$(am__dirstamp)
    660 ControlStruct/ForExprMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
    661         ControlStruct/$(DEPDIR)/$(am__dirstamp)
    6621013ControlStruct/ExceptTranslate.$(OBJEXT):  \
    6631014        ControlStruct/$(am__dirstamp) \
    6641015        ControlStruct/$(DEPDIR)/$(am__dirstamp)
    665 GenPoly/$(am__dirstamp):
    666         @$(MKDIR_P) GenPoly
    667         @: > GenPoly/$(am__dirstamp)
    668 GenPoly/$(DEPDIR)/$(am__dirstamp):
    669         @$(MKDIR_P) GenPoly/$(DEPDIR)
    670         @: > GenPoly/$(DEPDIR)/$(am__dirstamp)
    6711016GenPoly/Box.$(OBJEXT): GenPoly/$(am__dirstamp) \
    6721017        GenPoly/$(DEPDIR)/$(am__dirstamp)
    673 GenPoly/GenPoly.$(OBJEXT): GenPoly/$(am__dirstamp) \
    674         GenPoly/$(DEPDIR)/$(am__dirstamp)
    6751018GenPoly/ScrubTyVars.$(OBJEXT): GenPoly/$(am__dirstamp) \
    676         GenPoly/$(DEPDIR)/$(am__dirstamp)
    677 GenPoly/Lvalue.$(OBJEXT): GenPoly/$(am__dirstamp) \
    6781019        GenPoly/$(DEPDIR)/$(am__dirstamp)
    6791020GenPoly/Specialize.$(OBJEXT): GenPoly/$(am__dirstamp) \
     
    6831024GenPoly/InstantiateGeneric.$(OBJEXT): GenPoly/$(am__dirstamp) \
    6841025        GenPoly/$(DEPDIR)/$(am__dirstamp)
    685 InitTweak/$(am__dirstamp):
    686         @$(MKDIR_P) InitTweak
    687         @: > InitTweak/$(am__dirstamp)
    688 InitTweak/$(DEPDIR)/$(am__dirstamp):
    689         @$(MKDIR_P) InitTweak/$(DEPDIR)
    690         @: > InitTweak/$(DEPDIR)/$(am__dirstamp)
    691 InitTweak/GenInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
    692         InitTweak/$(DEPDIR)/$(am__dirstamp)
    6931026InitTweak/FixInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
    6941027        InitTweak/$(DEPDIR)/$(am__dirstamp)
    6951028InitTweak/FixGlobalInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
    6961029        InitTweak/$(DEPDIR)/$(am__dirstamp)
    697 InitTweak/InitTweak.$(OBJEXT): InitTweak/$(am__dirstamp) \
    698         InitTweak/$(DEPDIR)/$(am__dirstamp)
    6991030Parser/parser.hh: Parser/parser.cc
    7001031        @if test ! -f $@; then rm -f Parser/parser.cc; else :; fi
    7011032        @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) Parser/parser.cc; else :; fi
    702 Parser/$(am__dirstamp):
    703         @$(MKDIR_P) Parser
    704         @: > Parser/$(am__dirstamp)
    705 Parser/$(DEPDIR)/$(am__dirstamp):
    706         @$(MKDIR_P) Parser/$(DEPDIR)
    707         @: > Parser/$(DEPDIR)/$(am__dirstamp)
    7081033Parser/parser.$(OBJEXT): Parser/$(am__dirstamp) \
    7091034        Parser/$(DEPDIR)/$(am__dirstamp)
     
    7241049Parser/TypeData.$(OBJEXT): Parser/$(am__dirstamp) \
    7251050        Parser/$(DEPDIR)/$(am__dirstamp)
    726 Parser/LinkageSpec.$(OBJEXT): Parser/$(am__dirstamp) \
    727         Parser/$(DEPDIR)/$(am__dirstamp)
    7281051Parser/parserutility.$(OBJEXT): Parser/$(am__dirstamp) \
    7291052        Parser/$(DEPDIR)/$(am__dirstamp)
    730 ResolvExpr/$(am__dirstamp):
    731         @$(MKDIR_P) ResolvExpr
    732         @: > ResolvExpr/$(am__dirstamp)
    733 ResolvExpr/$(DEPDIR)/$(am__dirstamp):
    734         @$(MKDIR_P) ResolvExpr/$(DEPDIR)
    735         @: > ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    736 ResolvExpr/AlternativeFinder.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    737         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    738 ResolvExpr/Alternative.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    739         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    740 ResolvExpr/Unify.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    741         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    742 ResolvExpr/PtrsAssignable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    743         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    744 ResolvExpr/CommonType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    745         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    746 ResolvExpr/ConversionCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    747         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    748 ResolvExpr/CastCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    749         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    750 ResolvExpr/PtrsCastable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    751         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    752 ResolvExpr/AdjustExprType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    753         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    7541053ResolvExpr/AlternativePrinter.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    7551054        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    756 ResolvExpr/Resolver.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    757         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    758 ResolvExpr/ResolveTypeof.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    759         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    760 ResolvExpr/RenameVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    761         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    762 ResolvExpr/FindOpenVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    763         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    764 ResolvExpr/PolyCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    765         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    766 ResolvExpr/Occurs.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    767         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    768 ResolvExpr/TypeEnvironment.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    769         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    770 ResolvExpr/CurrentObject.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    771         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    772 ResolvExpr/ExplodedActual.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    773         ResolvExpr/$(DEPDIR)/$(am__dirstamp)
    774 SymTab/$(am__dirstamp):
    775         @$(MKDIR_P) SymTab
    776         @: > SymTab/$(am__dirstamp)
    777 SymTab/$(DEPDIR)/$(am__dirstamp):
    778         @$(MKDIR_P) SymTab/$(DEPDIR)
    779         @: > SymTab/$(DEPDIR)/$(am__dirstamp)
    780 SymTab/Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \
    781         SymTab/$(DEPDIR)/$(am__dirstamp)
    782 SymTab/Mangler.$(OBJEXT): SymTab/$(am__dirstamp) \
    783         SymTab/$(DEPDIR)/$(am__dirstamp)
    784 SymTab/Validate.$(OBJEXT): SymTab/$(am__dirstamp) \
    785         SymTab/$(DEPDIR)/$(am__dirstamp)
    786 SymTab/FixFunction.$(OBJEXT): SymTab/$(am__dirstamp) \
    787         SymTab/$(DEPDIR)/$(am__dirstamp)
    788 SymTab/Autogen.$(OBJEXT): SymTab/$(am__dirstamp) \
    789         SymTab/$(DEPDIR)/$(am__dirstamp)
    790 SynTree/$(am__dirstamp):
    791         @$(MKDIR_P) SynTree
    792         @: > SynTree/$(am__dirstamp)
    793 SynTree/$(DEPDIR)/$(am__dirstamp):
    794         @$(MKDIR_P) SynTree/$(DEPDIR)
    795         @: > SynTree/$(DEPDIR)/$(am__dirstamp)
    796 SynTree/Type.$(OBJEXT): SynTree/$(am__dirstamp) \
    797         SynTree/$(DEPDIR)/$(am__dirstamp)
    798 SynTree/VoidType.$(OBJEXT): SynTree/$(am__dirstamp) \
    799         SynTree/$(DEPDIR)/$(am__dirstamp)
    800 SynTree/BasicType.$(OBJEXT): SynTree/$(am__dirstamp) \
    801         SynTree/$(DEPDIR)/$(am__dirstamp)
    802 SynTree/PointerType.$(OBJEXT): SynTree/$(am__dirstamp) \
    803         SynTree/$(DEPDIR)/$(am__dirstamp)
    804 SynTree/ArrayType.$(OBJEXT): SynTree/$(am__dirstamp) \
    805         SynTree/$(DEPDIR)/$(am__dirstamp)
    806 SynTree/ReferenceType.$(OBJEXT): SynTree/$(am__dirstamp) \
    807         SynTree/$(DEPDIR)/$(am__dirstamp)
    808 SynTree/FunctionType.$(OBJEXT): SynTree/$(am__dirstamp) \
    809         SynTree/$(DEPDIR)/$(am__dirstamp)
    810 SynTree/ReferenceToType.$(OBJEXT): SynTree/$(am__dirstamp) \
    811         SynTree/$(DEPDIR)/$(am__dirstamp)
    812 SynTree/TupleType.$(OBJEXT): SynTree/$(am__dirstamp) \
    813         SynTree/$(DEPDIR)/$(am__dirstamp)
    814 SynTree/TypeofType.$(OBJEXT): SynTree/$(am__dirstamp) \
    815         SynTree/$(DEPDIR)/$(am__dirstamp)
    816 SynTree/AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
    817         SynTree/$(DEPDIR)/$(am__dirstamp)
    818 SynTree/VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
    819         SynTree/$(DEPDIR)/$(am__dirstamp)
    820 SynTree/ZeroOneType.$(OBJEXT): SynTree/$(am__dirstamp) \
    821         SynTree/$(DEPDIR)/$(am__dirstamp)
    822 SynTree/Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
    823         SynTree/$(DEPDIR)/$(am__dirstamp)
    824 SynTree/Expression.$(OBJEXT): SynTree/$(am__dirstamp) \
    825         SynTree/$(DEPDIR)/$(am__dirstamp)
    826 SynTree/TupleExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
    827         SynTree/$(DEPDIR)/$(am__dirstamp)
    828 SynTree/CommaExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
    829         SynTree/$(DEPDIR)/$(am__dirstamp)
    830 SynTree/TypeExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
    831         SynTree/$(DEPDIR)/$(am__dirstamp)
    832 SynTree/ApplicationExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
    833         SynTree/$(DEPDIR)/$(am__dirstamp)
    834 SynTree/AddressExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
    835         SynTree/$(DEPDIR)/$(am__dirstamp)
    836 SynTree/Statement.$(OBJEXT): SynTree/$(am__dirstamp) \
    837         SynTree/$(DEPDIR)/$(am__dirstamp)
    838 SynTree/CompoundStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
    839         SynTree/$(DEPDIR)/$(am__dirstamp)
    840 SynTree/DeclStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
    841         SynTree/$(DEPDIR)/$(am__dirstamp)
    842 SynTree/Declaration.$(OBJEXT): SynTree/$(am__dirstamp) \
    843         SynTree/$(DEPDIR)/$(am__dirstamp)
    844 SynTree/DeclarationWithType.$(OBJEXT): SynTree/$(am__dirstamp) \
    845         SynTree/$(DEPDIR)/$(am__dirstamp)
    846 SynTree/ObjectDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
    847         SynTree/$(DEPDIR)/$(am__dirstamp)
    848 SynTree/FunctionDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
    849         SynTree/$(DEPDIR)/$(am__dirstamp)
    850 SynTree/AggregateDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
    851         SynTree/$(DEPDIR)/$(am__dirstamp)
    852 SynTree/NamedTypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
    853         SynTree/$(DEPDIR)/$(am__dirstamp)
    854 SynTree/TypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
    855         SynTree/$(DEPDIR)/$(am__dirstamp)
    856 SynTree/Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \
    857         SynTree/$(DEPDIR)/$(am__dirstamp)
    858 SynTree/TypeSubstitution.$(OBJEXT): SynTree/$(am__dirstamp) \
    859         SynTree/$(DEPDIR)/$(am__dirstamp)
    860 SynTree/Attribute.$(OBJEXT): SynTree/$(am__dirstamp) \
    861         SynTree/$(DEPDIR)/$(am__dirstamp)
    862 SynTree/DeclReplacer.$(OBJEXT): SynTree/$(am__dirstamp) \
    863         SynTree/$(DEPDIR)/$(am__dirstamp)
    864 Tuples/$(am__dirstamp):
    865         @$(MKDIR_P) Tuples
    866         @: > Tuples/$(am__dirstamp)
    867 Tuples/$(DEPDIR)/$(am__dirstamp):
    868         @$(MKDIR_P) Tuples/$(DEPDIR)
    869         @: > Tuples/$(DEPDIR)/$(am__dirstamp)
    870 Tuples/TupleAssignment.$(OBJEXT): Tuples/$(am__dirstamp) \
    871         Tuples/$(DEPDIR)/$(am__dirstamp)
    872 Tuples/TupleExpansion.$(OBJEXT): Tuples/$(am__dirstamp) \
    873         Tuples/$(DEPDIR)/$(am__dirstamp)
    874 Tuples/Explode.$(OBJEXT): Tuples/$(am__dirstamp) \
    875         Tuples/$(DEPDIR)/$(am__dirstamp)
    876 Validate/$(am__dirstamp):
    877         @$(MKDIR_P) Validate
    878         @: > Validate/$(am__dirstamp)
    879 Validate/$(DEPDIR)/$(am__dirstamp):
    880         @$(MKDIR_P) Validate/$(DEPDIR)
    881         @: > Validate/$(DEPDIR)/$(am__dirstamp)
    882 Validate/HandleAttributes.$(OBJEXT): Validate/$(am__dirstamp) \
    883         Validate/$(DEPDIR)/$(am__dirstamp)
    8841055Virtual/$(am__dirstamp):
    8851056        @$(MKDIR_P) Virtual
     
    8971068        @rm -f ../driver/cfa-cpp$(EXEEXT)
    8981069        $(AM_V_CXXLD)$(CXXLINK) $(___driver_cfa_cpp_OBJECTS) $(___driver_cfa_cpp_LDADD) $(LIBS)
     1070SymTab/demangler.$(OBJEXT): SymTab/$(am__dirstamp) \
     1071        SymTab/$(DEPDIR)/$(am__dirstamp)
     1072
     1073demangler$(EXEEXT): $(demangler_OBJECTS) $(demangler_DEPENDENCIES) $(EXTRA_demangler_DEPENDENCIES)
     1074        @rm -f demangler$(EXEEXT)
     1075        $(AM_V_CXXLD)$(CXXLINK) $(demangler_OBJECTS) $(demangler_LDADD) $(LIBS)
    8991076
    9001077mostlyclean-compile:
     
    9281105@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/OperatorTable.Po@am__quote@
    9291106@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/DeclStats.Po@am__quote@
     1107@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/ResolvProtoDump.Po@am__quote@
    9301108@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/TrackLoc.Po@am__quote@
    9311109@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/Assert.Po@am__quote@
     
    9851163@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/Unify.Po@am__quote@
    9861164@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Autogen.Po@am__quote@
     1165@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Demangle.Po@am__quote@
    9871166@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/FixFunction.Po@am__quote@
    9881167@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Indexer.Po@am__quote@
    9891168@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Mangler.Po@am__quote@
     1169@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/ManglerCommon.Po@am__quote@
    9901170@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Validate.Po@am__quote@
     1171@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/demangler.Po@am__quote@
    9911172@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/AddressExpr.Po@am__quote@
    9921173@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/AggregateDecl.Po@am__quote@
     
    11361317check: $(BUILT_SOURCES)
    11371318        $(MAKE) $(AM_MAKEFLAGS) check-am
    1138 all-am: Makefile $(PROGRAMS)
     1319all-am: Makefile $(LIBRARIES) $(PROGRAMS)
    11391320installdirs:
    11401321        for dir in "$(DESTDIR)$(cfa_cpplibdir)"; do \
     
    12091390clean: clean-am
    12101391
    1211 clean-am: clean-cfa_cpplibPROGRAMS clean-generic mostlyclean-am
     1392clean-am: clean-cfa_cpplibPROGRAMS clean-generic clean-noinstLIBRARIES \
     1393        mostlyclean-am
    12121394
    12131395distclean: distclean-am
     
    12791461
    12801462.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
    1281         clean-cfa_cpplibPROGRAMS clean-generic cscopelist-am ctags \
    1282         ctags-am distclean distclean-compile distclean-generic \
    1283         distclean-tags distdir dvi dvi-am html html-am info info-am \
    1284         install install-am install-cfa_cpplibPROGRAMS install-data \
    1285         install-data-am install-dvi install-dvi-am install-exec \
    1286         install-exec-am install-html install-html-am install-info \
    1287         install-info-am install-man install-pdf install-pdf-am \
    1288         install-ps install-ps-am install-strip installcheck \
    1289         installcheck-am installdirs maintainer-clean \
    1290         maintainer-clean-generic mostlyclean mostlyclean-compile \
    1291         mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
    1292         uninstall-am uninstall-cfa_cpplibPROGRAMS
     1463        clean-cfa_cpplibPROGRAMS clean-generic clean-noinstLIBRARIES \
     1464        cscopelist-am ctags ctags-am distclean distclean-compile \
     1465        distclean-generic distclean-tags distdir dvi dvi-am html \
     1466        html-am info info-am install install-am \
     1467        install-cfa_cpplibPROGRAMS install-data install-data-am \
     1468        install-dvi install-dvi-am install-exec install-exec-am \
     1469        install-html install-html-am install-info install-info-am \
     1470        install-man install-pdf install-pdf-am install-ps \
     1471        install-ps-am install-strip installcheck installcheck-am \
     1472        installdirs maintainer-clean maintainer-clean-generic \
     1473        mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
     1474        ps ps-am tags tags-am uninstall uninstall-am \
     1475        uninstall-cfa_cpplibPROGRAMS
    12931476
    12941477.PRECIOUS: Makefile
  • src/Parser/LinkageSpec.cc

    r341bb80 r6d44da1  
    1010// Created On       : Sat May 16 13:22:09 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Jul  7 11:11:00 2017
    13 // Update Count     : 25
     12// Last Modified On : Thr Spt 12 15:59:00 2018
     13// Update Count     : 26
    1414//
    1515
     
    2323
    2424namespace LinkageSpec {
    25 
    26 Spec linkageCheck( CodeLocation location, const string * spec ) {
    27         assert( spec );
    28         unique_ptr<const string> guard( spec ); // allocated by lexer
    29         if ( *spec == "\"Cforall\"" ) {
    30                 return Cforall;
    31         } else if ( *spec == "\"C\"" ) {
    32                 return C;
    33         } else if ( *spec == "\"BuiltinC\"" ) {
    34                 return BuiltinC;
    35         } else {
    36                 SemanticError( location, "Invalid linkage specifier " + *spec );
    37         } // if
    38 }
    3925
    4026Spec linkageUpdate( CodeLocation location, Spec old_spec, const string * cmd ) {
  • src/Parser/LinkageSpec.h

    r341bb80 r6d44da1  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:24:28 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul  2 07:46:49 2018
    13 // Update Count     : 16
     11// Last Modified By : Andrew Beach
     12// Last Modified On : Thr Spt 13 15:59:00 2018
     13// Update Count     : 17
    1414//
    1515
     
    4141
    4242
    43         Spec linkageCheck( CodeLocation location, const std::string * );
    44         // Returns the Spec with the given name (limited to C, Cforall & BuiltinC)
    4543        Spec linkageUpdate( CodeLocation location, Spec old_spec, const std::string * cmd );
    4644        /* If cmd = "C" returns a Spec that is old_spec with is_mangled = false
  • src/Parser/lex.ll

    r341bb80 r6d44da1  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Wed Aug  8 17:23:17 2018
    13  * Update Count     : 685
     12 * Last Modified On : Wed Aug 29 15:02:41 2018
     13 * Update Count     : 686
    1414 */
    1515
     
    410410">>="                   { NAMEDOP_RETURN(RSassign); }
    411411
    412 "~="                    { NAMEDOP_RETURN(Erange); }                             // CFA
    413412"@="                    { NAMEDOP_RETURN(ATassign); }                   // CFA
     413"~="                    { NAMEDOP_RETURN(ErangeUpEq); }                 // CFA
     414"-~"                    { NAMEDOP_RETURN(ErangeDown); }                 // CFA
     415"-~="                   { NAMEDOP_RETURN(ErangeDownEq); }               // CFA
    414416
    415417                                /* CFA, operator identifier */
  • src/Parser/parser.yy

    r341bb80 r6d44da1  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Aug  8 17:50:07 2018
    13 // Update Count     : 3998
     12// Last Modified On : Thu Aug 30 17:02:25 2018
     13// Update Count     : 4029
    1414//
    1515
     
    186186} // fieldDecl
    187187
     188ExpressionNode *forInc( const OperKinds op ) {
     189        return new ExpressionNode( build_constantInteger( *new string( op == OperKinds::LThan || op == OperKinds::LEThan ? "1" : "-1" ) ) );
     190} // forInc
     191
    188192ForCtrl * forCtrl( ExpressionNode * type, string * index, ExpressionNode * start, enum OperKinds compop, ExpressionNode * comp, ExpressionNode * inc ) {
     193        ConstantExpr *constant = dynamic_cast<ConstantExpr *>(type->get_expr());
     194        if ( constant && (constant->get_constant()->get_value() == "0" || constant->get_constant()->get_value() == "1") ) {
     195        type = new ExpressionNode( new CastExpr( maybeMoveBuild< Expression >(type), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) ) );
     196        } // if
    189197        return new ForCtrl(
    190198                distAttr( DeclarationNode::newTypeof( type ), DeclarationNode::newName( index )->addInitializer( new InitializerNode( start ) ) ),
     
    214222
    215223// Types declaration for productions
    216 %union
    217 {
     224%union {
    218225        Token tok;
    219226        ParseNode * pn;
     
    290297%token ANDassign        ERassign        ORassign                                // &=   ^=      |=
    291298
    292 %token Erange                                                                                   // ~=
     299%token ErangeUpEq       ErangeDown      ErangeDownEq                    // ~=   -~      -~=
    293300%token ATassign                                                                                 // @=
    294301
     
    11381145                                $$ = new ForCtrl( (ExpressionNode * )nullptr, (ExpressionNode * )nullptr, (ExpressionNode * )nullptr );
    11391146                        } else {
    1140                                 $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ), OperKinds::LThan, $1->clone(),
    1141                                                          new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) );
     1147                                $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
     1148                                                          OperKinds::LThan, $1->clone(), forInc( OperKinds::LThan ) );
    11421149                        } // if
    11431150                }
    11441151        | constant_expression inclexcl constant_expression      // CFA
    1145                 { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
     1152                { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, forInc( $2 ) ); }
    11461153        | constant_expression inclexcl constant_expression '~' constant_expression // CFA
    11471154                { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, $5 ); }
     
    11541161                        } else {
    11551162                                if ( NameExpr *identifier = dynamic_cast<NameExpr *>($1->get_expr()) ) {
    1156                                         $$ = forCtrl( $3, new string( identifier->name ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ), OperKinds::LThan, $3->clone(),
    1157                                                                  new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) );
     1163                                        $$ = forCtrl( $3, new string( identifier->name ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
     1164                                                                  OperKinds::LThan, $3->clone(), forInc( OperKinds::LThan ) );
    11581165                                } else {
    11591166                                        SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
     
    11671174                        } else {
    11681175                                if ( NameExpr *identifier = dynamic_cast<NameExpr *>($1->get_expr()) ) {
    1169                                         $$ = forCtrl( $3, new string( identifier->name ), $3->clone(), $4, $5, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) );
     1176                                        $$ = forCtrl( $3, new string( identifier->name ), $3->clone(), $4, $5, forInc( $4 ) );
    11701177                                } else {
    11711178                                        SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
     
    11941201        '~'
    11951202                { $$ = OperKinds::LThan; }
    1196         | Erange
     1203        | ErangeUpEq
    11971204                { $$ = OperKinds::LEThan; }
     1205        | ErangeDown
     1206                { $$ = OperKinds::GThan; }
     1207        | ErangeDownEq
     1208                { $$ = OperKinds::GEThan; }
    11981209        ;
    11991210
  • src/ResolvExpr/AlternativeFinder.cc

    r341bb80 r6d44da1  
    2525#include <vector>                  // for vector
    2626
     27#include "CompilationState.h"      // for resolvep
    2728#include "Alternative.h"           // for AltList, Alternative
    2829#include "AlternativeFinder.h"
     
    4950#include "typeops.h"               // for adjustExprType, polyCost, castCost
    5051
    51 extern bool resolvep;
    5252#define PRINT( text ) if ( resolvep ) { text }
    5353//#define DEBUG_COST
  • src/ResolvExpr/Resolver.cc

    r341bb80 r6d44da1  
    3030#include "RenameVars.h"                  // for RenameVars, global_renamer
    3131#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
    32 #include "ResolveTypeof.h"               // for resolveTypeof
    3332#include "Resolver.h"
    3433#include "SymTab/Autogen.h"              // for SizeType
     
    5756                void postvisit( FunctionDecl *functionDecl );
    5857                void previsit( ObjectDecl *objectDecll );
    59                 void previsit( TypeDecl *typeDecl );
    6058                void previsit( EnumDecl * enumDecl );
    6159                void previsit( StaticAssertDecl * assertDecl );
     
    7775                void previsit( CatchStmt *catchStmt );
    7876                void previsit( WaitForStmt * stmt );
    79                 void previsit( WithStmt * withStmt );
    8077
    8178                void previsit( SingleInit *singleInit );
     
    8885                void handlePtrType( PtrType * type );
    8986
    90                 void resolveWithExprs( std::list< Expression * > & withExprs, std::list< Statement * > & newStmts );
    9187                void fallbackInit( ConstructorInit * ctorInit );
    9288
     
    9490                CurrentObject currentObject = nullptr;
    9591                bool inEnumDecl = false;
     92        };
     93
     94        struct ResolveWithExprs : public WithIndexer, public WithGuards, public WithVisitorRef<ResolveWithExprs>, public WithShortCircuiting, public WithStmtsToAdd {
     95                void previsit( FunctionDecl * );
     96                void previsit( WithStmt * );
     97
     98                void resolveWithExprs( std::list< Expression * > & withExprs, std::list< Statement * > & newStmts );
    9699        };
    97100
     
    302305        }
    303306
     307
     308        bool isStructOrUnion( const Alternative & alt ) {
     309                Type * t = alt.expr->result->stripReferences();
     310                return dynamic_cast< StructInstType * >( t ) || dynamic_cast< UnionInstType * >( t );
     311        }
     312
     313        void resolveWithExprs( std::list< Declaration * > & translationUnit ) {
     314                PassVisitor<ResolveWithExprs> resolver;
     315                acceptAll( translationUnit, resolver );
     316        }
     317
     318        void ResolveWithExprs::resolveWithExprs( std::list< Expression * > & withExprs, std::list< Statement * > & newStmts ) {
     319                for ( Expression *& expr : withExprs )  {
     320                        // only struct- and union-typed expressions are viable candidates
     321                        findKindExpression( expr, indexer, "with statement", isStructOrUnion );
     322
     323                        // if with expression might be impure, create a temporary so that it is evaluated once
     324                        if ( Tuples::maybeImpure( expr ) ) {
     325                                static UniqueName tmpNamer( "_with_tmp_" );
     326                                ObjectDecl * tmp = ObjectDecl::newObject( tmpNamer.newName(), expr->result->clone(), new SingleInit( expr ) );
     327                                expr = new VariableExpr( tmp );
     328                                newStmts.push_back( new DeclStmt( tmp ) );
     329                                if ( InitTweak::isConstructable( tmp->type ) ) {
     330                                        // generate ctor/dtor and resolve them
     331                                        tmp->init = InitTweak::genCtorInit( tmp );
     332                                        tmp->accept( *visitor );
     333                                }
     334                        }
     335                }
     336        }
     337
     338        void ResolveWithExprs::previsit( WithStmt * withStmt ) {
     339                resolveWithExprs( withStmt->exprs, stmtsToAddBefore );
     340        }
     341
     342        void ResolveWithExprs::previsit( FunctionDecl * functionDecl ) {
     343                {
     344                        // resolve with-exprs with parameters in scope and add any newly generated declarations to the
     345                        // front of the function body.
     346                        auto guard = makeFuncGuard( [this]() { indexer.enterScope(); }, [this](){ indexer.leaveScope(); } );
     347                        indexer.addFunctionType( functionDecl->type );
     348                        std::list< Statement * > newStmts;
     349                        resolveWithExprs( functionDecl->withExprs, newStmts );
     350                        if ( functionDecl->statements ) {
     351                                functionDecl->statements->kids.splice( functionDecl->statements->kids.begin(), newStmts );
     352                        } else {
     353                                assertf( functionDecl->withExprs.empty() && newStmts.empty(), "Function %s without a body has with-clause and/or generated with declarations.", functionDecl->name.c_str() );
     354                        }
     355                }
     356        }
     357
    304358        void Resolver::previsit( ObjectDecl *objectDecl ) {
    305                 Type *new_type = resolveTypeof( objectDecl->get_type(), indexer );
    306                 objectDecl->set_type( new_type );
    307359                // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable
    308360                // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes
     
    334386        }
    335387
    336         void Resolver::previsit( TypeDecl *typeDecl ) {
    337                 if ( typeDecl->get_base() ) {
    338                         Type *new_type = resolveTypeof( typeDecl->get_base(), indexer );
    339                         typeDecl->set_base( new_type );
    340                 } // if
    341         }
    342 
    343388        void Resolver::previsit( FunctionDecl *functionDecl ) {
    344389#if 0
     
    347392                std::cerr << std::endl;
    348393#endif
    349                 Type *new_type = resolveTypeof( functionDecl->type, indexer );
    350                 functionDecl->set_type( new_type );
    351394                GuardValue( functionReturn );
    352395                functionReturn = ResolvExpr::extractResultType( functionDecl->type );
    353 
    354                 {
    355                         // resolve with-exprs with parameters in scope and add any newly generated declarations to the
    356                         // front of the function body.
    357                         auto guard = makeFuncGuard( [this]() { indexer.enterScope(); }, [this](){ indexer.leaveScope(); } );
    358                         indexer.addFunctionType( functionDecl->type );
    359                         std::list< Statement * > newStmts;
    360                         resolveWithExprs( functionDecl->withExprs, newStmts );
    361                         if ( functionDecl->statements ) {
    362                                 functionDecl->statements->kids.splice( functionDecl->statements->kids.begin(), newStmts );
    363                         } else {
    364                                 assertf( functionDecl->withExprs.empty() && newStmts.empty(), "Function %s without a body has with-clause and/or generated with declarations.", functionDecl->name.c_str() );
    365                         }
    366                 }
    367396        }
    368397
     
    695724                        stmt->orelse.statement->accept( *visitor );
    696725                }
    697         }
    698 
    699         bool isStructOrUnion( const Alternative & alt ) {
    700                 Type * t = alt.expr->result->stripReferences();
    701                 return dynamic_cast< StructInstType * >( t ) || dynamic_cast< UnionInstType * >( t );
    702         }
    703 
    704         void Resolver::resolveWithExprs( std::list< Expression * > & withExprs, std::list< Statement * > & newStmts ) {
    705                 for ( Expression *& expr : withExprs )  {
    706                         // only struct- and union-typed expressions are viable candidates
    707                         findKindExpression( expr, indexer, "with statement", isStructOrUnion );
    708 
    709                         // if with expression might be impure, create a temporary so that it is evaluated once
    710                         if ( Tuples::maybeImpure( expr ) ) {
    711                                 static UniqueName tmpNamer( "_with_tmp_" );
    712                                 ObjectDecl * tmp = ObjectDecl::newObject( tmpNamer.newName(), expr->result->clone(), new SingleInit( expr ) );
    713                                 expr = new VariableExpr( tmp );
    714                                 newStmts.push_back( new DeclStmt( tmp ) );
    715                                 if ( InitTweak::isConstructable( tmp->type ) ) {
    716                                         // generate ctor/dtor and resolve them
    717                                         tmp->init = InitTweak::genCtorInit( tmp );
    718                                         tmp->accept( *visitor );
    719                                 }
    720                         }
    721                 }
    722         }
    723 
    724         void Resolver::previsit( WithStmt * withStmt ) {
    725                 resolveWithExprs( withStmt->exprs, stmtsToAddBefore );
    726726        }
    727727
  • src/ResolvExpr/Resolver.h

    r341bb80 r6d44da1  
    3838        /// Searches expr and returns the first DeletedExpr found, otherwise nullptr
    3939        DeletedExpr * findDeletedExpr( Expression * expr );
     40        /// Resolves with-stmts and with-clauses on functions
     41        void resolveWithExprs( std::list< Declaration * > & translationUnit );
    4042} // namespace ResolvExpr
    4143
  • src/ResolvExpr/TypeEnvironment.cc

    r341bb80 r6d44da1  
    6969        }
    7070
    71         EqvClass::EqvClass( EqvClass &&other ) 
    72         : vars{std::move(other.vars)}, type{other.type}, 
     71        EqvClass::EqvClass( EqvClass &&other )
     72        : vars{std::move(other.vars)}, type{other.type},
    7373          allowWidening{std::move(other.allowWidening)}, data{std::move(other.data)} {
    7474                  other.type = nullptr;
     
    8585                if ( this == &other ) return *this;
    8686                delete type;
    87                
     87
    8888                vars = std::move(other.vars);
    8989                type = other.type;
     
    132132                        ++next;
    133133                        std::set<std::string> intersection;
    134                         std::set_intersection( i->vars.begin(), i->vars.end(), eqvClass.vars.begin(), eqvClass.vars.end(), 
     134                        std::set_intersection( i->vars.begin(), i->vars.end(), eqvClass.vars.begin(), eqvClass.vars.end(),
    135135                                std::inserter( intersection, intersection.begin() ) );
    136136                        if ( ! intersection.empty() ) { env.erase( i ); }
     
    240240                        // ttype unifies with any tuple type
    241241                        return dynamic_cast< TupleType * >( type ) || Tuples::isTtype( type );
     242                  default:
     243                        assertf(false, "Unhandled tyvar kind: %d", data.kind);
    242244                } // switch
    243245                return false;
     
    245247
    246248        bool TypeEnvironment::bindVar( TypeInstType *typeInst, Type *bindTo, const TypeDecl::Data & data, AssertionSet &need, AssertionSet &have, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ) {
    247                
     249
    248250                // remove references from other, so that type variables can only bind to value types
    249251                bindTo = bindTo->stripReferences();
     
    291293                auto class1 = internal_lookup( var1->get_name() );
    292294                auto class2 = internal_lookup( var2->get_name() );
    293                
     295
    294296                // exit early if variables already bound together
    295297                if ( class1 != env.end() && class1 == class2 ) {
  • src/SymTab/Mangler.cc

    r341bb80 r6d44da1  
    7373                                bool mangleGenericParams;       ///< Include generic parameters in name mangling if true
    7474                                bool inFunctionType = false;    ///< Include type qualifiers if false.
     75                                bool inQualifiedType = false;   ///< Add start/end delimiters around qualified type
    7576
    7677                                void mangleDecl( DeclarationWithType *declaration );
     
    110111                                        isTopLevel = false;
    111112                                } // if
    112                                 mangleName << "__";
     113                                mangleName << Encoding::manglePrefix;
    113114                                CodeGen::OperatorInfo opInfo;
    114115                                if ( operatorLookup( declaration->get_name(), opInfo ) ) {
    115                                         mangleName << opInfo.outputName;
     116                                        mangleName << opInfo.outputName.size() << opInfo.outputName;
    116117                                } else {
    117                                         mangleName << declaration->get_name();
    118                                 } // if
    119                                 mangleName << "__";
     118                                        mangleName << declaration->name.size() << declaration->name;
     119                                } // if
    120120                                maybeAccept( declaration->get_type(), *visitor );
    121121                                if ( mangleOverridable && LinkageSpec::isOverridable( declaration->get_linkage() ) ) {
     
    123123                                        // so they need a different name mangling
    124124                                        if ( declaration->get_linkage() == LinkageSpec::AutoGen ) {
    125                                                 mangleName << "autogen__";
     125                                                mangleName << Encoding::autogen;
    126126                                        } else if ( declaration->get_linkage() == LinkageSpec::Intrinsic ) {
    127                                                 mangleName << "intrinsic__";
     127                                                mangleName << Encoding::intrinsic;
    128128                                        } else {
    129129                                                // if we add another kind of overridable function, this has to change
     
    144144                        void Mangler::postvisit( VoidType * voidType ) {
    145145                                printQualifiers( voidType );
    146                                 mangleName << "v";
     146                                mangleName << Encoding::void_t;
    147147                        }
    148148
    149149                        void Mangler::postvisit( BasicType * basicType ) {
    150                                 static const char *btLetter[] = {
    151                                         "b",    // Bool
    152                                         "c",    // Char
    153                                         "Sc",   // SignedChar
    154                                         "Uc",   // UnsignedChar
    155                                         "s",    // ShortSignedInt
    156                                         "Us",   // ShortUnsignedInt
    157                                         "i",    // SignedInt
    158                                         "Ui",   // UnsignedInt
    159                                         "l",    // LongSignedInt
    160                                         "Ul",   // LongUnsignedInt
    161                                         "q",    // LongLongSignedInt
    162                                         "Uq",   // LongLongUnsignedInt
    163                                         "f",    // Float
    164                                         "d",    // Double
    165                                         "r",    // LongDouble
    166                                         "Xf",   // FloatComplex
    167                                         "Xd",   // DoubleComplex
    168                                         "Xr",   // LongDoubleComplex
    169                                         "If",   // FloatImaginary
    170                                         "Id",   // DoubleImaginary
    171                                         "Ir",   // LongDoubleImaginary
    172                                         "w",    // SignedInt128
    173                                         "Uw",   // UnsignedInt128
    174                                         "x",    // Float80
    175                                         "y",    // Float128
    176                                 };
    177                                 static_assert(
    178                                         sizeof(btLetter)/sizeof(btLetter[0]) == BasicType::NUMBER_OF_BASIC_TYPES,
    179                                         "Each basic type kind should have a corresponding mangler letter"
    180                                 );
    181 
    182150                                printQualifiers( basicType );
    183                                 assert( basicType->get_kind() < sizeof(btLetter)/sizeof(btLetter[0]) );
    184                                 mangleName << btLetter[ basicType->get_kind() ];
     151                                assertf( basicType->get_kind() < BasicType::NUMBER_OF_BASIC_TYPES, "Unhandled basic type: %d", basicType->get_kind() );
     152                                mangleName << Encoding::basicTypes[ basicType->get_kind() ];
    185153                        }
    186154
     
    188156                                printQualifiers( pointerType );
    189157                                // mangle void (*f)() and void f() to the same name to prevent overloading on functions and function pointers
    190                                 if ( ! dynamic_cast<FunctionType *>( pointerType->base ) ) mangleName << "P";
     158                                if ( ! dynamic_cast<FunctionType *>( pointerType->base ) ) mangleName << Encoding::pointer;
    191159                                maybeAccept( pointerType->base, *visitor );
    192160                        }
     
    195163                                // TODO: encode dimension
    196164                                printQualifiers( arrayType );
    197                                 mangleName << "A0";
     165                                mangleName << Encoding::array << "0";
    198166                                maybeAccept( arrayType->base, *visitor );
    199167                        }
     
    220188                        void Mangler::postvisit( FunctionType * functionType ) {
    221189                                printQualifiers( functionType );
    222                                 mangleName << "F";
     190                                mangleName << Encoding::function;
    223191                                // turn on inFunctionType so that printQualifiers does not print most qualifiers for function parameters,
    224192                                // since qualifiers on outermost parameter type do not differentiate function types, e.g.,
     
    227195                                inFunctionType = true;
    228196                                std::list< Type* > returnTypes = getTypes( functionType->returnVals );
    229                                 acceptAll( returnTypes, *visitor );
     197                                if (returnTypes.empty()) mangleName << Encoding::void_t;
     198                                else acceptAll( returnTypes, *visitor );
    230199                                mangleName << "_";
    231200                                std::list< Type* > paramTypes = getTypes( functionType->parameters );
     
    237206                                printQualifiers( refType );
    238207
    239                                 mangleName << ( refType->name.length() + prefix.length() ) << prefix << refType->name;
     208                                mangleName << prefix << refType->name.length() << refType->name;
    240209
    241210                                if ( mangleGenericParams ) {
     
    254223
    255224                        void Mangler::postvisit( StructInstType * aggregateUseType ) {
    256                                 mangleRef( aggregateUseType, "s" );
     225                                mangleRef( aggregateUseType, Encoding::struct_t );
    257226                        }
    258227
    259228                        void Mangler::postvisit( UnionInstType * aggregateUseType ) {
    260                                 mangleRef( aggregateUseType, "u" );
     229                                mangleRef( aggregateUseType, Encoding::union_t );
    261230                        }
    262231
    263232                        void Mangler::postvisit( EnumInstType * aggregateUseType ) {
    264                                 mangleRef( aggregateUseType, "e" );
     233                                mangleRef( aggregateUseType, Encoding::enum_t );
    265234                        }
    266235
     
    268237                                VarMapType::iterator varNum = varNums.find( typeInst->get_name() );
    269238                                if ( varNum == varNums.end() ) {
    270                                         mangleRef( typeInst, "t" );
     239                                        mangleRef( typeInst, Encoding::type );
    271240                                } else {
    272241                                        printQualifiers( typeInst );
    273                                         std::ostringstream numStream;
    274                                         numStream << varNum->second.first;
    275                                         switch ( (TypeDecl::Kind )varNum->second.second ) {
    276                                           case TypeDecl::Dtype:
    277                                                 mangleName << "d";
    278                                                 break;
    279                                           case TypeDecl::Ftype:
    280                                                 mangleName << "f";
    281                                                 break;
    282                                                 case TypeDecl::Ttype:
    283                                                 mangleName << "tVARGS";
    284                                                 break;
    285                                                 default:
    286                                                 assert( false );
    287                                         } // switch
    288                                         mangleName << numStream.str();
     242                                        // Note: Can't use name here, since type variable names do not actually disambiguate a function, e.g.
     243                                        //   forall(dtype T) void f(T);
     244                                        //   forall(dtype S) void f(S);
     245                                        // are equivalent and should mangle the same way. This is accomplished by numbering the type variables when they
     246                                        // are first found and prefixing with the appropriate encoding for the type class.
     247                                        assertf( varNum->second.second < TypeDecl::NUMBER_OF_KINDS, "Unhandled type variable kind: %d", varNum->second.second );
     248                                        mangleName << Encoding::typeVariables[varNum->second.second] << varNum->second.first;
    289249                                } // if
    290250                        }
     
    292252                        void Mangler::postvisit( TraitInstType * inst ) {
    293253                                printQualifiers( inst );
    294                                 mangleName << "_Y" << inst->name << "_";
     254                                mangleName << inst->name.size() << inst->name;
    295255                        }
    296256
    297257                        void Mangler::postvisit( TupleType * tupleType ) {
    298258                                printQualifiers( tupleType );
    299                                 mangleName << "T";
     259                                mangleName << Encoding::tuple << tupleType->types.size();
    300260                                acceptAll( tupleType->types, *visitor );
    301                                 mangleName << "_";
    302261                        }
    303262
    304263                        void Mangler::postvisit( VarArgsType * varArgsType ) {
    305264                                printQualifiers( varArgsType );
    306                                 mangleName << "VARGS";
     265                                static const std::string vargs = "__builtin_va_list";
     266                                mangleName << Encoding::type << vargs.size() << vargs;
    307267                        }
    308268
    309269                        void Mangler::postvisit( ZeroType * ) {
    310                                 mangleName << "Z";
     270                                mangleName << Encoding::zero;
    311271                        }
    312272
    313273                        void Mangler::postvisit( OneType * ) {
    314                                 mangleName << "O";
     274                                mangleName << Encoding::one;
    315275                        }
    316276
    317277                        void Mangler::postvisit( QualifiedType * qualType ) {
     278                                bool inqual = inQualifiedType;
     279                                if (! inqual ) {
     280                                        // N marks the start of a qualified type
     281                                        inQualifiedType = true;
     282                                        mangleName << Encoding::qualifiedTypeStart;
     283                                }
    318284                                maybeAccept( qualType->parent, *visitor );
    319                                 mangleName << "__";
    320285                                maybeAccept( qualType->child, *visitor );
     286                                if ( ! inqual ) {
     287                                        // E marks the end of a qualified type
     288                                        inQualifiedType = false;
     289                                        mangleName << Encoding::qualifiedTypeEnd;
     290                                }
    321291                        }
    322292
    323293                        void Mangler::postvisit( TypeDecl * decl ) {
    324                                 static const char *typePrefix[] = { "BT", "BD", "BF" };
    325                                 mangleName << typePrefix[ decl->get_kind() ] << ( decl->name.length() + 1 ) << decl->name;
     294                                // TODO: is there any case where mangling a TypeDecl makes sense? If so, this code needs to be
     295                                // fixed to ensure that two TypeDecls mangle to the same name when they are the same type and vice versa.
     296                                // Note: The current scheme may already work correctly for this case, I have not thought about this deeply
     297                                // and the case has not yet come up in practice. Alternatively, if not then this code can be removed
     298                                // aside from the assert false.
     299                                assertf(false, "Mangler should not visit typedecl: %s", toCString(decl));
     300                                assertf( decl->get_kind() < TypeDecl::NUMBER_OF_KINDS, "Unhandled type variable kind: %d", decl->get_kind() );
     301                                mangleName << Encoding::typeVariables[ decl->get_kind() ] << ( decl->name.length() ) << decl->name;
    326302                        }
    327303
     
    337313                                if ( ! type->get_forall().empty() ) {
    338314                                        std::list< std::string > assertionNames;
    339                                         int tcount = 0, dcount = 0, fcount = 0, vcount = 0;
    340                                         mangleName << "A";
     315                                        int dcount = 0, fcount = 0, vcount = 0, acount = 0;
     316                                        mangleName << Encoding::forall;
    341317                                        for ( Type::ForallList::iterator i = type->forall.begin(); i != type->forall.end(); ++i ) {
    342318                                                switch ( (*i)->get_kind() ) {
     
    361337                                                        (*assert)->accept( sub_mangler );
    362338                                                        assertionNames.push_back( sub_mangler.pass.mangleName.str() );
     339                                                        acount++;
    363340                                                } // for
    364341                                        } // for
    365                                         mangleName << tcount << "_" << dcount << "_" << fcount << "_" << vcount << "_";
     342                                        mangleName << dcount << "_" << fcount << "_" << vcount << "_" << acount << "_";
    366343                                        std::copy( assertionNames.begin(), assertionNames.end(), std::ostream_iterator< std::string >( mangleName, "" ) );
    367344                                        mangleName << "_";
     
    370347                                        // these qualifiers do not distinguish the outermost type of a function parameter
    371348                                        if ( type->get_const() ) {
    372                                                 mangleName << "C";
     349                                                mangleName << Encoding::qualifiers.at(Type::Const);
    373350                                        } // if
    374351                                        if ( type->get_volatile() ) {
    375                                                 mangleName << "V";
     352                                                mangleName << Encoding::qualifiers.at(Type::Volatile);
    376353                                        } // if
    377354                                        // Removed due to restrict not affecting function compatibility in GCC
     
    380357                                        // } // if
    381358                                        if ( type->get_atomic() ) {
    382                                                 mangleName << "A";
     359                                                mangleName << Encoding::qualifiers.at(Type::Atomic);
    383360                                        } // if
    384361                                }
    385362                                if ( type->get_mutex() ) {
    386                                         mangleName << "M";
     363                                        mangleName << Encoding::qualifiers.at(Type::Mutex);
    387364                                } // if
    388365                                if ( type->get_lvalue() ) {
    389366                                        // mangle based on whether the type is lvalue, so that the resolver can differentiate lvalues and rvalues
    390                                         mangleName << "L";
     367                                        mangleName << Encoding::qualifiers.at(Type::Lvalue);
    391368                                }
    392369
  • src/SymTab/Mangler.h

    r341bb80 r6d44da1  
    2424#include "SynTree/Visitor.h"  // for Visitor, maybeAccept
    2525
     26// https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling
     27// The CFA name mangling scheme is based closely on the itanium C++ name mangling scheme, with the following key differences:
     28// * Variable names are also mangled to include type information, not just functions
     29// * CFA does not have template expansion, so the rules for function specialization do not apply.
     30// * CFA instead has to handle type parameters and assertion parameters.
     31// * Currently name compression is not implemented.
     32
    2633namespace SymTab {
    2734        namespace Mangler {
     
    3340                /// Mangle ignoring generic type parameters
    3441                std::string mangleConcrete( Type* ty );
     42
     43                namespace Encoding {
     44                        extern const std::string manglePrefix;
     45                        extern const std::string basicTypes[];
     46                        extern const std::map<int, std::string> qualifiers;
     47
     48                        extern const std::string void_t;
     49                        extern const std::string zero;
     50                        extern const std::string one;
     51
     52                        extern const std::string function;
     53                        extern const std::string tuple;
     54                        extern const std::string pointer;
     55                        extern const std::string array;
     56                        extern const std::string qualifiedTypeStart;
     57                        extern const std::string qualifiedTypeEnd;
     58
     59                        extern const std::string forall;
     60                        extern const std::string typeVariables[];
     61
     62                        extern const std::string struct_t;
     63                        extern const std::string union_t;
     64                        extern const std::string enum_t;
     65                        extern const std::string type;
     66
     67                        extern const std::string autogen;
     68                        extern const std::string intrinsic;
     69                };
    3570        } // Mangler
    3671} // SymTab
     72
     73extern "C" {
     74        char * cforall_demangle(const char *, int);
     75}
    3776
    3877// Local Variables: //
  • src/SymTab/Validate.cc

    r341bb80 r6d44da1  
    6262#include "ResolvExpr/typeops.h"        // for typesCompatible
    6363#include "ResolvExpr/Resolver.h"       // for findSingleExpression
     64#include "ResolvExpr/ResolveTypeof.h"  // for resolveTypeof
    6465#include "SymTab/Autogen.h"            // for SizeType
    6566#include "SynTree/Attribute.h"         // for noAttributes, Attribute
     
    247248                void previsit( StructInstType * inst );
    248249                void previsit( UnionInstType * inst );
     250        };
     251
     252        struct FixObjectType : public WithIndexer {
     253                /// resolves typeof type in object, function, and type declarations
     254                static void fix( std::list< Declaration * > & translationUnit );
     255
     256                void previsit( ObjectDecl * );
     257                void previsit( FunctionDecl * );
     258                void previsit( TypeDecl * );
    249259        };
    250260
     
    312322                Concurrency::implementThreadStarter( translationUnit );
    313323                mutateAll( translationUnit, compoundliteral );
     324                ResolvExpr::resolveWithExprs( translationUnit ); // must happen before FixObjectType because user-code is resolved and may contain with variables
     325                FixObjectType::fix( translationUnit );
    314326                ArrayLength::computeLength( translationUnit );
    315327                acceptAll( translationUnit, finder ); // xxx - remove this pass soon
     
    391403                        assert( aggr ); // TODO: need to handle forward declarations
    392404                        for ( Declaration * member : aggr->members ) {
    393                                 if ( StructInstType * inst = dynamic_cast< StructInstType * >( child ) ) {
    394                                         if ( StructDecl * aggr = dynamic_cast< StructDecl * >( member ) ) {
    395                                                 if ( aggr->name == inst->name ) {
    396                                                         // TODO: is this case, and other non-TypeInstType cases, necessary?
    397                                                         return new StructInstType( qualType->get_qualifiers(), aggr );
    398                                                 }
    399                                         }
    400                                 } else if ( UnionInstType * inst = dynamic_cast< UnionInstType * >( child ) ) {
    401                                         if ( UnionDecl * aggr = dynamic_cast< UnionDecl * > ( member ) ) {
    402                                                 if ( aggr->name == inst->name ) {
    403                                                         return new UnionInstType( qualType->get_qualifiers(), aggr );
    404                                                 }
    405                                         }
    406                                 } else if ( EnumInstType * inst = dynamic_cast< EnumInstType * >( child ) ) {
    407                                         if ( EnumDecl * aggr = dynamic_cast< EnumDecl * > ( member ) ) {
    408                                                 if ( aggr->name == inst->name ) {
    409                                                         return new EnumInstType( qualType->get_qualifiers(), aggr );
    410                                                 }
    411                                         }
    412                                 } else if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( child ) ) {
     405                                if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( child ) ) {
    413406                                        // name on the right is a typedef
    414407                                        if ( NamedTypeDecl * aggr = dynamic_cast< NamedTypeDecl * > ( member ) ) {
     
    417410                                                        Type * ret = aggr->base->clone();
    418411                                                        ret->get_qualifiers() = qualType->get_qualifiers();
     412                                                        TypeSubstitution sub = parent->genericSubstitution();
     413                                                        sub.apply(ret);
    419414                                                        return ret;
    420415                                                }
     
    12381233        }
    12391234
     1235        void FixObjectType::fix( std::list< Declaration * > & translationUnit ) {
     1236                PassVisitor<FixObjectType> fixer;
     1237                acceptAll( translationUnit, fixer );
     1238        }
     1239
     1240        void FixObjectType::previsit( ObjectDecl * objDecl ) {
     1241                Type *new_type = ResolvExpr::resolveTypeof( objDecl->get_type(), indexer );
     1242                new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type
     1243                objDecl->set_type( new_type );
     1244        }
     1245
     1246        void FixObjectType::previsit( FunctionDecl * funcDecl ) {
     1247                Type *new_type = ResolvExpr::resolveTypeof( funcDecl->type, indexer );
     1248                new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type
     1249                funcDecl->set_type( new_type );
     1250        }
     1251
     1252        void FixObjectType::previsit( TypeDecl *typeDecl ) {
     1253                if ( typeDecl->get_base() ) {
     1254                        Type *new_type = ResolvExpr::resolveTypeof( typeDecl->get_base(), indexer );
     1255                        new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type
     1256                        typeDecl->set_base( new_type );
     1257                } // if
     1258        }
     1259
    12401260        void ArrayLength::computeLength( std::list< Declaration * > & translationUnit ) {
    12411261                PassVisitor<ArrayLength> len;
  • src/SymTab/module.mk

    r341bb80 r6d44da1  
    1717SRC += SymTab/Indexer.cc \
    1818       SymTab/Mangler.cc \
     19       SymTab/ManglerCommon.cc \
    1920       SymTab/Validate.cc \
    2021       SymTab/FixFunction.cc \
  • src/SynTree/Declaration.h

    r341bb80 r6d44da1  
    202202        typedef NamedTypeDecl Parent;
    203203  public:
    204         enum Kind { Dtype, Ftype, Ttype };
     204        enum Kind { Dtype, Ftype, Ttype, NUMBER_OF_KINDS };
    205205
    206206        Type * init;
  • src/cfa.make

    r341bb80 r6d44da1  
    1212am__v_CFA_1 =
    1313
    14 .cfa.o: $(CFACC) $(CFACPP)
     14.cfa.o:
    1515        $(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
    1616        $(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
  • src/main.cc

    r341bb80 r6d44da1  
    3434#include "CodeGen/Generate.h"               // for generate
    3535#include "CodeTools/DeclStats.h"            // for printDeclStats
     36#include "CodeTools/ResolvProtoDump.h"      // for dumpAsResolvProto
    3637#include "CodeTools/TrackLoc.h"             // for fillLocations
    3738#include "Common/CompilerError.h"           // for CompilerError
     
    171172                        if ( filename == nullptr ) filename = argv[ optind ];
    172173                        // prelude filename comes in differently
    173                         if ( libcfap ) filename = "prelude.cf";
     174                        if ( libcfap ) filename = "prelude.cfa";
    174175                        optind += 1;
    175176                } else {                                                                                // no input file name
     
    198199                        if ( ! libcfap ) {
    199200                                // read the prelude in, if not generating the cfa library
    200                                 FILE * prelude = fopen( (PreludeDirector + "/prelude.cf").c_str(), "r" );
    201                                 assertf( prelude, "cannot open prelude.cf\n" );
     201                                FILE * prelude = fopen( (PreludeDirector + "/prelude.cfa").c_str(), "r" );
     202                                assertf( prelude, "cannot open prelude.cfa\n" );
    202203                                parse( prelude, LinkageSpec::Intrinsic );
    203204
     
    270271
    271272                CodeTools::fillLocations( translationUnit );
     273
     274                if ( resolvprotop ) {
     275                        CodeTools::dumpAsResolvProto( translationUnit );
     276                        return 0;
     277                }
    272278
    273279                PASS( "resolve", ResolvExpr::resolve( translationUnit ) );
     
    376382
    377383void parse_cmdline( int argc, char * argv[], const char *& filename ) {
    378         enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, PreludeDir, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
     384        enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, PreludeDir, Prototypes, Resolver, ResolvProto, Symbol, Tree, TupleExpansion, Validate, };
    379385
    380386        static struct option long_opts[] = {
     
    395401                { "no-prototypes", no_argument, 0, Prototypes },
    396402                { "resolver", no_argument, 0, Resolver },
     403                { "resolv-proto", no_argument, 0, ResolvProto },
    397404                { "symbol", no_argument, 0, Symbol },
    398405                { "tree", no_argument, 0, Tree },
     
    407414        bool Wsuppress = false, Werror = false;
    408415        int c;
    409         while ( (c = getopt_long( argc, argv, "abBcCdefgGlLmnNpqrstTvwW:yzZD:F:", long_opts, &long_index )) != -1 ) {
     416        while ( (c = getopt_long( argc, argv, "abBcCdefgGlLmnNpqrRstTvwW:yzZD:F:", long_opts, &long_index )) != -1 ) {
    410417                switch ( c ) {
    411418                  case Ast:
     
    479486                  case 'r':                                                                             // print resolver steps
    480487                        resolvep = true;
     488                        break;
     489                        case 'R':                                                                               // dump resolv-proto instance
     490                        resolvprotop = true;
    481491                        break;
    482492                  case Symbol:
Note: See TracChangeset for help on using the changeset viewer.