Changes for version 0.48 - 2018-02-02

  • Ben Bullock <benkasminbullock@gmail.com>
    • indent the heredocument part of the code correctly
  • Ivan Baidakou <basiliscos@openmailbox.com>
    • Fix issue with shared dir
  • Jean-Damien Durand <jeandamiendurand@free.fr>
    • Recommend to start with MarpaX::Languages::C::Scan
    • Fix cdecl after directAbstractDeclarator change in the grammar
    • dist.ini: Git::Contributors instead of ContributorsFromGit
    • A directAbstractDeclarator does not create scopes
    • gcc asm can contain nothing alter the ':' character
    • Switch to File::ShareDir, closes #13
    • Profiling dev+
    • Fix finding of parsed function declaration at the TOP LEVEL
    • csl.xsl: do not take parameterDeclaration by default
    • csl: recurse number
    • csl: added missing specifierQualifierList
    • csl: dev+
    • hsl: dev+
    • perl5.xsl: dev+
    • xslt/perl5.xsl: dev+
    • ISO_ANSI_C_2011/Scan.pm: export of xslt() and content() methods
    • bin/cscan: POD fix
    • ISO_ANSI_C_2011/Scan.pm: fix usage of temp filehandle
    • ISO_ANSI_C_2011/Scan.pm: switch to the more portable IO::CaptureOutput module
    • Grammar/ISO_ANSI_C_2011.pm: Removed non-needed (seems to me) MSVS___C_ASSERT, added more MSVS compatibility stuff
    • perlcritic
    • perlcritic.rc: allow_includes
    • bin/c2ast: remove mention of cpretty
    • xpath/declaration2declarator.xpath: unused
    • t/scan.t: handle different cpp behaviours v.s. space
    • bin/cscan: --lazy, --typedef and --enum options
    • bin/c2ast: Removed unnecessary use File::ShareDir::ProjectDistDir
    • bin/c2ast: Removed all experimental stuff with Template
    • Impl/Logger.pm: github issue #9 with latest Log::Any
    • bin/cdecl: move print of STDOUT/STDERR before the exit
    • bin/cscan: enumType default is int
    • bin/cscan: better handling of C::Scan returned object type
    • replae method: dev+
    • Scan/Actions.pm: fix very last action
    • AST/Util.pm: fix POD error
    • In nocpp init phase, fix read of buffer
    • ISO_ANSI_C_2011/Scan.pm: nocpp option, pass other options as-is to AST->new(), do not call all methods systematically
    • Grammar/ISO_ANSI_C_2011.pm: Fixed an error in labeledStatement introduced when adding gcc extension case A ... B
    • bin/cscan: show that file argument is optional in the help
    • bin/cdecl: wrapper around bin/cscan
    • bin/cscan: automatic - for last argument if nothing left and no --in option, mention cdecl in the help
    • cdecl test suite
    • ISO_ANSI_C_2011/Scan.pm: _readFunctionArgs() should always return $last node
    • cdecl: _readToId() need sometimes to distinguish stack up to the first declarator and later
    • bin/cscan: fix test of filename v.s. filesystem case tolerance
    • bin/cscan: fix default --filter option value
    • ISO_ANSI_C_2011/Scan.pm: fix eventual crash with fc()
    • --filter default option value is basename of last argument
    • xpath/enumerators.xpath: list of all enumerators
    • cdecl: enum support
    • bin/cscan: --enumType option
    • cdecl: struct fixes
    • ISO_ANSI_C_2011/Scan.pm: dev+ on embedded definitions - almost done -;
    • cdecl: reduction
    • xpath/missingIdentifier.xpath: xpath fix
    • Grammar/ISO_ANSI_C_2011.pm: unhide single SEMICOLON lexeme in case of empty declaration
    • Scan/Actions.pm: getRuleDescription() method
    • missingIdentifier: better solution using xpath, IMHO -;
    • ISO_ANSI_C_2011/Scan.pm: fake identifiers dev+
    • xpath/missingIdentifier.xpath: fake identifiers dev+
    • ISO_ANSI_C_2011/Scan.pm: log improvement
    • ISO_ANSI_C_2011/Scan.pm: ellipsis and comma fixes
    • ISO_ANSI_C_2011/Scan.pm: restoring commas dev+
    • xpath/missingComma.xpath: xpath to recover commas removed by Marpa's separator keyword: cdecl relies on it
    • ISO_ANSI_C_2011/Scan.pm: revert last thingy - solution is deeper
    • ISO_ANSI_C_2011/Scan.pm: cdecl ellipsis fix
    • ISO_ANSI_C_2011/Scan.pm: minor typos fixes
    • ISO_ANSI_C_2011/Scan.pm: cdecl dev+
    • bin/cscan: add log options and support of -
    • Scan/Actions.pm: removed unused "use"
    • bin/cdecl: dev+
    • bin/cdecl: logging stuff
    • bin/cdecl: --input argument
    • bin/cdecl: POD fixes
    • dev+
    • xslt/perl5: dev+
    • ISO_ANSI_C_2011/Scan.pm: _getNodeFile becomes back _pushNodeFile and can automatically set the file attribute
    • ISO_ANSI_C_2011/Scan.pm: renamed _pushNodeFile to _getNodeFile
    • ISO_ANSI_C_2011/Scan.pm: _pushNodeFile fix
    • bin/c2bind: log as info instead of trace sometimes
    • bin/c2bind: fix POD
    • bin/c2bind: revival
    • dev+: back to TT
    • bin/c2ast: dev+ on elements values
    • bin/c2ast: dev+ on xslt dependencies
    • bin/c2ast: work on paths for xslt
    • xpath/topDeclarations.xpath: needed for C::Scan
    • bin/c2ast: dev+ for bindings
    • Grammar/ISO_ANSI_C_2011.pm: add name for lexeme default value - impact on test suite
    • Data/Find.pm: Add endOfElement callback
    • Grammar/ISO_ANSI_C_2011.pm: add name for lexeme default value
    • bin/c2ast: reorg of used modules + Template preparation
    • ISO_ANSI_C_2011/Scan.pm: say which xpath is used + topDeclarations file attribute
    • bin/cscan: mention topDeclarations
    • t/complex_declarations.t: more complex declaration
    • Grammar/ISO_ANSI_C_2011.pm: rename gccArrayTypeModifierList to typeQualifierlist
    • t/complex_declarations.t: who knows
    • bin/c2bind: fix @ARGV a-la cscan
    • bin/c2bind: fix a comment
    • bin/c2bind prototype
    • bin/cscan: fix help
    • cosmetics
    • fdecls fixes
    • s/scan.t: typedef_structs fixes
    • ISO_ANSI_C_2011/Scan.pm: typedef addons
    • ISO_ANSI_C_2011/Scan.pm: vdecl addons
    • ISO_ANSI_C_2011/Scan.pm: start adding file information
    • ISO_ANSI_C_2011/Scan.pm: macros revisit
    • ISO_ANSI_C_2011/Scan.pm: fix modification of non-creatable array value attempted, subscript -1
    • Getting rid of XML::Simple, finally
    • AST/Util.pm: fix line and column count
    • cscan: prepare for supression of XML::Simple
    • cscan: restore some xml behaviour
    • Removed shared xsd/cscan.xsd
    • use File::ShareDir::ProjectDistDir
    • bin/cscan: Rephrasing a bit in the POD
    • bin/cscan: Removed unused asHash option
    • Method astToString and cscan
    • ISO_ANSI_C_2011/Scan.pm: removed a print to STDERR
    • Grammar/ISO_ANSI_C_2011.pm: careful use of separator v.s. proper
    • typedef_texts a-la xpath
    • typedef_hash a-la xpath
    • share/xpath/xsd2fdecls.xpath: exclude path having structDeclarationList from fdecls candidates
    • share/xpath/xsd2fdecls.xpath: exclude TYPEDEF from fdecls candidates
    • Move to a correct solution and process the tree using XML::LibXML (until a Marpa XML parser -;)
    • Grammar/ISO_ANSI_C_2011.pm: forget around structContext internal rule in the value
    • ISO_ANSI_C_2011/Scan.pm: prepare for use of Scan/Actions.pm
    • Grammar/ISO_ANSI_C_2011.pm: use semantics_package instead of obsolete action_object
    • Scan/Actions.pm: specific Scan actions
    • C/AST.pm: actionObject, nonTerminalSemantic and terminalSemantic arguments to grammar
    • Grammar/ISO_ANSI_C_2011.pm: added configurable action object, reworked internal variable names
    • Grammar/ISO_ANSI_C_2011.pm: added configurable non-terminal and terminal semantic actions
    • work on cscan.xsd
    • work on _pushRcp
    • share/xsd/cscan.xsd
    • merge conflict
    • ISO_ANSI_C_2011/Scan.pm: typedefs_structs fix in case of opaque struct forward declaration
    • Grammar/ISO_ANSI_C_2011/Scan.pm: fix typedef_structs
    • Grammar/ISO_ANSI_C_2011.pm: allow empty externalDeclaration
    • Grammar/ISO_ANSI_C_2011.pm: allow no translation unit
    • ISO_ANSI_C_2011/Scan.pm: cleaned bloated _buildContext()
    • xslt: dev+
    • ISO_ANSI_C_2011/Scan.pm: fix undef args
    • Grammar/ISO_ANSI_C_2011.pm: Support of GCC case ranges
    • ISO_ANSI_C_2011: Support of GCC escape ESC character
    • ISO_ANSI_C_2011/Scan.pm: list fixes
    • t/struct.t: add a function declaration in struct
    • Callback/Events.pm: force struct counter to have a persistence level to "level", add these counters to parameterDeclarationCheck
    • Callback/Events.pm: added missing counters in topic data, that caused parse table to be processed even in struct context
    • t/struct.t: renamed misleading identifier "free" to "this"
    • t/struct.t: case that failed with 0.36-TRIAL
    • t/obscure_typedef_*style.t : change comment
    • bug fix with parameter not obscuring typedef
    • bin/c2ast: missing --trace option
    • rulesByDepth: sort by ruleId eventually
    • ruleByDepth: use rule_name and put more info the result
    • use Marpa::R2 2.081001
    • rulesByDepth
    • POD update
    • bin/c2ast: Mention '-' for STDIN usage in the POD and fix log info about it
    • bin/c2ast: Support STDIN, loglevel aliases on the command-line, optional start (dev+), add INFO level logging to bin/c2ast
    • optional :start, dev+
    • AST/Impl.pm: use Marpa::R2 2.080000
    • ISO_ANSI_C_2011/Scan.pm: ft can be '0', so use // instead of ||
    • Test suite and CPP different behaviour v.s. OS
    • bin/c2ast: --lazy, --typedef, --enum and --nocpp options
    • AST.pm: mod POD for lazy mode
    • AST.pm: even in lazy mode we can use typedef/enum helpers
    • AST.pm: type, enum and lazy options support. Preparation for start option support
    • AST/impl.pm: added lexeme_alternative() and lexeme_complete()
    • bin/*: say that filename must be the last argument when using unknown option(s)
    • Optimization bis
    • Global optimization
    • Callback/Events.pm : optimization
    • t\delayed_directDeclaratorIdentifier.t: more tests
    • Grammar/ISO_ANSI_C_2011.pm: need for a special lexeme in compoundStatementReenterScope
    • Scope management: delay flag should be per scope, closing a scope should recursively its parent if it is marked delayed
    • Callback/Events.pm: delayed directDeclaratorIdentifier test
    • Callback/Events.pm: fixed a vicious case where directDeclaratorIdentifier is not yet propagated into declarationCheckinitDeclaratorList
    • Removed unwanted file from previous commit
    • bin/c2ast: fix pod2usage call
    • bin/cscan: pass through of arguments, fix POD output
    • Grammar/ISO_ANSI_C_2011.pm: unmask gccExtension
    • ASM.pm: added a NOTES section
    • Removed work files
    • t/*.t: alwys call value()
    • Opaque ASM support for everything not GCC inline ASM
    • AST/Util.pm: force non true space to a true space for error reporting
    • AST/Util.pm: Fixed $log->fatalf() arguments
    • MASM: dev+
    • work/MSASM2.pl: dev+
    • work/MSASM.bnf: fixed end of buffer detection + use forgiving
    • work/MSASM.bnf: add end of buffer to endOfLine
    • work/MSASM.bnf: dev+
    • Revert "work/MSASM.bnf: dev+"
    • work/MSASM.bnf: :discard rule dev+
    • MSASM.bnf: dev+
    • Impl.pm: Bump Marpa::R2 dependency to version 2.078000
    • Grammar/ISO_ANSI_C_2011.pm: use insentitive lexemes for MASM
    • AST.pm: Reduce the number of calls to value()
    • dist.ini: Move [OSPrereqs / MSWin32] after [MakeMaker]
    • Grammar/ISO_ANSI_C_2011.pm: ambiguity with msvsAsmType
    • ISO_ANSI_C_2011/Scan.pm: Environment variables support for cpprun and cppflags, Shell quoting when executing the preprocessor
    • dist.ini: Win32::ShellQuote on MSWin32
    • examples/h2xs.PL : Marpa aware version
    • ISO_ANSI_C_2011/Scan.pm: more protections
    • ISO_ANSI_C_2011/Scan.pm: parsed_fdecls is not interested by typedef'ed functions declarations, prevent more undefined to be inserted
    • bin/cscan: fixed mod example, "mytype" should read "double"
    • ISO_ANSI_C_2011/Scan.pm: mod is setted via an appended, its separator is empty
    • Removed unused blog file and dir
    • ISO_ANSI_C_2011/Scan.pm: no splice if not necessary, exhibits a test failure under perl <= 5.14
    • bin/cscan: --in option
    • bin/cscan: --out and --err options, yet another --xpath example
    • bin/cscan: fix $xml usage confusion in source
    • bin/cscan: revisited example to find declared strings
    • bin/cscan: example for find declared strings
    • bin/cscan: say that get method are for C::Scan like methods
    • bin/cscan: removed a debugging print STDERR
    • bin/cscan: say in the abstract this is a C::Scan alternative
    • bin/cscan: no critic on the eval (bis)
    • bin/cscan: no critic on the eval
    • bin/c2ast: perlcritic
    • c2ast.pl -> c2ast
    • say that c2ast.pl is now c2ast
    • bin/cscan: more examples with --cppflags
    • bin/cscan: another example taking about inner anonymous types
    • bin/cscan : implementation of --xml and --xpath options
    • ISO_ANSI_C_2011/Scan: fix calculation of line number
    • t/scan.t: skip file/line information in tests dev+
    • ISO_ANSI_C_2011/Scan.pm: line calculation dev+
    • ISO_ANSI_C_2011.pm: <DATA> should be loaded once
    • bin/scan: xpath preparation
    • ISO_ANSI_C_2011/Scan: function type is not inherited
    • bin/cscan: generic get argument
    • ISO_ANSI_C_2011/Scan.pm: original filename processing fix
    • bin/cscan : a very special replacement for POD not generated at run time
    • ISO_ANSI_C_2011/Scan.pm: perlcritic on $_
    • t/scan.t: fix following removal of use C::Scan
    • ISO_ANSI_C_2011/Scan.pm: typo that exhibits under perl <= 5.12
    • t/scan.t: remove use C::Scan
    • use #!perl for shebang (same effect as #!/usr/bin/perl but I prefer the former)
    • bin/c2ast.pl: fix some POD formatting
    • cscan cmdline prototype
    • Commented C::Scan comparison in tests - too many failures
    • Yet POD fixes
    • Scan.pm: update SYNOPSIS
    • release trial fixes
    • C::Scan cmp MarpaX::Languages::C::Scan
    • typedefs_structs test and change following before/after fix
    • ISO_ANSI_C_2011/Scan.pm : missing enum in KEY2ID and fix before/after as per C::SCan
    • ISO_ANSI_C_2011/Scan.pm: POD fix
    • ISO_ANSI_C_2011/Scan: POD fixes
    • vdecl_hash test
    • vdecls test
    • typedef_texts and typedefs_maybe tests
    • ISO_ANSI_C_2011/Scan: sort explicitely when output is a map on hash result
    • scan.t: typedef_hash test
    • scan.t: t+
    • parsed_fdecls test
    • ISO_ANSI_C_2011/Scan.pm: Fix bug in _analyseDirectAbstractDeclarator, missing checks in _prependRcp and _appendRcp
    • ISO_ANSI_C_2011/Scan.pm: Fix POD and 'ty' in parsed_fdecls in case of a function
    • ISO_ANSI_C_2011/Scan.pm: Fixed PURGE_IDX value, removed unused _copyRcp
    • C::Scan t+
    • C::Scan integration: t+
    • use Pod::Usage
    • c2ast.pl: say that unknown options are sent to cpp
    • import C::Scan-like module
    • AST.pm: Initial line number should be 1 instead of 0
    • c2ast.pl: move File::Spec->canonpath at a better place
    • c2ast.pl: use File::Spec->canonpath before file comparison
    • comment #7
    • Grammar/ISO_ANSI_C_2011.pm: Added missing priority for IDENTIFIER_UNAMBIGUOUS
    • bin/c2ast.pl: typo in usage
    • t/gcc_extension.t: tests
    • ISO_ANSI_C_2011.pm: restored (gccExtension) rhs in specifiers declarations
    • ISO_ANSI_C_2011.pm: moved misplaced (gccExtension) rhs
    • Fixed reference data
    • Remove unused event
    • Runtime optimization
    • Remove usage of clone
    • Fix show source when failure is on paused lexeme
    • use Clone instead of Storable
    • Removed unused import
    • runtime optimization
    • renamed cached ncb from _ncb to _cacheNcb
    • Avoid one internal match
    • Cases where IDENTIFIER is not ambiguous
    • Modifications as per yafce
    • runtime optimizations
    • MSVS's .type could eat C lexemes DOT and 'type'
    • Back to version with GCC extension in the grammar
    • Fix errors let by previous commit
    • Discard GCC __extension__
    • Removed unused event
    • More GCC asm tests
    • New reference data
    • Removed gccEmptyRule, Support of GCC asm goto
    • Newline stuff (Marpa i.e. unicode v.s. only \n)
    • Work on newline
    • Work on typedef priority
    • Removed ASM pause before preparation
    • GCC_ASM token can also be "asm"
    • New version of reference data
    • Support of binary constants (GCC extension)
    • __asm G1 preparation
    • _doPauseAfterLexeme renamed to ->doPauseBefore
    • <G0 anything but space> replaced by <G0 constant>
    • GCC __extension__ ony once for expression
    • GCC __extension__ cannot be in :discard
    • :discard of __extension (GCC)
    • :discard of GCC __attribute__
    • renamed
    • Move GCC __attribute__ to :discard
    • Added missing MSVS __thiscall and __clrcall to function modifier
    • Move MSVS's __inline and __forceinline into generic INLINE lexeme
    • MSVS __declspec :discard test
    • Move __declspec to :discard
    • Try to make grammer more readable (2)
    • Try to make grammer more readable
    • Add missing MSVS declspec modifiers
    • Renamed t/discard_pragma.t to t/discard_MSVS_pragma.t
    • Remove logging
    • __pragma vtordisp
    • __pragma strict_gs_check
    • __pragma setlocale
    • __pragma section
    • __pragma runtime_checks
    • __pragma region/endregion
    • __pragma pop_macro/push_macro
    • __pragma pointers_to_members
    • __pragma pack
    • __pragma optimize
    • __pragma once
    • __pragma message
    • __pragma managed/unmanaged
    • __pragma make_public
    • __pragma loop
    • __pragma intrinsic
    • __pragma inline_recursion
    • __pragma inline_depth
    • __pragma include_alias
    • __pragma hdrstop
    • __pragma function
    • __pragma fp_contract
    • __pragma float_control
    • __pragma fenv_access
    • __pragma detect_mismatch
    • __pragma deprecated
    • __pragma conform
    • __pragma component
    • __pragma comment
    • bss_seg, code_seg, const_seg and data_seg share the same syntax
    • __pragma bss_seg fixes, add __pragma check_stack
    • test pragma bss_seg
    • pragma bss_seg
    • add comments
    • pragma warning fix
    • pragma test
    • pragma fix
    • Missing statement in pragma push
    • __declspec(deprecated) fix and __pragma alloc_text, auto_inline, warning discard
    • Support of logInfo __ALL__ continued
    • Fix reference data
    • __ALL__ special lexeme survey support, MSVS fixes
    • Document __ALL__ --lexeme value
    • Associate user-data to typedef and enum
    • new function startAndLength
    • deref nothing, revisit few sequences
    • Return true is something found
    • Push dirty files correctly
    • typedefPerScope and enumAnyScope accessors
    • scope object accessor
    • Fix default callback value
    • Better comment
    • Fix pod
    • v0.19
    • Call log only when its level is ok
    • Remove useless commented block
    • Remove non-needed events
    • Tiny optimization
    • v0.18
    • c2ast cc replacement example
    • stack based version as per jeffreykegler
    • Tiny optimisations
    • Tiny optimisation
    • --logstderr option
    • Fix doc
    • Remove non-needed use Config
    • Promote STRING_LITERAL_UNIT as lexeme
    • Remember logInfo parameter so that we do not log more than was it requested
    • Fix logInfo parameter
    • Trying to fix Changes content, some dirty things will lay out forever it seems
    • v0.17
    • c2ast.pl: typo in regexp
    • v0.16
    • Optimisations (ter)
    • v0.15
    • Lasy commit just to have git cached connection for dzil release
    • v0.14
    • Limit calls to last_completed
    • Fix format pull request #2
    • Ambiguity because of gcc
    • Doc update
    • Optimisations
  • Jeffrey Kegler <JKEGL@cpan.org>
    • Revise --cppfile help
  • jddurand <jeandamiendurand@free.fr>
    • ISO_ANSI_C_2011/Scan.pm: _classifyNode: do not rely on node adress when eating nodes
    • bin/cdecl: use IPC::Cmd for portability until I find another way

Documentation

C source analysis
C gibberish into english
C source scan (C::Scan alternative)
csl
C Header file transformation

Modules

Translate a C source to an AST
Simple but powerful callback generic framework that depend on nothing else but core modules.
Events callback when translating a C source to an AST
Code reference for the Simple callback generic framework.
Options for the Simple callback generic framework.
C grammar written in Marpa BNF
ISO ANSI C 2011 grammar written in Marpa BNF
ISO ANSI C 2011 grammar actions in Scan mode
Implementation of Marpa's interface
Log::Any implementation on top of Marpa
Scope management when translating a C source to an AST
C Translation to AST - Class method utilities
C::Scan-like interface
ISO ANSI C grammar actions in Scan mode