Mercurial Hosting > nabble
view src/nabble/naml/compiler/ScopedInterpreterImpl.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 source
package nabble.naml.compiler; import java.util.Map; final class ScopedInterpreterImpl<T> extends InterpreterImpl implements ScopedInterpreter<T> { private final Map<String,Chunk> dynamicArgs; ScopedInterpreterImpl(CommandSpec cmdSpec,RunState runState,Map<Class,Integer> inStack,Map<String,?> args,Map<String,Chunk> dynamicArgs) { super(cmdSpec,runState,inStack,args); this.dynamicArgs = dynamicArgs; } public Object getArg(final T scope,String param) { if( scope == null ) throw new TemplateRuntimeException("scope is null"); if( !cmdSpec.scopedParameters.contains(param) ) throw new RuntimeException("not scoped parameter"); Chunk chunk = dynamicArgs.get(param); if( chunk != null ) { return new BlockWrapper(chunk,runState) { void printTo(IPrintWriter out) { int pushed = runState.push(scope); try { super.printTo(out); } finally { runState.pop(pushed); } } }; } Object obj = getArg(param); if( obj != null ) return obj; if( scope instanceof Primitive ) return scope; return runState.saveNamespace(scope); } public String getArgString(T scope,String param) { Object val = getArg(scope,param); return val==null ? null : val.toString(); } }