Changed the storage of offsets from bytes to bits to better handle bitfields.
Added code to track classes that are defined within other classes and are
private/protected. These classes cannot be used in templates because our
io_src code declares variables outside of the class that would try and use
these private/protected variables. When a template is found to use a
private/protected class it is skipped.
refs #218
Removed the requirement of passing flags throughout ICG indicating if we are
in an inherited class or not. Removed the init_attr friends throughout
Trick core headers.
Moved field offset calculations for inherited classes to when the inherited
classes are processed. This removes the need to have to remember if fields
were inherited or not, the offset already reflects the correct offset.
refs #218
Mostly working. This removes the use of offsetof from all I/O code. This was
the only reason we needed friends. In it's place we put the offset value that
clang has calculated for the field. Still need to work on virtually inherited
classes and confirm bitfields.
refs #218
Modified ICG to save the non-canonical name for STLs. This is typically more readable
because it is shorter. Added code to the variable server to filter out requests accessing
STLs, because those accesses will not currently work.
refs #206
When we parse header files and find std::basic_string we change that to std::string.
Added a check for std::__cxx11::basic_string to do the same. We also carry a
list of STL names, added std::__cxx11::[template_name] to the list of possilbe STL
names we are searching for.
refs #214
Initial checkin of STL checkpointing. This checkin only covers the sequential
STLs, vector, list, deque, set, and multiset. This checkin does include the
changes in Trick header files to include/exclude our STLs properly to make a
restartable checkpoint.
refs #206
Maybe this is the last time we visit this issue, probably not. We were not
processing typedefs of templates correctly... I found a way to process
all templates whether they are the actual template, or a typedef of a template,
through the same code. They were separate before. Fixing this issue has
reduced the overall line count in FieldVisitor. That leads me to believe
we're on the right track.
refs #203
I found that in ICG I have access to the canonical type of a variable which
in most cases is the type I should process. Doing this eliminates the
need for some of the code that resolved typedefs because the canonical type
has already done that.
refs #200
Interesting case. I found that we should process the canonical type names where
we were not before. This resolves all typedefs and should be be more
accurate in the future. When we process the canonical type we need to ignore
the processing of the non-canonical type. We set a flag after
the canonical type is processed to ignore any type that is processed after.
refs #198
We pull file names out of the clang infrastructure to match where
classes are defined. We use the file name to pull comments and find
and process Trick header comments. Up to now clang gave us the realpath
of files and when we looked up comments we already had the realpath and
everything worked. In clang 3.6 in some places we are not getting the
realpath anymore which confuses ICG. Added code to get the realpath of
any file name we use throughout the code.
refs #167
I want Trick to parse and understand ODE header files. The ODE header files
include some typedef constructs ICG was skipping. Added code to handle the
typedefs we did not handle before. Also made a small change the way
TRICK_ICG_EXCLDUE and TRICK_EXCLUDE are used so that they support excluding
individual files as well as directories.
When a template is in a namespace the type that is marked for the node containing
the full definition of the type is elaborated. We need to go into
the elaborated name and get the underlying type. Added code to do this
and tests to see if the type we are checking is itself a template or the
elaborated type is a template. Sorry, this probably only makes sense to me.
refs #124
Wrote a python routine called get_value_by_ref_name that takes
a variable name string as an argument. The string is passed to
ref_attributes to find the address and returns a REF2 structure. The REF2
structure is passed to ref_to_value and the type and value of the variable
is returned in a structure. We call vval_<type> to extract the raw value
from the structure and return that to python space.
Made a couple of other bug fixes in the FieldVisior and cpp input file
example found while investigating this issue.
refs #123
Changed parenthesis to curly brace... er I mean curly bracket. Well too late, in
the code I called it curly brace. It's these "{}". Oh well. Also found that the
dependency_only headers were not actually reading the dependencies. Added the list
of dependency only files to the list of files to get dependencies from.
refs #114
Added new doxygen style tags for truning on/off Trick attributes processing,
comment processing, and library dependencies. Here are the tags we recognize
(@|\)trick_parse(everything|attributes|dependencies_only)
(@|\)trick_exclude_typename(class_name)
(@|\)trick_link_dependency(link_name)
refs #114
Created TRICK_SYSTEM_CFLAGS, TRICK_SYSTEM_CXXFLAGS, and TRICK_SYSTEM_SFLAGS
that Trick uses to add the Trick system includes, defines and other
compilation flags. TRICK_CFLAGS and TRICK_CXXFLAGS are now in
full control of the user.
refs #90
Added a new TRICK_EXT_LIB_DIRS variable that allows users to
tell Trick about external libraries, rather than trying to
use TRICK_EXCLUDE. Added back getting multiple library dependency
sections from source files.
refs #86
After about 6 unsuccessful builds I decided to run the unit tests
before checking in these files. I fixed the integrator unit
test that was failing from a previous issue along with problems
with the sims.
refs #86
First tests are working. Changing a source file and header works
as before. Adding library dependencies in either of these files
causes the makefile pieces to be redone. Only tested in the ball
sim so far.
refs #86
Functioning build directory on Linux. Everything is going into the build directory.
All files for all steps use the full path. this change removes the need for us to
call depend_objs to fix makefile dependencies. Changed the makefile rules to use
more pattern rules reducing the size of make_makefile.pm and the makefile too.
Changed the output of make to show short commands for each compile line. Setting
the variable TRICK_VERBOSE_BUILD in the environement, command line, or in S_overrides.mk
will change the output to the full printout.
refs #80
Moved most generated files into the build directory. All object code,
io_src realated files, and swig related files are now in build.
Realized that ICG should be creating the makefile for the io_src
code. ICG knows which files it created.
refs #80
Added 2 flags to trick-ICG. "-o" will specify an output directory. Added this
option to the calls to trick-ICG for the Memory Manager tests. Also added
a "-m" option to create the map files ICG creates for sims. The memory manager
tests do not need these maps so we don't include the option. Added the -m option
to the sim makefile and the master makefile so we do create the map when compile
Trick core and sims.
refs #72
Added /usr/local to the list of search directories in the configure script
for the motif header files. Added -lc++abi to the list of link libraries.
refs #66
The clang path created uses the patchlevel which prior to 3.4 was not used by
clang. This resulted in a bad being created and eventually an llvm assertion
error. Added a compiler ifdef so that the patchlevel is not used before 3.4
refs #65
Tried using clang/llvm from ubuntu distribution. Needed to change the include directory for compiling ICG. Also found that
the clang include files can be in a linked directory. Used realpath to make sure we have the absolute path.
refs #63
Found that on the Mac ICG was ignoring all of header files comments in ${TRICK_HOME}/include because it had the relative directory "include" listed as a system path. Comments were only processed if it wasn't in a system directory. Changed the check to use our function that checks to see if a header is in user or Trick code, basically the same check, but it only uses full paths and doesn't get confused with "include".
refs #63
On some systems llvm-config includes -ledit as a system library to link with. Our application doesn't need -ledit and sometimes that library is not installed. I filtered out that library in the makefile.
refs #63
Modified the makefile for ICG to be able to use clang from yum, fink, and manual installs. Removed the requirement for copying the clang friendly header files into Trick. However Trick will be expecting the clang header files to be in it's search path.
refs #40
Moved the io_src code created by sim_services to sim_servivces/include. Also found some makefiles that needed to be changed to refer to the makefiles in their new locations.
refs #63
Reorganized. Created a new top level include directory that will hold all of Trick's header files. Moved all of the Trick headers to this directory. Created a libexec directory that holds all of the executables that users don't need to execute directly. Changed all of the executables remaining in bin to start with "trick-". In the sim_services directories changed all source files to find the Trick headers in their new location. Since all of the include files are gone in sim_services, removed the src directories as well, moving all of the source files up a level. Moved the makefiles, docs, man, and other architecture independent files into a top level share directory. Renamed lib_${TRICK_HOST_CPU} to lib64 or lib depending on the platform we're currently on.
refs #63
I think I ran into this before. The offsetof calls that use
fully qualified fields in classes is not compilable using clang
on the Mac. So I've decided to only conditionally compile this
code for non Apple platforms. So this fix will work in Linux,
but not on Macs. We'll have to revisit this and see if we
can make it work for both.
refers to #31
When a field is processed in a class it is added to a list. This list
will contain the fields from base classes the current class inherits
from. We check the list of fields we inherited, if we find that the
current field overloads the name of an inherited field we adjust the
inherited field's name to be shown as the fully qualified name in io_src
code.
Fixes#31
Found that my check for embedded classes was also catching some typedef structures.
This was causing some io_src code not to be generated. Changed the test so that
we can differentiate between embedded classes and the typedefs.
This change fixes#10 and fixes#23.
Changed all header file once include variables to follow the same naming
convention and not start with any underscores. Also deleted old
incorrect copyright notices. Also removed $Id: tags from all files.
Fixes#14. Fixes#22.
The calling argument to setASTConsumer changed between clang 3.5
and 3.6. Changed the code to create a std::unique_ptr that the
call now requires and call setASTConsumer with the unique pointer.
Fixes#15