org.snapscript.tree.compile.ClosureScopeCompiler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of snap Show documentation
Show all versions of snap Show documentation
Dynamic scripting for the JVM
package org.snapscript.tree.compile;
import static org.snapscript.core.scope.extract.ScopePolicy.COMPILE_CLOSURE;
import java.util.List;
import org.snapscript.core.constraint.Constraint;
import org.snapscript.core.function.Function;
import org.snapscript.core.scope.Scope;
import org.snapscript.core.scope.ScopeState;
import org.snapscript.core.type.Type;
import org.snapscript.tree.constraint.GenericList;
public class ClosureScopeCompiler extends FunctionScopeCompiler{
public ClosureScopeCompiler(GenericList generics) {
super(generics, COMPILE_CLOSURE);
}
@Override
public Scope compile(Scope closure, Type type, Function function) throws Exception {
List constraints = generics.getGenerics(closure);
Scope scope = extractor.extract(closure);
Scope stack = scope.getStack();
ScopeState state = stack.getState();
int size = constraints.size();
compileParameters(stack, function);
compileProperties(stack, type);
for(int i = 0; i < size; i++) {
Constraint constraint = constraints.get(i);
String name = constraint.getName(stack);
state.addConstraint(name, constraint);
}
return stack;
}
public Scope extract(Scope closure, Type type) throws Exception {
return extractor.extract(closure);
}
}