Skip to content

Commit 3164427

Browse files
authored
perf(cek): no-slippage path and DeBruijn evaluator (#280)
Signed-off-by: Chris Gianelloni <wolf31o2@blinklabs.io>
1 parent a20cee1 commit 3164427

2 files changed

Lines changed: 556 additions & 1 deletion

File tree

cek/machine.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,32 @@ func (m *Machine[T]) Run(term syn.Term[T]) (syn.Term[T], error) {
958958
return nil, err
959959
}
960960
if m.slippage <= 1 {
961-
return m.runStackNoSlippage(term)
961+
dbMachine := (*Machine[syn.DeBruijn])(unsafe.Pointer(m))
962+
dbTerm, ok := any(term).(syn.Term[syn.DeBruijn])
963+
if !ok {
964+
return nil, &InternalError{
965+
Code: ErrCodeInternalError,
966+
Message: fmt.Sprintf(
967+
"DeBruijn evaluator expected syn.Term[syn.DeBruijn], got %T",
968+
term,
969+
),
970+
}
971+
}
972+
dbResult, err := runStackNoSlippageDeBruijn(dbMachine, dbTerm)
973+
if err != nil {
974+
return nil, err
975+
}
976+
result, ok := any(dbResult).(syn.Term[T])
977+
if !ok {
978+
return nil, &InternalError{
979+
Code: ErrCodeInternalError,
980+
Message: fmt.Sprintf(
981+
"DeBruijn evaluator produced incompatible term type %T",
982+
dbResult,
983+
),
984+
}
985+
}
986+
return result, nil
962987
}
963988
return m.runStack(term)
964989
}

0 commit comments

Comments
 (0)