git.iko.soy/rowtype-yoga/purescm
on bytevector help sign in
Implement code generation for most of Op1
commitb296a3e1f49a5cbd3b7dc11cf22867e4e29b10ca authorpurefunctor <purefunctor@pm.me> dateFri 24 Mar 2023, 17:47 (4 years ago) parentc8b25ba
1 file changed+18−3
src/PureScript/Backend/Chez/Convert.purs+18−3
src/PureScript/Backend/Chez/Convert.purs+18−3
@@ -16,7 +16,7 @@ import PureScript.Backend.Chez.Syntax as S
1616import PureScript.Backend.Optimizer.Convert (BackendModule, BackendBindingGroup)
1717import PureScript.Backend.Optimizer.CoreFn (Ident(..), Literal(..), ModuleName(..), Qualified(..))
1818import PureScript.Backend.Optimizer.Semantics (NeutralExpr(..))
19−import PureScript.Backend.Optimizer.Syntax (BackendOperator(..), BackendOperator2(..), BackendOperatorNum(..), BackendOperatorOrd(..), BackendSyntax(..), Pair(..))
19+import PureScript.Backend.Optimizer.Syntax (BackendOperator(..), BackendOperator1(..), BackendOperator2(..), BackendOperatorNum(..), BackendOperatorOrd(..), BackendSyntax(..), Pair(..))
2020import Safe.Coerce (coerce)
2121
2222type CodegenEnv =
@@ -162,8 +162,23 @@ codegenLiteral codegenEnv = case _ of
162162
163163codegenPrimOp :: CodegenEnv -> BackendOperator NeutralExpr -> ChezExpr
164164codegenPrimOp codegenEnv = case _ of
165− Op1 _ _ ->
166− S.Identifier "unary-prim-op"
165+ Op1 o x ->
166+ let
167+ x' = codegenExpr codegenEnv x
168+ in
169+ case o of
170+ OpBooleanNot ->
171+ S.List [ S.Identifier "scm:not", x' ]
172+ OpIntBitNot ->
173+ S.List [ S.Identifier "scm:fxlognot", x' ]
174+ OpIntNegate ->
175+ S.List [ S.Identifier "scm:fx-", x' ]
176+ OpNumberNegate ->
177+ S.List [ S.Identifier "scm:fl-", x' ]
178+ OpArrayLength ->
179+ S.List [ S.Identifier "scm:vector-length", x' ]
180+ OpIsTag _ ->
181+ S.Identifier "op-is-tag"
167182 Op2 o x y ->
168183 let
169184 x' = codegenExpr codegenEnv x