Skip to content

Commit 0509920

Browse files
authored
Merge pull request #1062 from jozanek/support-unit-type
Support unit type
2 parents 56a42bd + a6896fe commit 0509920

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

sc/shared/src/main/scala/sigma/compiler/ir/GraphBuilding.scala

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,25 @@
11
package sigma.compiler.ir
22

33
import org.ergoplatform._
4-
import sigma.ast.SType.tT
5-
import sigma.{SigmaException, VersionContext, ast}
64
import sigma.Evaluation.stypeToRType
5+
import sigma.SigmaException
6+
import sigma.VersionContext
7+
import sigma.ast.{Ident, Select, Val}
78
import sigma.ast.SType.tT
8-
import sigma.{SigmaException, VersionContext, ast}
99
import sigma.ast.TypeCodes.LastConstantCode
1010
import sigma.ast.Value.Typed
1111
import sigma.ast.syntax.{SValue, ValueOps}
1212
import sigma.ast._
1313
import sigma.compiler.ir.core.MutableLazy
1414
import sigma.crypto.EcPointType
15-
import sigma.VersionContext
1615
import sigma.data.ExactIntegral.{ByteIsExactIntegral, IntIsExactIntegral, LongIsExactIntegral, ShortIsExactIntegral}
1716
import sigma.data.ExactOrdering.{ByteIsExactOrdering, IntIsExactOrdering, LongIsExactOrdering, ShortIsExactOrdering}
1817
import sigma.data.{CSigmaDslBuilder, ExactIntegral, ExactNumeric, ExactOrdering, Lazy, Nullable}
19-
import sigma.util.Extensions.ByteOps
20-
import sigmastate.interpreter.Interpreter.ScriptEnv
21-
import sigma.ast.{Ident, Select, Val}
2218
import sigma.data.UnsignedBigIntNumericOps.{UnsignedBigIntIsExactIntegral, UnsignedBigIntIsExactOrdering}
2319
import sigma.exceptions.GraphBuildingException
2420
import sigma.serialization.OpCodes
25-
import sigma.{SigmaException, ast}
26-
import sigma.VersionContext
21+
import sigma.util.Extensions.ByteOps
22+
import sigmastate.interpreter.Interpreter.ScriptEnv
2723

2824
import scala.collection.mutable.ArrayBuffer
2925
import scala.language.{existentials,implicitConversions}
@@ -265,6 +261,7 @@ trait GraphBuilding extends Base with DefRewriting { IR: IRContext =>
265261
case SLong => LongElement
266262
case SString => StringElement
267263
case SAny => AnyElement
264+
case SUnit => UnitElement
268265
case SBigInt => bigIntElement
269266
case SUnsignedBigInt => unsignedBigIntElement
270267
case SBox => boxElement
@@ -292,6 +289,7 @@ trait GraphBuilding extends Base with DefRewriting { IR: IRContext =>
292289
case LongElement => SLong
293290
case StringElement => SString
294291
case AnyElement => SAny
292+
case UnitElement => SUnit
295293
case _: BigIntElem[_] => SBigInt
296294
case _: UnsignedBigIntElem[_] => SUnsignedBigInt
297295
case _: GroupElementElem[_] => SGroupElement
@@ -513,10 +511,10 @@ trait GraphBuilding extends Base with DefRewriting { IR: IRContext =>
513511
case Ident(n, _) =>
514512
env.getOrElse(n, !!!(s"Variable $n not found in environment $env"))
515513

516-
case ast.Upcast(Constant(value, _), toTpe: SNumericType) =>
514+
case sigma.ast.Upcast(Constant(value, _), toTpe: SNumericType) =>
517515
eval(mkConstant(toTpe.upcast(value.asInstanceOf[AnyVal]), toTpe))
518516

519-
case ast.Downcast(Constant(value, _), toTpe: SNumericType) =>
517+
case sigma.ast.Downcast(Constant(value, _), toTpe: SNumericType) =>
520518
eval(mkConstant(toTpe.downcast(value.asInstanceOf[AnyVal]), toTpe))
521519

522520
// Rule: col.size --> SizeOf(col)
@@ -743,7 +741,7 @@ trait GraphBuilding extends Base with DefRewriting { IR: IRContext =>
743741
val res = sigmaDslBuilder.sha256(inputV)
744742
res
745743

746-
case ast.SizeOf(In(xs)) =>
744+
case SizeOf(In(xs)) =>
747745
xs.elem.asInstanceOf[Any] match {
748746
case _: CollElem[a,_] =>
749747
val xsV = asRep[Coll[a]](xs)
@@ -937,11 +935,11 @@ trait GraphBuilding extends Base with DefRewriting { IR: IRContext =>
937935
val values = colBuilder.fromItems(vs: _*)(eAny)
938936
values
939937

940-
case ast.Upcast(In(input), tpe) =>
938+
case sigma.ast.Upcast(In(input), tpe) =>
941939
val elem = stypeToElem(tpe.asNumType)
942940
upcast(input)(elem)
943941

944-
case ast.Downcast(In(input), tpe) =>
942+
case sigma.ast.Downcast(In(input), tpe) =>
945943
val elem = stypeToElem(tpe.asNumType)
946944
downcast(input)(elem)
947945

sc/shared/src/test/scala/sigmastate/utxo/BasicOpsSpecification.scala

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3422,20 +3422,16 @@ class BasicOpsSpecification extends CompilerTestingCommons
34223422
}
34233423

34243424
property("Unit register") {
3425-
// TODO frontend: implement missing Unit support in compiler
3426-
// https://github.com/ScorexFoundation/sigmastate-interpreter/issues/820
34273425
test("R1", env, ext,
3428-
script = "", /* means cannot be compiled
3429-
the corresponding script is { SELF.R4[Unit].isDefined } */
3426+
script = "{ SELF.R4[Unit].isDefined }",
34303427
ExtractRegisterAs[SUnit.type](Self, reg1)(SUnit).isDefined.toSigmaProp,
34313428
additionalRegistersOpt = Some(Map(
34323429
reg1 -> UnitConstant.instance
34333430
))
34343431
)
34353432

34363433
test("R2", env, ext,
3437-
script = "", /* means cannot be compiled
3438-
the corresponding script is "{ SELF.R4[Unit].get == () }" */
3434+
script = "{ SELF.R4[Unit].get == () }",
34393435
EQ(ExtractRegisterAs[SUnit.type](Self, reg1)(SUnit).get, UnitConstant.instance).toSigmaProp,
34403436
additionalRegistersOpt = Some(Map(
34413437
reg1 -> UnitConstant.instance

0 commit comments

Comments
 (0)