diff options
Diffstat (limited to 'compiler/pluginsupport.nim')
-rw-r--r-- | compiler/pluginsupport.nim | 33 |
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 |