]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/scl/SCL/ModuleRepository.scl
Compilation of SCL expressions from SCL
[simantics/platform.git] / bundles / org.simantics.scl.compiler / scl / SCL / ModuleRepository.scl
diff --git a/bundles/org.simantics.scl.compiler/scl/SCL/ModuleRepository.scl b/bundles/org.simantics.scl.compiler/scl/SCL/ModuleRepository.scl
new file mode 100644 (file)
index 0000000..eceb418
--- /dev/null
@@ -0,0 +1,45 @@
+module {
+    export = [possibleUnsafeSclValueByName, unsafeSclValueByName, sclModuleNames, moduleByName]
+}
+
+include "./CurrentModuleRepository"
+include "./Module"
+
+importJava "org.simantics.scl.compiler.module.repository.ModuleRepository" where
+    // data ModuleRepository
+    // defined in CurrentModuleRepository
+
+    @JavaName getValue
+    unsafeSclValueByName_ :: ModuleRepository -> String -> <Proc> a
+    
+    @JavaName getSourceRepository
+    moduleSourceRepositoryOf :: ModuleRepository -> ModuleSourceRepository
+    
+    @JavaName getModule
+    moduleByName_ :: ModuleRepository -> String -> <Proc> Failable Module 
+    
+importJava "org.simantics.scl.compiler.source.repository.ModuleSourceRepository" where
+    data ModuleSourceRepository
+    
+    @JavaName getModuleNames
+    sclModuleNames_ :: ModuleSourceRepository -> [String]
+
+importJava "org.simantics.scl.compiler.errors.Failable" where
+    data Failable a
+    
+    didSucceed :: Failable a -> Boolean
+    getResult :: Failable a -> Maybe a 
+
+unsafeSclValueByName :: String -> <Proc> a
+unsafeSclValueByName = unsafeSclValueByName_ MODULE_REPOSITORY
+
+possibleUnsafeSclValueByName :: String -> <Proc> Maybe a
+possibleUnsafeSclValueByName name = Just (unsafeSclValueByName name) `catch` \(_ :: Exception) -> Nothing
+
+sclModuleNames :: <Proc> [String]
+sclModuleNames = sclModuleNames_ (moduleSourceRepositoryOf MODULE_REPOSITORY)
+
+moduleByName :: String -> <Proc> Maybe Module
+moduleByName name = getResult failable
+  where
+    failable = moduleByName_ MODULE_REPOSITORY name
\ No newline at end of file