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);
+	}
+}