gencpp/project
Ed_ e74b498686 Removed the DSL macros, More fixes related to memory.
I commented out stuff related to type caching, I may not be using it. Depends on whether I want to keep the parent member in the ast.

DSL macros were removed, I want to keep the macros minimum for the api.
The varadic macros for the body may be problomatic if there is some bs vendor's are doing with memory layouts of structs that are not necessarily POD but only have the assignment operator overloaded.
Worst case I'll have to remove them.

Memory should be fine now to start doing iterations on the array test.

Parser constructors have been on hold for a while. They'll problably not be done until sometime in June.
2023-05-09 21:54:54 -04:00
..
Banned.define.hpp More design/major changes 2023-05-01 14:12:07 -04:00
Banned.undef.hpp More design/major changes 2023-05-01 14:12:07 -04:00
Bloat.cpp Docs update, parser impl design changes, AST::add fleshed out. 2023-04-22 22:24:55 -04:00
Bloat.hpp Started to fix some runtime bugs. 2023-05-08 20:54:24 -04:00
gen.cpp Removed the DSL macros, More fixes related to memory. 2023-05-09 21:54:54 -04:00
gen.hpp Removed the DSL macros, More fixes related to memory. 2023-05-09 21:54:54 -04:00
Readme.md Docs update, parser impl design changes, AST::add fleshed out. 2023-04-22 22:24:55 -04:00

Documentation

This library is currently in a bootstrapping phase.

Eventually it will have zero dependencies and have its code size severely constricted.

All dependencies are currently held within Bloat.hpp and Bloat.cpp

All the library code is contained in two files: gen.hpp and gen.cpp

Bloat.hpp/cpp

Currently acts as the isolation header for thridparty dependencies along with code not directly related to the library.

Organization:

  • ZPL inclusion and selective symbol exposure to global scope.
  • Utility macro definitions used throughout the library.
  • Global memory arena definition
  • Token string formatter
  • Formatted and Fatal Logs

The cpp contains the implementation of the global memory arena and the token formmatter.

Any global symbol pollution will be removed when dependencies are intergrated properly into the library.

gen.hpp

While getting fleshed out, all feature macros are defined on the top of the header.

These macros are:

  • GEN_DEFINE_DSL : Define the preprocessor DSL for using the library interface
  • GEN_DEFINE_LIBRARY_CORE_CONSTANTS : Optional typename codes as they are non-standard to C/C++ and not necessary to library usage
  • GEN_ENCORCE_READONLY_AST : Defines checks in Code when accessing the AST to make sure readonly marked ASTs are not mutated
  • GEN_FEATURE_INCREMENTAL : Defines the incremental constructors
  • GEN_FEATURE_PARSING : Defines the parse constructors
  • GEN_FEATURE_EDITOR : Defines the file editing features for changing definitions based on ASTs
  • GEN_FEATURE_SCANNER : Defines the file scanning features for generating ASTs

Due to the design of gen.hpp to support being written alongside runtime intended code (in the same file), all the code is wrapped in a gen_time #ifdef and then wrapped further in a gen namespace to avoid pollution of the global scope.

Note: Its possible with the scanner feature to support parsing runtime files that use "generic" macros or identifiers with certain patterns. This can be used to auto-queue generation of dependent definitions for the symbols used.

Organization

log_failure definition : based on whether to always use fatal on all errors

Major enum definitions and their associated functions used with the AST data

  • ECode : Used to tag ASTs by their type
  • EOperator : Used to tag operator overloads with thier op type
  • ESpecifier : Used with specifier ASTs for all specifiers the user may tag an associated AST with.

Data Structures

StringTable : Hash table for cached strings. (StringCached typedef used to denote strings managed by it)

AST : The node data strucuture for the code. Code : Wrapper for AST with functionality for handling it appropriately.

TypeTable : Hash table for cached typename ASTs.

Gen Interface

First set of fowards are either backend functions used for various aspects of AST generation or configurating allocators used for different containers.

Interface fowards defined in order of: Upfront, Incremental, Parsing, Untyped.

From there forwards for the File handlers are defined: Builder, Editor, Scanner.

Macros

General helper macros are defined along with the optional DSL macros.

Constants

Constants including optional ones are defined.

Inlines

Inlined functions related to the AST datatype that required forwards for gen interface functions are defined.

gen.cpp