Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle Eager Primitive Specialization without huge switch/case #30

Merged
merged 7 commits into from
Sep 14, 2016

Conversation

smarr
Copy link
Owner

@smarr smarr commented Sep 4, 2016

The goal of this PR is to solve eager primitive specialization properly without having hard-coded switch/case stuff in MessageSendNode.

Currently work in progress.

Open issues:

  • proper naming of members of @Primitive annotation
  • general cleanup
  • might want a mechanism to verify that all specialization works, it is easy to forget adding a primitive factory to the list. Could use a annotation processor, but that's complexity, I'd rather like to avoid

/cc
@charig probably relevant for you.
@kjx might be interesting for you, since it would allow to more systematically disable optimizations. If you need something specific, I should add a proper option.

@smarr smarr added the enhancement Improves the implementation with something noteworthy label Sep 4, 2016
@smarr smarr self-assigned this Sep 4, 2016
@smarr smarr changed the title Handle Eager Primitive Specialization with huge switch/case Handle Eager Primitive Specialization without huge switch/case Sep 4, 2016
@smarr smarr force-pushed the feature/eager-prim-handling branch 2 times, most recently from 67b4f25 to 5bd37e4 Compare September 4, 2016 19:36
Signed-off-by: Stefan Marr <git@stefan-marr.de>
@smarr smarr force-pushed the feature/eager-prim-handling branch from 29b4bec to ac5979f Compare September 8, 2016 22:11
Signed-off-by: Stefan Marr <git@stefan-marr.de>
The goal is to avoid hardcoded switch/case statements.

- made @primitive repeatable annotation
- added additional attributes to @primitive
- made `primitive` property optional to be able to express
  all type constraints for a single selector easily (see SqrtPrim).
- added Specializer class to allow for primitive specific guards
  and instantiation. Since annotations can only have primitive
  values, this is required for guards.
- made primitive constructors more uniform
- fix code deprecations (introduce during rebasing of this branch)
- takes common code for eagerlyWrapped tag handling
- has factory method for wrapper objects
- generalize the `makeEager*Prim` method to a common one
- make sure makeEagerPrim is properly synced
- QuaternaryExpressionNode also EagerlySpecializableNode

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
@smarr smarr force-pushed the feature/eager-prim-handling branch 2 times, most recently from 712aad4 to 3012cad Compare September 11, 2016 00:38
- pass all arguments to the matcher
- make constructors more uniform
- add eagerWrapper flag
- remove constructors with just source section
- use Specializer to instantiate primitives
- merge PrimAndFact into Specializer
- add @Primitive.extraChild for child node factory
  This is used only in a very specific way currently,
  so, support is limited to that, to avoid implementation complexity.
- add Primitive.requiresArguments to pass the argument array to nodes that require it

Signed-off-by: Stefan Marr <git@stefan-marr.de>
symbol sends.

This is a regression, tracked with #32, needs further work.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
@smarr smarr merged commit 17ad71e into master Sep 14, 2016
@smarr smarr deleted the feature/eager-prim-handling branch September 14, 2016 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Improves the implementation with something noteworthy
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant