Skip to content

unsafe: Removes most of the unsafe casts. #81

Description

@alanjds

google#58 opened on Jan 6, 2017 by @nairb774

Rather than forcing casts from an *Object to the desired type, we store a "self" reference on the object to allow us to get back to the containing type. This does increase the amount of ram each object takes up (~2 more pointers), the chance of miscasting code goes down dramatically.

There is still a bad cast resulting from values coming out of WrapNative, and this has helped corner that cast. The actual fix is quite involved, but this should prevent similar problems in the future (hopefully).

I expect that this might be a little controversial, but the WrapNative bug I am trying to pin down is the result of the following:

type foo uint64
WrapNative(foo(MaxInt+100))

The returned value is a memory mashup of an Int and a Long. There is a similar test already, but it only uses a raw uint64 rather than something like foo above.

Thoughts?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    imported PRPull Request imported from google/grumpywaiting feedbackWaiting confirmation of changes or fixes

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions