LslPlus 0.4.0 → 0.4.1
raw patch · 7 files changed
+45/−27 lines, 7 filesdep −ghc
Dependencies removed: ghc
Files
- LslPlus.cabal +2/−2
- src/Language/Lsl/Internal/Exec.hs +10/−11
- src/Language/Lsl/Internal/FuncSigs.hs +12/−2
- src/Language/Lsl/Internal/Optimize.hs +2/−2
- src/Language/Lsl/Internal/SerializationGenerator.hs +1/−1
- src/Language/Lsl/Internal/Type.hs +9/−0
- src/Language/Lsl/Render.hs +9/−9
LslPlus.cabal view
@@ -1,5 +1,5 @@ Name: LslPlus -version: 0.4.0 +version: 0.4.1 Synopsis: An execution and testing framework for the Linden Scripting Language (LSL) Description: Provides a framework for executing Linden Scripting Language scripts offline, @@ -20,7 +20,7 @@ Extra-source-files: NOTICE Executable LslPlus - Build-Depends: ghc >= 6.10, base >= 4.0 && < 4.1, haskell98, filepath >= 1.1.0.0 && < 1.2, parsec >= 2.1.0.0 && < 3, + Build-Depends: base >= 4.0 && < 4.1, haskell98, filepath >= 1.1.0.0 && < 1.2, parsec >= 2.1.0.0 && < 3, HaXml >= 1.19 && < 1.20, directory > 1 && < 1.1, mtl >= 1.1 && < 1.2, array >= 0.2 && < 0.3, network >= 2.1 && < 2.3, random >= 1.0, containers >= 0.1 && < 0.3, old-time, utf8-string >= 0.3 && < 0.4, pureMD5 >= 0.2 && < 3, bytestring >= 0.9 && < 0.10, template-haskell >= 2.3.0.0 && < 2.4, syb >= 0.1.0.0 && < 0.2.0.0
src/Language/Lsl/Internal/Exec.hs view
@@ -29,7 +29,7 @@ import Language.Lsl.Internal.Breakpoint(Breakpoint(..),StepManager(..),pushStepManagerFrame,popStepManagerFrame,emptyStepManager,mkBreakpoint) import Language.Lsl.Internal.CodeHelper(renderCall) -import Language.Lsl.Internal.FuncSigs(funcSigs) +import Language.Lsl.Internal.FuncSigs(convertArgs) import Language.Lsl.Internal.Util(fromInt,lookupM,ctx,findM) import Language.Lsl.Syntax(Expr(..), CompiledLSLScript(..), @@ -54,7 +54,8 @@ rmCtx) import Language.Lsl.Internal.Type(LSLType(..),LSLValue(..),typeOfLSLComponent,typeOfLSLValue,toFloat,toSVal, lslShowVal,replaceLslValueComponent,vecMulScalar,rotMulVec,parseVector,parseRotation, - parseInt,parseFloat,invRot,rotMul,vcross,Component(..),lslValueComponent) + parseInt,parseFloat,invRot,rotMul,vcross,Component(..),lslValueComponent, + convertValues) import Language.Lsl.Internal.Key(nullKey,nextKey) import Language.Lsl.Internal.Evaluation(EvalResult(..),Event(..),ScriptInfo(..)) import Language.Lsl.Internal.Constants(findConstVal,llcZeroRotation,llcZeroVector) @@ -1088,9 +1089,7 @@ evalPredef' name = do (LVal args) <- popVal - let args' = case find (\ (fname,_,_) -> name == fname) funcSigs of - Nothing -> args - Just (_,_,argTypes) -> convertArgs argTypes args + let args' = convertArgs name args key <- getMyPrimKey sid <- getScriptName oid <- getObjectId @@ -1100,12 +1099,12 @@ (evalResult,retval) <- doAction name scriptInfo args' pushVal retval return evalResult - where convertArgs argTypes args = zipWith convertArg argTypes args - convertArg LLFloat (IVal i) = FVal $ fromInt i - convertArg LLInteger (FVal f) = IVal $ floor f - convertArg LLKey (SVal s) = KVal s - convertArg LLString (KVal k) = SVal k - convertArg _ v = v +-- where convertArgs argTypes args = zipWith convertArg argTypes args +-- convertArg LLFloat (IVal i) = FVal $ fromInt i +-- convertArg LLInteger (FVal f) = IVal $ floor f +-- convertArg LLKey (SVal s) = KVal s +-- convertArg LLString (KVal k) = SVal k +-- convertArg _ v = v ctxList es = map (Ctx Nothing) es
src/Language/Lsl/Internal/FuncSigs.hs view
@@ -1,9 +1,12 @@ module Language.Lsl.Internal.FuncSigs( funcDescriptions, funcMeta,- funcSigs) where+ funcSigs,+ findSig,+ convertArgs) where -import Language.Lsl.Internal.Type(LSLType(..))+import Data.List(find)+import Language.Lsl.Internal.Type(LSLType(..), convertValues,LSLValue) -- TODO: import real info into funcMeta, and derive funcSigs from that funcMeta :: [(String,LSLType,[(String,LSLType)],String)]@@ -16,6 +19,13 @@ in (name, rt,zip argNames args,description) in map sig2Meta funcSigs +findSig name = find (\ (fname,_,_) -> name == fname) funcSigs++convertArgs :: RealFrac a => String -> [LSLValue a] -> [LSLValue a]+convertArgs name args = case findSig name of+ Nothing -> args+ Just (_,_,argTypes) -> convertValues argTypes args+ funcSigs :: [(String,LSLType,[LSLType])] funcSigs = [ ("llAbs",LLInteger,[LLInteger]),
src/Language/Lsl/Internal/Optimize.hs view
@@ -18,7 +18,7 @@ import Language.Lsl.Parse import Language.Lsl.Render import Language.Lsl.Internal.Constants(allConstants,Constant(..),findConstVal) -import Language.Lsl.Internal.FuncSigs(funcSigs) +import Language.Lsl.Internal.FuncSigs(funcSigs,convertArgs) import Language.Lsl.Internal.InternalLLFuncs(internalLLFuncs,internalLLFuncNames) import Language.Lsl.Internal.OptimizerOptions(OptimizerOption(..)) import Language.Lsl.Syntax(CompiledLSLScript(..),Expr(..),Statement(..),Var(..), @@ -985,7 +985,7 @@ Nothing -> return e Just vs -> case lookup nm internalLLFuncs of - Just f -> return (valToExpr $ snd (Id.runIdentity (f () vs))) + Just f -> return (valToExpr $ snd (Id.runIdentity (f () (convertArgs nm vs)))) Nothing -> do pureFuncs <- get >>= return . siPureFuncs script <- get >>= return . siScript
src/Language/Lsl/Internal/SerializationGenerator.hs view
@@ -84,7 +84,7 @@ instance JavaRep String where representative = "" - xmlSerialize t s = emit (maybe "string" id t) (maybe [] (const [("class","string")]) t) [showString s] + xmlSerialize t s = emit (maybe "string" id t) (maybe [] (const [("class","string")]) t) [(showString . xmlEscape) s] xmlDefaultTag _ = "string" subElemDescriptor tag = el tag id simpleContent elemDescriptor = el "string" id simpleContent
src/Language/Lsl/Internal/Type.hs view
@@ -3,6 +3,7 @@ LSLType(..), LSLValue(..), Component(..), + convertValues, typeOfLSLValue, typeOfLSLComponent, parseFloat, @@ -260,3 +261,11 @@ rot2RVal (x,y,z,s) = RVal x y z s rVal2Rot (RVal x y z s) = (x,y,z,s) + + +convertValues argTypes args = zipWith convertArg argTypes args + where convertArg LLFloat (IVal i) = FVal $ fromInt i + convertArg LLInteger (FVal f) = IVal $ floor f + convertArg LLKey (SVal s) = KVal s + convertArg LLString (KVal k) = SVal k + convertArg _ v = v
src/Language/Lsl/Render.hs view
@@ -12,7 +12,7 @@ renderCompiledScript stamp (CompiledLSLScript comment globals funcs states) = (renderString "// LSL script generated: " . renderString stamp . renderString "\n" . renderString comment . - renderGlobals globals . renderFuncs funcs . renderStates states) "" + renderGlobals globals . renderFuncs funcs . renderStates states . renderString "\n") "" renderSequence r = (foldl' (.) blank) . (map r) @@ -20,8 +20,8 @@ renderGlobal (GDecl (Ctx sc var) val) = renderPreText sc . renderVar var . case val of - Nothing -> renderString ";\n" - Just expr -> renderString " = " . renderSimple expr . renderString ";\n" + Nothing -> renderString ";" + Just expr -> renderString " = " . renderSimple expr . renderString ";" renderCtxSimple (Ctx _ expr) = renderSimple expr renderSimple (Neg expr) = renderChar '-' . renderCtxExpr expr @@ -44,10 +44,10 @@ renderState (Ctx ssc (State (Ctx sc "default") handlers)) = renderPreText ssc . - renderString "default {\n" . renderHandlers handlers . renderString "}\n" + renderString "default {\n" . renderHandlers handlers . renderString "}" renderState (Ctx ssc (State (Ctx _ name) handlers)) = renderPreText ssc . - renderString "state " . renderString name . renderString " {\n" . renderHandlers handlers . renderString "}\n" + renderString "state " . renderString name . renderString " {\n" . renderHandlers handlers . renderString "}" renderHandlers = renderSequence renderHandler @@ -72,9 +72,9 @@ renderFuncs = renderSequence renderCtxFunc -renderCtxFunc (Ctx _ func) = renderFunc func +renderCtxFunc (Ctx sc func) = renderPreText sc . renderFunc func renderFunc (Func dec stmts) = - renderFuncDec dec . renderString "{\n" . renderStatements 0 stmts . renderString "}\n" + renderFuncDec dec . renderString "{\n" . renderStatements 0 stmts . renderString "}" renderIndent 0 = renderString " " renderIndent n = renderString " " . renderIndent (n - 1) @@ -230,7 +230,7 @@ blank = id renderPreText :: (Maybe SourceContext) -> String -> String -renderPreText = maybe blank (renderString . srcPreText) +renderPreText = maybe (renderString "\n") (renderString . srcPreText) renderPreText1 :: (String -> String) -> (Maybe SourceContext) -> String -> String -renderPreText1 f = maybe f (renderString . srcPreText)+renderPreText1 f = maybe (renderString "\n" . f) (renderString . srcPreText)