Mercurial Hosting > nabble
diff src/nabble/naml/compiler/MacroScope.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/naml/compiler/MacroScope.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,52 @@ +package nabble.naml.compiler; + +import java.util.Map; +import java.util.HashMap; +import java.util.Set; +import nabble.naml.dom.Naml; + + +final class MacroScope { + final Macro macro; + final MacroScope parentScope; + private final Map<String,Naml> args = new HashMap<String,Naml>(); + private final Map<String,ParamChunk> paramChunks = new HashMap<String,ParamChunk>(); + boolean hasVars = false; + + private MacroScope(Macro macro,MacroScope parentScope) { + this.macro = macro; + this.parentScope = parentScope; + } + + MacroScope(Macro macro) { + this(macro,null); + } + + Source source() { + return macro.source; + } + + void addArg(String name,Naml naml) { + args.put(name,naml); + } + + void addParamChunk(ParamChunk paramChunk) { + paramChunks.put(paramChunk.name,paramChunk); + } + + Naml getArg(String name) { + return args.get(name); + } + + ParamChunk getParamChunk(String name) { + return paramChunks.get(name); + } + + Set<String> getArgNames() { + return args.keySet(); + } + + MacroScope newScope(Macro macro) { + return new MacroScope(macro,this); + } +}