Skip to content

Commit

Permalink
Add mising primitive struct for Unit
Browse files Browse the repository at this point in the history
Fix #394
  • Loading branch information
densh committed Nov 18, 2016
1 parent e81bd22 commit 48f81de
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,7 @@ import native._
// ###sourceLocation(file: "/Users/Denys/.src/native/nativelib/src/main/scala/scala/scalanative/runtime/Primitives.scala.gyb", line: 12)

@struct class PrimitiveDouble private ()

// ###sourceLocation(file: "/Users/Denys/.src/native/nativelib/src/main/scala/scala/scalanative/runtime/Primitives.scala.gyb", line: 12)

@struct class PrimitiveUnit private ()
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import native._

%{
primitives = ['Boolean', 'Char', 'Byte', 'Short',
'Int', 'Long', 'Float', 'Double']
'Int', 'Long', 'Float', 'Double', 'Unit']
}%

% for T in primitives:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ trait NirDefinitions { self: NirGlobalAddons =>
'I' -> getRequiredClass("scala.scalanative.runtime.PrimitiveInt"),
'L' -> getRequiredClass("scala.scalanative.runtime.PrimitiveLong"),
'F' -> getRequiredClass("scala.scalanative.runtime.PrimitiveFloat"),
'D' -> getRequiredClass("scala.scalanative.runtime.PrimitiveDouble")
'D' -> getRequiredClass("scala.scalanative.runtime.PrimitiveDouble"),
'U' -> getRequiredClass("scala.scalanative.runtime.PrimitiveUnit")
)

lazy val RuntimeArrayClass: Map[Char, Symbol] = Map(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,12 @@ trait NirTypeEncoding { self: NirCodeGen =>

def genTypeSymValue(sym: Symbol): nir.Val =
genPrimCode(sym) match {
case 'O' => nir.Val.Global(genTypeName(sym), nir.Type.Ptr)
case code => genTypeSymValue(RuntimePrimitive(code))
case 'O' if sym != UnitClass =>
nir.Val.Global(genTypeName(sym), nir.Type.Ptr)
case 'O' =>
genTypeSymValue(RuntimePrimitive('U'))
case code =>
genTypeSymValue(RuntimePrimitive(code))
}

def genStructFields(sym: Symbol): Seq[nir.Type] = {
Expand Down
15 changes: 15 additions & 0 deletions unit-tests/src/main/scala/scala/ClassOfSuite.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package scala

object ClassOfSuite extends tests.Suite {
test("boxed and unboxed classes are not the same") {
assert(classOf[Boolean] != classOf[java.lang.Boolean])
assert(classOf[Byte] != classOf[java.lang.Byte])
assert(classOf[Char] != classOf[java.lang.Character])
assert(classOf[Short] != classOf[java.lang.Short])
assert(classOf[Int] != classOf[java.lang.Integer])
assert(classOf[Long] != classOf[java.lang.Long])
assert(classOf[Float] != classOf[java.lang.Float])
assert(classOf[Double] != classOf[java.lang.Double])
assert(classOf[Unit] != classOf[scala.runtime.BoxedUnit])
}
}

0 comments on commit 48f81de

Please sign in to comment.