I am trying to define LargeInt.int conversions for C integer types in terms of those supplied in Foreign in a way that will work with both Poly/ML 5.6 or 5.7. This requires that e.g.
  - Foreign.cUint64 is used for Poly/ML = 5.6 but
  - Foreign.cUint64Large is used for Poly/ML >= 5.7
I am thinking of achieving this by having separate SML files for different Poly/ML versions and using the right one as follows:

  let
    val version = PolyML.rtsVersion ()
  in
    PolyML.use (
      if version >= 570
      then "src-5.7.sml"
      else if version = 560
      then "src-5.6.sml"
      else raise Fail "unsupported Poly/ML version"
    )
  end

Is this a future-proof way to choose based on Poly/ML version?

Another option might be to copy the implementation of these conversions from Foreign.sml but that may not be possible - for example I couldn't see how to get the flag bigEndian in an application.

Is there a better way altogether with some compiler trickery?

Phil

_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to