summary refs log tree commit diff stats
path: root/compiler/pluginsupport.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/pluginsupport.nim')
-rw-r--r--compiler/pluginsupport.nim33
1 files changed, 33 insertions, 0 deletions
diff --git a/compiler/pluginsupport.nim b/compiler/pluginsupport.nim
new file mode 100644
index 000000000..a44436f11
--- /dev/null
+++ b/compiler/pluginsupport.nim
@@ -0,0 +1,33 @@
+#
+#
+#           The Nim Compiler
+#        (c) Copyright 2015 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+## Plugin support for the Nim compiler. Right now plugins
+## need to be built with the compiler only: plugins using
+## DLLs or the FFI will not work.
+
+import ast, semdata, idents
+
+type
+  Transformation* = proc (c: PContext; n: PNode): PNode {.nimcall.}
+  Plugin* = tuple
+    package, module, fn: string
+    t: Transformation
+
+proc pluginMatches*(ic: IdentCache; p: Plugin; s: PSym): bool =
+  if s.name.id != ic.getIdent(p.fn).id:
+    return false
+  let module = s.skipGenericOwner
+  if module == nil or module.kind != skModule or
+      module.name.id != ic.getIdent(p.module).id:
+    return false
+  let package = module.owner
+  if package == nil or package.kind != skPackage or
+      package.name.id != ic.getIdent(p.package).id:
+    return false
+  return true