One thing to consider (that I forgot to mention) is that the compiler
generates wrappers for primitives. Thus if you have Haskell code like:
aPrimitive primitive 1 :: Int -> Int
The code that is generated is a wrapper
FUN aPrimitive:
PUSH_ARG 0
EVAL
POP 1
PRIMITIVE [aPrimitive C code]
RETURN_EVAL
It *is* possible to get away without the wrapper but it makes life quite
hard, because you need to make sure that the arguments are evaluated
before calling the primitive function.
You could of course do
FUN aPrimitive:
PUSH_ARG 0
EVAL
MK_AP [aPrimitive C code] 1
RETURN_EVAL
but this is both quite nasty and also less efficient.
Tom
Krasimir Angelov wrote:
Ok. Then I will follow the same way used in the bytecode backend.
2006/1/18, Thomas Shackell <[EMAIL PROTECTED]>:
Hi Krasimir,
Great work with the .NET backend!
It wouldn't be easy. Knowing whether a function internal to this module
is primitive is relatively easy. However knowing whether a function in
another module is primitive is harder because the program gets it's
information about external functions from the .hi file and the .hi file
doesn't store whether a function was primitive or not.
It would be possible to add it, but messing about with the hi files
isn't fun (trust me ;-)).
Hope that helps
Tom
Krasimir Angelov wrote:
Cool! Now I am able to compile the entire base package to IL code but
there is still one problem. The byte code backend is using a special
instruction for all primitives. I would like to try an another
approach that will allow to call the primitives directly. For this
purpose I need to now whether a given Id is an Id of a primitive. Is
it currently possible? It is enough if there was any flag in the Info
datatype. Any suggestions?
Krasimir
2006/1/17, Neil Mitchell <[EMAIL PROTECTED]>:
code. Is it possible to remove the duplicated instances as well?
Yep, I removed them already - they were certainly a bug. It should be
in the repo already.
The compiler detects duplicate class declarations (good), but
supresses rename errors with the -redefine flag (bad, fixed now), and
doesn't detect duplicate instance declarations (bad, unfixed).
Thanks
Neil
_______________________________________________
Yhc mailing list
[email protected]
http://haskell.org/mailman/listinfo/yhc
_______________________________________________
Yhc mailing list
[email protected]
http://haskell.org/mailman/listinfo/yhc