IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an
email to Administrator. User accounts are meant only to access repo
and report issues and/or generate pull requests.
This is a purpose-specific Git hosting for
BaseALT
projects. Thank you for your understanding!
Только зарегистрированные пользователи имеют доступ к сервису!
Для получения аккаунта, обратитесь к администратору.
AutoloadCallback: Implementing InterpreterCallbacks to attach the module to cling
The main focus is on overriding LookupObject so that the information about
lookup failures are obtained from clang.
The type of the name is not taken into consideration for now.
TagManager: To manage and lookup information from various sorts of tag files.
Currently a TagManager object is owned by the callback system.
This may change in future.
Wrapper: As a base class for handling particular types of tagfiles.
The TagManager maintains a container of Wrappers.
CtagsFileWrapper: Implementing a wrapper for ctags.
This class is responsible for generating a tagfile from a given path or list of files.
It also performs lookups in the file generated by it.
And a few simple file system utils to complement llvm::sys::fs and path utilities
When a file is unloaded its entry should be removed from MetaSema::m_WaterMarks.
At the moment the corresponding callback is not implemented.
Instead, we also record the relation <Transaction*,Entry*>, so that upon
MetaSema requesting an unload, we can clean-out the corresponding data
from m_WaterMarks.
In addition, to catch the case where the target transaction (unloadPoint)
is not longer present we issue an error and do not unload anything.
We keep the FileEntry -> Transaction mapping so that next time there is .L
we can figure out that it was already loaded and unload it and reload it again.
Implementation of .files moved in the Interpreter.cpp
storeState now calls three functions: dumpAST(), dumpLookup(), printIncludedFiles().
compareState now calls three functions: compareAST(), compareLookup(), compareIncludedFiles().
It's working for the included files and the AST, and it needs a new patch for
being able to dump the lookup tables (we cannot use dumpLookups() for the moment).
There are cases where cling needs to 'rollback' its state to a previous one.
Examples for that are cling's error recovery and code unloading. This can become
easily tricky to implement. One step reducing the complexity is the verification
of the 'interesting' data structures.
Implement .storeState and .compareState commands, which dump the internal compiler
data structures like AST (implemented), included files (in progress) and lookup
tables (unimplemented yet). The information is dumped into a file and then that
file is diff-ed to the one taken with .compareState. If they were identical all
files are deleted otherwise a .diff file with the differences remains for debug.
The issue we experienced is that we couldn't pipe the output in the terminal.
The reason is that we were using llvm::outs() which closes explicitly the file
descriptor (thanks Axel for the help debugging).
We introduce our custom stream, which keeps the file descriptor open so that
we can use it in pipes. For debugging purposes, however we use/should use llvm::errs()
The lesson learned:
DONT USE LLVM::OUTS() ANYMORE!
git-svn-id: http://root.cern.ch/svn/root/trunk@48316 27541ba8-7e3a-0410-8455-c3a389f83636