Skip to content

unsafe: Removes most of the unsafe casts. #81

Open
@alanjds

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?

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