Changeset 72b3605 for src


Ignore:
Timestamp:
Aug 20, 2018, 3:03:20 PM (7 years ago)
Author:
Rob Schluntz <rschlunt@…>
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:
efa8b6a
Parents:
f7d3215 (diff), ec91336 (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 'demangler'

Location:
src
Files:
3 added
9 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/ScrubTyVars.cc

    rf7d3215 r72b3605  
    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

    rf7d3215 r72b3605  
    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
     
    5151AM_LDFLAGS  = @HOST_FLAGS@ -Xlinker -export-dynamic
    5252
     53demangler_SOURCES = SymTab/demangler.cc
     54
     55demangler_LDADD = libdemangle.a     # yywrap
     56
     57noinst_LIBRARIES = libdemangle.a
     58libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
     59  SynTree/Type.cc \
     60  SynTree/VoidType.cc \
     61  SynTree/BasicType.cc \
     62  SynTree/PointerType.cc \
     63  SynTree/ArrayType.cc \
     64  SynTree/ReferenceType.cc \
     65  SynTree/FunctionType.cc \
     66  SynTree/ReferenceToType.cc \
     67  SynTree/TupleType.cc \
     68  SynTree/TypeofType.cc \
     69  SynTree/AttrType.cc \
     70  SynTree/VarArgsType.cc \
     71  SynTree/ZeroOneType.cc \
     72  SynTree/Constant.cc \
     73  SynTree/Expression.cc \
     74  SynTree/TupleExpr.cc \
     75  SynTree/CommaExpr.cc \
     76  SynTree/TypeExpr.cc \
     77  SynTree/ApplicationExpr.cc \
     78  SynTree/AddressExpr.cc \
     79  SynTree/Statement.cc \
     80  SynTree/CompoundStmt.cc \
     81  SynTree/DeclStmt.cc \
     82  SynTree/Declaration.cc \
     83  SynTree/DeclarationWithType.cc \
     84  SynTree/ObjectDecl.cc \
     85  SynTree/FunctionDecl.cc \
     86  SynTree/AggregateDecl.cc \
     87  SynTree/NamedTypeDecl.cc \
     88  SynTree/TypeDecl.cc \
     89  SynTree/Initializer.cc \
     90  SynTree/TypeSubstitution.cc \
     91  SynTree/Attribute.cc \
     92  SynTree/DeclReplacer.cc \
     93  CompilationState.cc \
     94  CodeGen/CodeGenerator.cc \
     95  CodeGen/FixMain.cc \
     96  CodeGen/GenType.cc \
     97  CodeGen/OperatorTable.cc \
     98  Common/Assert.cc \
     99  Common/Eval.cc \
     100  Common/SemanticError.cc \
     101  Common/UniqueName.cc \
     102  Concurrency/Keywords.cc \
     103  ControlStruct/ForExprMutator.cc \
     104  ControlStruct/LabelFixer.cc \
     105  ControlStruct/LabelGenerator.cc \
     106  ControlStruct/MLEMutator.cc \
     107  ControlStruct/Mutate.cc \
     108  GenPoly/GenPoly.cc \
     109  GenPoly/Lvalue.cc \
     110  InitTweak/GenInit.cc \
     111  InitTweak/InitTweak.cc \
     112  Parser/LinkageSpec.cc \
     113  ResolvExpr/AdjustExprType.cc \
     114  ResolvExpr/Alternative.cc \
     115  ResolvExpr/AlternativeFinder.cc \
     116  ResolvExpr/ExplodedActual.cc \
     117  ResolvExpr/CastCost.cc \
     118  ResolvExpr/CommonType.cc \
     119  ResolvExpr/ConversionCost.cc \
     120  ResolvExpr/CurrentObject.cc \
     121  ResolvExpr/FindOpenVars.cc \
     122  ResolvExpr/Occurs.cc \
     123  ResolvExpr/PolyCost.cc \
     124  ResolvExpr/PtrsAssignable.cc \
     125  ResolvExpr/PtrsCastable.cc \
     126  ResolvExpr/RenameVars.cc \
     127  ResolvExpr/Resolver.cc \
     128  ResolvExpr/ResolveTypeof.cc \
     129  ResolvExpr/TypeEnvironment.cc \
     130  ResolvExpr/Unify.cc \
     131  SymTab/Autogen.cc \
     132  SymTab/FixFunction.cc \
     133  SymTab/Indexer.cc \
     134  SymTab/Mangler.cc \
     135  SymTab/Validate.cc \
     136  Tuples/Explode.cc \
     137  Tuples/TupleAssignment.cc \
     138  Tuples/TupleExpansion.cc \
     139  Validate/HandleAttributes.cc
     140
    53141MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
  • src/Makefile.in

    rf7d3215 r72b3605  
    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
     154ARFLAGS = cru
     155AM_V_AR = $(am__v_AR_@AM_V@)
     156am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
     157am__v_AR_0 = @echo "  AR      " $@;
     158am__v_AR_1 =
     159libdemangle_a_AR = $(AR) $(ARFLAGS)
     160libdemangle_a_LIBADD =
     161am__dirstamp = $(am__leading_dot)dirstamp
     162am_libdemangle_a_OBJECTS = SymTab/Demangle.$(OBJEXT) \
     163        SymTab/ManglerCommon.$(OBJEXT) SynTree/Type.$(OBJEXT) \
     164        SynTree/VoidType.$(OBJEXT) SynTree/BasicType.$(OBJEXT) \
     165        SynTree/PointerType.$(OBJEXT) SynTree/ArrayType.$(OBJEXT) \
     166        SynTree/ReferenceType.$(OBJEXT) SynTree/FunctionType.$(OBJEXT) \
     167        SynTree/ReferenceToType.$(OBJEXT) SynTree/TupleType.$(OBJEXT) \
     168        SynTree/TypeofType.$(OBJEXT) SynTree/AttrType.$(OBJEXT) \
     169        SynTree/VarArgsType.$(OBJEXT) SynTree/ZeroOneType.$(OBJEXT) \
     170        SynTree/Constant.$(OBJEXT) SynTree/Expression.$(OBJEXT) \
     171        SynTree/TupleExpr.$(OBJEXT) SynTree/CommaExpr.$(OBJEXT) \
     172        SynTree/TypeExpr.$(OBJEXT) SynTree/ApplicationExpr.$(OBJEXT) \
     173        SynTree/AddressExpr.$(OBJEXT) SynTree/Statement.$(OBJEXT) \
     174        SynTree/CompoundStmt.$(OBJEXT) SynTree/DeclStmt.$(OBJEXT) \
     175        SynTree/Declaration.$(OBJEXT) \
     176        SynTree/DeclarationWithType.$(OBJEXT) \
     177        SynTree/ObjectDecl.$(OBJEXT) SynTree/FunctionDecl.$(OBJEXT) \
     178        SynTree/AggregateDecl.$(OBJEXT) \
     179        SynTree/NamedTypeDecl.$(OBJEXT) SynTree/TypeDecl.$(OBJEXT) \
     180        SynTree/Initializer.$(OBJEXT) \
     181        SynTree/TypeSubstitution.$(OBJEXT) SynTree/Attribute.$(OBJEXT) \
     182        SynTree/DeclReplacer.$(OBJEXT) CompilationState.$(OBJEXT) \
     183        CodeGen/CodeGenerator.$(OBJEXT) CodeGen/FixMain.$(OBJEXT) \
     184        CodeGen/GenType.$(OBJEXT) CodeGen/OperatorTable.$(OBJEXT) \
     185        Common/Assert.$(OBJEXT) Common/Eval.$(OBJEXT) \
     186        Common/SemanticError.$(OBJEXT) Common/UniqueName.$(OBJEXT) \
     187        Concurrency/Keywords.$(OBJEXT) \
     188        ControlStruct/ForExprMutator.$(OBJEXT) \
     189        ControlStruct/LabelFixer.$(OBJEXT) \
     190        ControlStruct/LabelGenerator.$(OBJEXT) \
     191        ControlStruct/MLEMutator.$(OBJEXT) \
     192        ControlStruct/Mutate.$(OBJEXT) GenPoly/GenPoly.$(OBJEXT) \
     193        GenPoly/Lvalue.$(OBJEXT) InitTweak/GenInit.$(OBJEXT) \
     194        InitTweak/InitTweak.$(OBJEXT) Parser/LinkageSpec.$(OBJEXT) \
     195        ResolvExpr/AdjustExprType.$(OBJEXT) \
     196        ResolvExpr/Alternative.$(OBJEXT) \
     197        ResolvExpr/AlternativeFinder.$(OBJEXT) \
     198        ResolvExpr/ExplodedActual.$(OBJEXT) \
     199        ResolvExpr/CastCost.$(OBJEXT) ResolvExpr/CommonType.$(OBJEXT) \
     200        ResolvExpr/ConversionCost.$(OBJEXT) \
     201        ResolvExpr/CurrentObject.$(OBJEXT) \
     202        ResolvExpr/FindOpenVars.$(OBJEXT) ResolvExpr/Occurs.$(OBJEXT) \
     203        ResolvExpr/PolyCost.$(OBJEXT) \
     204        ResolvExpr/PtrsAssignable.$(OBJEXT) \
     205        ResolvExpr/PtrsCastable.$(OBJEXT) \
     206        ResolvExpr/RenameVars.$(OBJEXT) ResolvExpr/Resolver.$(OBJEXT) \
     207        ResolvExpr/ResolveTypeof.$(OBJEXT) \
     208        ResolvExpr/TypeEnvironment.$(OBJEXT) \
     209        ResolvExpr/Unify.$(OBJEXT) SymTab/Autogen.$(OBJEXT) \
     210        SymTab/FixFunction.$(OBJEXT) SymTab/Indexer.$(OBJEXT) \
     211        SymTab/Mangler.$(OBJEXT) SymTab/Validate.$(OBJEXT) \
     212        Tuples/Explode.$(OBJEXT) Tuples/TupleAssignment.$(OBJEXT) \
     213        Tuples/TupleExpansion.$(OBJEXT) \
     214        Validate/HandleAttributes.$(OBJEXT)
     215libdemangle_a_OBJECTS = $(am_libdemangle_a_OBJECTS)
    151216am__installdirs = "$(DESTDIR)$(cfa_cpplibdir)"
    152217PROGRAMS = $(cfa_cpplib_PROGRAMS)
    153 am__dirstamp = $(am__leading_dot)dirstamp
    154218am__objects_1 = main.$(OBJEXT) MakeLibCfa.$(OBJEXT) \
    155219        CompilationState.$(OBJEXT) CodeGen/Generate.$(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 \
     
    477546        ResolvExpr/Occurs.cc ResolvExpr/TypeEnvironment.cc \
    478547        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 \
     548        SymTab/Indexer.cc SymTab/Mangler.cc SymTab/ManglerCommon.cc \
     549        SymTab/Validate.cc SymTab/FixFunction.cc SymTab/Autogen.cc \
     550        SynTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \
    482551        SynTree/PointerType.cc SynTree/ArrayType.cc \
    483552        SynTree/ReferenceType.cc SynTree/FunctionType.cc \
     
    511580AM_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
    512581AM_LDFLAGS = @HOST_FLAGS@ -Xlinker -export-dynamic
     582demangler_SOURCES = SymTab/demangler.cc
     583demangler_LDADD = libdemangle.a     # yywrap
     584noinst_LIBRARIES = libdemangle.a
     585libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
     586  SynTree/Type.cc \
     587  SynTree/VoidType.cc \
     588  SynTree/BasicType.cc \
     589  SynTree/PointerType.cc \
     590  SynTree/ArrayType.cc \
     591  SynTree/ReferenceType.cc \
     592  SynTree/FunctionType.cc \
     593  SynTree/ReferenceToType.cc \
     594  SynTree/TupleType.cc \
     595  SynTree/TypeofType.cc \
     596  SynTree/AttrType.cc \
     597  SynTree/VarArgsType.cc \
     598  SynTree/ZeroOneType.cc \
     599  SynTree/Constant.cc \
     600  SynTree/Expression.cc \
     601  SynTree/TupleExpr.cc \
     602  SynTree/CommaExpr.cc \
     603  SynTree/TypeExpr.cc \
     604  SynTree/ApplicationExpr.cc \
     605  SynTree/AddressExpr.cc \
     606  SynTree/Statement.cc \
     607  SynTree/CompoundStmt.cc \
     608  SynTree/DeclStmt.cc \
     609  SynTree/Declaration.cc \
     610  SynTree/DeclarationWithType.cc \
     611  SynTree/ObjectDecl.cc \
     612  SynTree/FunctionDecl.cc \
     613  SynTree/AggregateDecl.cc \
     614  SynTree/NamedTypeDecl.cc \
     615  SynTree/TypeDecl.cc \
     616  SynTree/Initializer.cc \
     617  SynTree/TypeSubstitution.cc \
     618  SynTree/Attribute.cc \
     619  SynTree/DeclReplacer.cc \
     620  CompilationState.cc \
     621  CodeGen/CodeGenerator.cc \
     622  CodeGen/FixMain.cc \
     623  CodeGen/GenType.cc \
     624  CodeGen/OperatorTable.cc \
     625  Common/Assert.cc \
     626  Common/Eval.cc \
     627  Common/SemanticError.cc \
     628  Common/UniqueName.cc \
     629  Concurrency/Keywords.cc \
     630  ControlStruct/ForExprMutator.cc \
     631  ControlStruct/LabelFixer.cc \
     632  ControlStruct/LabelGenerator.cc \
     633  ControlStruct/MLEMutator.cc \
     634  ControlStruct/Mutate.cc \
     635  GenPoly/GenPoly.cc \
     636  GenPoly/Lvalue.cc \
     637  InitTweak/GenInit.cc \
     638  InitTweak/InitTweak.cc \
     639  Parser/LinkageSpec.cc \
     640  ResolvExpr/AdjustExprType.cc \
     641  ResolvExpr/Alternative.cc \
     642  ResolvExpr/AlternativeFinder.cc \
     643  ResolvExpr/ExplodedActual.cc \
     644  ResolvExpr/CastCost.cc \
     645  ResolvExpr/CommonType.cc \
     646  ResolvExpr/ConversionCost.cc \
     647  ResolvExpr/CurrentObject.cc \
     648  ResolvExpr/FindOpenVars.cc \
     649  ResolvExpr/Occurs.cc \
     650  ResolvExpr/PolyCost.cc \
     651  ResolvExpr/PtrsAssignable.cc \
     652  ResolvExpr/PtrsCastable.cc \
     653  ResolvExpr/RenameVars.cc \
     654  ResolvExpr/Resolver.cc \
     655  ResolvExpr/ResolveTypeof.cc \
     656  ResolvExpr/TypeEnvironment.cc \
     657  ResolvExpr/Unify.cc \
     658  SymTab/Autogen.cc \
     659  SymTab/FixFunction.cc \
     660  SymTab/Indexer.cc \
     661  SymTab/Mangler.cc \
     662  SymTab/Validate.cc \
     663  Tuples/Explode.cc \
     664  Tuples/TupleAssignment.cc \
     665  Tuples/TupleExpansion.cc \
     666  Validate/HandleAttributes.cc
     667
    513668all: $(BUILT_SOURCES)
    514669        $(MAKE) $(AM_MAKEFLAGS) all-am
     
    546701        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
    547702$(am__aclocal_m4_deps):
     703
     704clean-noinstLIBRARIES:
     705        -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
     706SymTab/$(am__dirstamp):
     707        @$(MKDIR_P) SymTab
     708        @: > SymTab/$(am__dirstamp)
     709SymTab/$(DEPDIR)/$(am__dirstamp):
     710        @$(MKDIR_P) SymTab/$(DEPDIR)
     711        @: > SymTab/$(DEPDIR)/$(am__dirstamp)
     712SymTab/Demangle.$(OBJEXT): SymTab/$(am__dirstamp) \
     713        SymTab/$(DEPDIR)/$(am__dirstamp)
     714SymTab/ManglerCommon.$(OBJEXT): SymTab/$(am__dirstamp) \
     715        SymTab/$(DEPDIR)/$(am__dirstamp)
     716SynTree/$(am__dirstamp):
     717        @$(MKDIR_P) SynTree
     718        @: > SynTree/$(am__dirstamp)
     719SynTree/$(DEPDIR)/$(am__dirstamp):
     720        @$(MKDIR_P) SynTree/$(DEPDIR)
     721        @: > SynTree/$(DEPDIR)/$(am__dirstamp)
     722SynTree/Type.$(OBJEXT): SynTree/$(am__dirstamp) \
     723        SynTree/$(DEPDIR)/$(am__dirstamp)
     724SynTree/VoidType.$(OBJEXT): SynTree/$(am__dirstamp) \
     725        SynTree/$(DEPDIR)/$(am__dirstamp)
     726SynTree/BasicType.$(OBJEXT): SynTree/$(am__dirstamp) \
     727        SynTree/$(DEPDIR)/$(am__dirstamp)
     728SynTree/PointerType.$(OBJEXT): SynTree/$(am__dirstamp) \
     729        SynTree/$(DEPDIR)/$(am__dirstamp)
     730SynTree/ArrayType.$(OBJEXT): SynTree/$(am__dirstamp) \
     731        SynTree/$(DEPDIR)/$(am__dirstamp)
     732SynTree/ReferenceType.$(OBJEXT): SynTree/$(am__dirstamp) \
     733        SynTree/$(DEPDIR)/$(am__dirstamp)
     734SynTree/FunctionType.$(OBJEXT): SynTree/$(am__dirstamp) \
     735        SynTree/$(DEPDIR)/$(am__dirstamp)
     736SynTree/ReferenceToType.$(OBJEXT): SynTree/$(am__dirstamp) \
     737        SynTree/$(DEPDIR)/$(am__dirstamp)
     738SynTree/TupleType.$(OBJEXT): SynTree/$(am__dirstamp) \
     739        SynTree/$(DEPDIR)/$(am__dirstamp)
     740SynTree/TypeofType.$(OBJEXT): SynTree/$(am__dirstamp) \
     741        SynTree/$(DEPDIR)/$(am__dirstamp)
     742SynTree/AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
     743        SynTree/$(DEPDIR)/$(am__dirstamp)
     744SynTree/VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
     745        SynTree/$(DEPDIR)/$(am__dirstamp)
     746SynTree/ZeroOneType.$(OBJEXT): SynTree/$(am__dirstamp) \
     747        SynTree/$(DEPDIR)/$(am__dirstamp)
     748SynTree/Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
     749        SynTree/$(DEPDIR)/$(am__dirstamp)
     750SynTree/Expression.$(OBJEXT): SynTree/$(am__dirstamp) \
     751        SynTree/$(DEPDIR)/$(am__dirstamp)
     752SynTree/TupleExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     753        SynTree/$(DEPDIR)/$(am__dirstamp)
     754SynTree/CommaExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     755        SynTree/$(DEPDIR)/$(am__dirstamp)
     756SynTree/TypeExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     757        SynTree/$(DEPDIR)/$(am__dirstamp)
     758SynTree/ApplicationExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     759        SynTree/$(DEPDIR)/$(am__dirstamp)
     760SynTree/AddressExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
     761        SynTree/$(DEPDIR)/$(am__dirstamp)
     762SynTree/Statement.$(OBJEXT): SynTree/$(am__dirstamp) \
     763        SynTree/$(DEPDIR)/$(am__dirstamp)
     764SynTree/CompoundStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
     765        SynTree/$(DEPDIR)/$(am__dirstamp)
     766SynTree/DeclStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
     767        SynTree/$(DEPDIR)/$(am__dirstamp)
     768SynTree/Declaration.$(OBJEXT): SynTree/$(am__dirstamp) \
     769        SynTree/$(DEPDIR)/$(am__dirstamp)
     770SynTree/DeclarationWithType.$(OBJEXT): SynTree/$(am__dirstamp) \
     771        SynTree/$(DEPDIR)/$(am__dirstamp)
     772SynTree/ObjectDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     773        SynTree/$(DEPDIR)/$(am__dirstamp)
     774SynTree/FunctionDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     775        SynTree/$(DEPDIR)/$(am__dirstamp)
     776SynTree/AggregateDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     777        SynTree/$(DEPDIR)/$(am__dirstamp)
     778SynTree/NamedTypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     779        SynTree/$(DEPDIR)/$(am__dirstamp)
     780SynTree/TypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
     781        SynTree/$(DEPDIR)/$(am__dirstamp)
     782SynTree/Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \
     783        SynTree/$(DEPDIR)/$(am__dirstamp)
     784SynTree/TypeSubstitution.$(OBJEXT): SynTree/$(am__dirstamp) \
     785        SynTree/$(DEPDIR)/$(am__dirstamp)
     786SynTree/Attribute.$(OBJEXT): SynTree/$(am__dirstamp) \
     787        SynTree/$(DEPDIR)/$(am__dirstamp)
     788SynTree/DeclReplacer.$(OBJEXT): SynTree/$(am__dirstamp) \
     789        SynTree/$(DEPDIR)/$(am__dirstamp)
     790CodeGen/$(am__dirstamp):
     791        @$(MKDIR_P) CodeGen
     792        @: > CodeGen/$(am__dirstamp)
     793CodeGen/$(DEPDIR)/$(am__dirstamp):
     794        @$(MKDIR_P) CodeGen/$(DEPDIR)
     795        @: > CodeGen/$(DEPDIR)/$(am__dirstamp)
     796CodeGen/CodeGenerator.$(OBJEXT): CodeGen/$(am__dirstamp) \
     797        CodeGen/$(DEPDIR)/$(am__dirstamp)
     798CodeGen/FixMain.$(OBJEXT): CodeGen/$(am__dirstamp) \
     799        CodeGen/$(DEPDIR)/$(am__dirstamp)
     800CodeGen/GenType.$(OBJEXT): CodeGen/$(am__dirstamp) \
     801        CodeGen/$(DEPDIR)/$(am__dirstamp)
     802CodeGen/OperatorTable.$(OBJEXT): CodeGen/$(am__dirstamp) \
     803        CodeGen/$(DEPDIR)/$(am__dirstamp)
     804Common/$(am__dirstamp):
     805        @$(MKDIR_P) Common
     806        @: > Common/$(am__dirstamp)
     807Common/$(DEPDIR)/$(am__dirstamp):
     808        @$(MKDIR_P) Common/$(DEPDIR)
     809        @: > Common/$(DEPDIR)/$(am__dirstamp)
     810Common/Assert.$(OBJEXT): Common/$(am__dirstamp) \
     811        Common/$(DEPDIR)/$(am__dirstamp)
     812Common/Eval.$(OBJEXT): Common/$(am__dirstamp) \
     813        Common/$(DEPDIR)/$(am__dirstamp)
     814Common/SemanticError.$(OBJEXT): Common/$(am__dirstamp) \
     815        Common/$(DEPDIR)/$(am__dirstamp)
     816Common/UniqueName.$(OBJEXT): Common/$(am__dirstamp) \
     817        Common/$(DEPDIR)/$(am__dirstamp)
     818Concurrency/$(am__dirstamp):
     819        @$(MKDIR_P) Concurrency
     820        @: > Concurrency/$(am__dirstamp)
     821Concurrency/$(DEPDIR)/$(am__dirstamp):
     822        @$(MKDIR_P) Concurrency/$(DEPDIR)
     823        @: > Concurrency/$(DEPDIR)/$(am__dirstamp)
     824Concurrency/Keywords.$(OBJEXT): Concurrency/$(am__dirstamp) \
     825        Concurrency/$(DEPDIR)/$(am__dirstamp)
     826ControlStruct/$(am__dirstamp):
     827        @$(MKDIR_P) ControlStruct
     828        @: > ControlStruct/$(am__dirstamp)
     829ControlStruct/$(DEPDIR)/$(am__dirstamp):
     830        @$(MKDIR_P) ControlStruct/$(DEPDIR)
     831        @: > ControlStruct/$(DEPDIR)/$(am__dirstamp)
     832ControlStruct/ForExprMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     833        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     834ControlStruct/LabelFixer.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     835        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     836ControlStruct/LabelGenerator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     837        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     838ControlStruct/MLEMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     839        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     840ControlStruct/Mutate.$(OBJEXT): ControlStruct/$(am__dirstamp) \
     841        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     842GenPoly/$(am__dirstamp):
     843        @$(MKDIR_P) GenPoly
     844        @: > GenPoly/$(am__dirstamp)
     845GenPoly/$(DEPDIR)/$(am__dirstamp):
     846        @$(MKDIR_P) GenPoly/$(DEPDIR)
     847        @: > GenPoly/$(DEPDIR)/$(am__dirstamp)
     848GenPoly/GenPoly.$(OBJEXT): GenPoly/$(am__dirstamp) \
     849        GenPoly/$(DEPDIR)/$(am__dirstamp)
     850GenPoly/Lvalue.$(OBJEXT): GenPoly/$(am__dirstamp) \
     851        GenPoly/$(DEPDIR)/$(am__dirstamp)
     852InitTweak/$(am__dirstamp):
     853        @$(MKDIR_P) InitTweak
     854        @: > InitTweak/$(am__dirstamp)
     855InitTweak/$(DEPDIR)/$(am__dirstamp):
     856        @$(MKDIR_P) InitTweak/$(DEPDIR)
     857        @: > InitTweak/$(DEPDIR)/$(am__dirstamp)
     858InitTweak/GenInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
     859        InitTweak/$(DEPDIR)/$(am__dirstamp)
     860InitTweak/InitTweak.$(OBJEXT): InitTweak/$(am__dirstamp) \
     861        InitTweak/$(DEPDIR)/$(am__dirstamp)
     862Parser/$(am__dirstamp):
     863        @$(MKDIR_P) Parser
     864        @: > Parser/$(am__dirstamp)
     865Parser/$(DEPDIR)/$(am__dirstamp):
     866        @$(MKDIR_P) Parser/$(DEPDIR)
     867        @: > Parser/$(DEPDIR)/$(am__dirstamp)
     868Parser/LinkageSpec.$(OBJEXT): Parser/$(am__dirstamp) \
     869        Parser/$(DEPDIR)/$(am__dirstamp)
     870ResolvExpr/$(am__dirstamp):
     871        @$(MKDIR_P) ResolvExpr
     872        @: > ResolvExpr/$(am__dirstamp)
     873ResolvExpr/$(DEPDIR)/$(am__dirstamp):
     874        @$(MKDIR_P) ResolvExpr/$(DEPDIR)
     875        @: > ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     876ResolvExpr/AdjustExprType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     877        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     878ResolvExpr/Alternative.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     879        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     880ResolvExpr/AlternativeFinder.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     881        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     882ResolvExpr/ExplodedActual.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     883        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     884ResolvExpr/CastCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     885        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     886ResolvExpr/CommonType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     887        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     888ResolvExpr/ConversionCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     889        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     890ResolvExpr/CurrentObject.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     891        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     892ResolvExpr/FindOpenVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     893        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     894ResolvExpr/Occurs.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     895        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     896ResolvExpr/PolyCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     897        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     898ResolvExpr/PtrsAssignable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     899        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     900ResolvExpr/PtrsCastable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     901        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     902ResolvExpr/RenameVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     903        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     904ResolvExpr/Resolver.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     905        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     906ResolvExpr/ResolveTypeof.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     907        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     908ResolvExpr/TypeEnvironment.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     909        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     910ResolvExpr/Unify.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
     911        ResolvExpr/$(DEPDIR)/$(am__dirstamp)
     912SymTab/Autogen.$(OBJEXT): SymTab/$(am__dirstamp) \
     913        SymTab/$(DEPDIR)/$(am__dirstamp)
     914SymTab/FixFunction.$(OBJEXT): SymTab/$(am__dirstamp) \
     915        SymTab/$(DEPDIR)/$(am__dirstamp)
     916SymTab/Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \
     917        SymTab/$(DEPDIR)/$(am__dirstamp)
     918SymTab/Mangler.$(OBJEXT): SymTab/$(am__dirstamp) \
     919        SymTab/$(DEPDIR)/$(am__dirstamp)
     920SymTab/Validate.$(OBJEXT): SymTab/$(am__dirstamp) \
     921        SymTab/$(DEPDIR)/$(am__dirstamp)
     922Tuples/$(am__dirstamp):
     923        @$(MKDIR_P) Tuples
     924        @: > Tuples/$(am__dirstamp)
     925Tuples/$(DEPDIR)/$(am__dirstamp):
     926        @$(MKDIR_P) Tuples/$(DEPDIR)
     927        @: > Tuples/$(DEPDIR)/$(am__dirstamp)
     928Tuples/Explode.$(OBJEXT): Tuples/$(am__dirstamp) \
     929        Tuples/$(DEPDIR)/$(am__dirstamp)
     930Tuples/TupleAssignment.$(OBJEXT): Tuples/$(am__dirstamp) \
     931        Tuples/$(DEPDIR)/$(am__dirstamp)
     932Tuples/TupleExpansion.$(OBJEXT): Tuples/$(am__dirstamp) \
     933        Tuples/$(DEPDIR)/$(am__dirstamp)
     934Validate/$(am__dirstamp):
     935        @$(MKDIR_P) Validate
     936        @: > Validate/$(am__dirstamp)
     937Validate/$(DEPDIR)/$(am__dirstamp):
     938        @$(MKDIR_P) Validate/$(DEPDIR)
     939        @: > Validate/$(DEPDIR)/$(am__dirstamp)
     940Validate/HandleAttributes.$(OBJEXT): Validate/$(am__dirstamp) \
     941        Validate/$(DEPDIR)/$(am__dirstamp)
     942
     943libdemangle.a: $(libdemangle_a_OBJECTS) $(libdemangle_a_DEPENDENCIES) $(EXTRA_libdemangle_a_DEPENDENCIES)
     944        $(AM_V_at)-rm -f libdemangle.a
     945        $(AM_V_AR)$(libdemangle_a_AR) libdemangle.a $(libdemangle_a_OBJECTS) $(libdemangle_a_LIBADD)
     946        $(AM_V_at)$(RANLIB) libdemangle.a
    548947install-cfa_cpplibPROGRAMS: $(cfa_cpplib_PROGRAMS)
    549948        @$(NORMAL_INSTALL)
     
    588987clean-cfa_cpplibPROGRAMS:
    589988        -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)
    596989CodeGen/Generate.$(OBJEXT): CodeGen/$(am__dirstamp) \
    597990        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)
    602991CodeGen/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) \
    607992        CodeGen/$(DEPDIR)/$(am__dirstamp)
    608993CodeTools/$(am__dirstamp):
     
    6161001CodeTools/TrackLoc.$(OBJEXT): CodeTools/$(am__dirstamp) \
    6171002        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)
    6261003Concurrency/Waitfor.$(OBJEXT): Concurrency/$(am__dirstamp) \
    6271004        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)
    6381005Common/DebugMalloc.$(OBJEXT): Common/$(am__dirstamp) \
    639         Common/$(DEPDIR)/$(am__dirstamp)
    640 Common/Assert.$(OBJEXT): Common/$(am__dirstamp) \
    6411006        Common/$(DEPDIR)/$(am__dirstamp)
    6421007Common/Heap.$(OBJEXT): Common/$(am__dirstamp) \
    6431008        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)
    6621009ControlStruct/ExceptTranslate.$(OBJEXT):  \
    6631010        ControlStruct/$(am__dirstamp) \
    6641011        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)
    6711012GenPoly/Box.$(OBJEXT): GenPoly/$(am__dirstamp) \
    6721013        GenPoly/$(DEPDIR)/$(am__dirstamp)
    673 GenPoly/GenPoly.$(OBJEXT): GenPoly/$(am__dirstamp) \
    674         GenPoly/$(DEPDIR)/$(am__dirstamp)
    6751014GenPoly/ScrubTyVars.$(OBJEXT): GenPoly/$(am__dirstamp) \
    676         GenPoly/$(DEPDIR)/$(am__dirstamp)
    677 GenPoly/Lvalue.$(OBJEXT): GenPoly/$(am__dirstamp) \
    6781015        GenPoly/$(DEPDIR)/$(am__dirstamp)
    6791016GenPoly/Specialize.$(OBJEXT): GenPoly/$(am__dirstamp) \
     
    6831020GenPoly/InstantiateGeneric.$(OBJEXT): GenPoly/$(am__dirstamp) \
    6841021        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)
    6931022InitTweak/FixInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
    6941023        InitTweak/$(DEPDIR)/$(am__dirstamp)
    6951024InitTweak/FixGlobalInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
    6961025        InitTweak/$(DEPDIR)/$(am__dirstamp)
    697 InitTweak/InitTweak.$(OBJEXT): InitTweak/$(am__dirstamp) \
    698         InitTweak/$(DEPDIR)/$(am__dirstamp)
    6991026Parser/parser.hh: Parser/parser.cc
    7001027        @if test ! -f $@; then rm -f Parser/parser.cc; else :; fi
    7011028        @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)
    7081029Parser/parser.$(OBJEXT): Parser/$(am__dirstamp) \
    7091030        Parser/$(DEPDIR)/$(am__dirstamp)
     
    7241045Parser/TypeData.$(OBJEXT): Parser/$(am__dirstamp) \
    7251046        Parser/$(DEPDIR)/$(am__dirstamp)
    726 Parser/LinkageSpec.$(OBJEXT): Parser/$(am__dirstamp) \
    727         Parser/$(DEPDIR)/$(am__dirstamp)
    7281047Parser/parserutility.$(OBJEXT): Parser/$(am__dirstamp) \
    7291048        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)
    7541049ResolvExpr/AlternativePrinter.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
    7551050        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)
    8841051Virtual/$(am__dirstamp):
    8851052        @$(MKDIR_P) Virtual
     
    8971064        @rm -f ../driver/cfa-cpp$(EXEEXT)
    8981065        $(AM_V_CXXLD)$(CXXLINK) $(___driver_cfa_cpp_OBJECTS) $(___driver_cfa_cpp_LDADD) $(LIBS)
     1066SymTab/demangler.$(OBJEXT): SymTab/$(am__dirstamp) \
     1067        SymTab/$(DEPDIR)/$(am__dirstamp)
     1068
     1069demangler$(EXEEXT): $(demangler_OBJECTS) $(demangler_DEPENDENCIES) $(EXTRA_demangler_DEPENDENCIES)
     1070        @rm -f demangler$(EXEEXT)
     1071        $(AM_V_CXXLD)$(CXXLINK) $(demangler_OBJECTS) $(demangler_LDADD) $(LIBS)
    8991072
    9001073mostlyclean-compile:
     
    9851158@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/Unify.Po@am__quote@
    9861159@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Autogen.Po@am__quote@
     1160@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Demangle.Po@am__quote@
    9871161@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/FixFunction.Po@am__quote@
    9881162@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Indexer.Po@am__quote@
    9891163@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Mangler.Po@am__quote@
     1164@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/ManglerCommon.Po@am__quote@
    9901165@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Validate.Po@am__quote@
     1166@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/demangler.Po@am__quote@
    9911167@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/AddressExpr.Po@am__quote@
    9921168@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/AggregateDecl.Po@am__quote@
     
    11361312check: $(BUILT_SOURCES)
    11371313        $(MAKE) $(AM_MAKEFLAGS) check-am
    1138 all-am: Makefile $(PROGRAMS)
     1314all-am: Makefile $(LIBRARIES) $(PROGRAMS)
    11391315installdirs:
    11401316        for dir in "$(DESTDIR)$(cfa_cpplibdir)"; do \
     
    12091385clean: clean-am
    12101386
    1211 clean-am: clean-cfa_cpplibPROGRAMS clean-generic mostlyclean-am
     1387clean-am: clean-cfa_cpplibPROGRAMS clean-generic clean-noinstLIBRARIES \
     1388        mostlyclean-am
    12121389
    12131390distclean: distclean-am
     
    12791456
    12801457.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
     1458        clean-cfa_cpplibPROGRAMS clean-generic clean-noinstLIBRARIES \
     1459        cscopelist-am ctags ctags-am distclean distclean-compile \
     1460        distclean-generic distclean-tags distdir dvi dvi-am html \
     1461        html-am info info-am install install-am \
     1462        install-cfa_cpplibPROGRAMS install-data install-data-am \
     1463        install-dvi install-dvi-am install-exec install-exec-am \
     1464        install-html install-html-am install-info install-info-am \
     1465        install-man install-pdf install-pdf-am install-ps \
     1466        install-ps-am install-strip installcheck installcheck-am \
     1467        installdirs maintainer-clean maintainer-clean-generic \
     1468        mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
     1469        ps ps-am tags tags-am uninstall uninstall-am \
     1470        uninstall-cfa_cpplibPROGRAMS
    12931471
    12941472.PRECIOUS: Makefile
  • src/ResolvExpr/AlternativeFinder.cc

    rf7d3215 r72b3605  
    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/TypeEnvironment.cc

    rf7d3215 r72b3605  
    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

    rf7d3215 r72b3605  
    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

    rf7d3215 r72b3605  
    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/module.mk

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

    rf7d3215 r72b3605  
    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;
Note: See TracChangeset for help on using the changeset viewer.