Skip to content

ExpressionEvaluator Todo List

Coding Seb edited this page Apr 13, 2019 · 39 revisions

ExpressionEvaluator can already do some fun things, but it could do more. Here is just a small list of ideas and todo stuff (maybe some will never be done, But it's a place to keep track of ideas). It's a kind of not dated roadmap.

More customization

  • Custom operators (see #27)
    • On the fly operators
    • Operators Dictionary easy customisation
    • Add a way to allow aliases for existing operators like Or, And
    • Add a way to add some custom operators and corresponding implementations
    • Flexible length of the operators
    • Types : multiple operands vs Single operands (Maybe start with only 2 operands operators)
    • Take care of operators precedences (priorities)
  • Add generic types in VariableEvaluationEventArg and FunctionEvaluationEventArg for on the fly evaluations (A list of types when using <>)
  • On the fly parsing (event with current expression,ref parsing position and the stack)

More C# like things support

  • Manage Tuples
  • Add nameof keyword
  • Manage ref method args
  • Manage in method args
  • Manage out method args
  • Manage params methods args
  • Subscribe to event
  • Manage switch case

Optimization and/or doing things better

  • Speed up evaluations
    • Caching things and consider using expression tree or other intermediate format. (See)
    • Manage inline namespaces faster
    • Add some options for cached resolution of namespaces and types for better perfs.
  • Better variables management
    • Typed variables or optionally use var keyword
    • declare struct and valuetypes without new keyword
    • variables scoped to blocks
  • Find a way to manage extentions methods without the need to declaring the static type and withoutbeeing too slow
  • Line and (position) in script exceptions
  • More self explained exceptions

Other

  • Return a Func<> or an Action<>
  • Validate code before evaluate

Done

  • Manage structs assignation
  • Option to force integer eval as double
  • Manage numbers decimal separator and functions arguments separators
  • Manage sizeof keyword
  • Binary numbers
  • Hexadecimal numbers
  • ++ and -- as prefix operators
  • Dictionary initializers
  • Collection initializers
  • Objects initializers
  • throw and try catch exception
  • Manage ExpendoObject
  • Manage calling of Action and Func delegates
  • Manage ++ and -- for indexing
  • Manage assignation to indexer
  • Manage do while
  • Properties set assignation
  • Manage foreach
  • Manage continue keyword
  • Manage break keyword
  • Manage blocks in lambda body
  • Manage return keyword
  • Manage comments // and /* */
  • Manage Evaluate<type>(calc)
  • Manage chars
  • On the fly properties and methods evaluation
  • Manage Generic functions and types with <>
  • Manage ?: operator
  • Manage new Keyword
  • Manage multi line mode with ;? and = ++`...
  • Manage blocks like if for while...

Table Of Content

Clone this wiki locally