public bool CanAccept(OperatorTypeSignature other, AssignmentResolver resolver) { if (other.Inputs != Inputs) { return(false); } if (Inputs == InputSides.Both || Inputs == InputSides.Left) { SprakType destination = LeftParam; SprakType source = other.LeftParam; if (!resolver.IsAssignable(source, destination)) { return(false); } } if (Inputs == InputSides.Both || Inputs == InputSides.Right) { SprakType destination = RightParam; SprakType source = other.RightParam; if (!resolver.IsAssignable(source, destination)) { return(false); } } return(true); }
public Compiler() { // At some point this should be configurable. List <Library> libraries = new List <Library> { Library.Core }; _assignmentLookup = new AssignmentResolver(libraries); _signatureLookup = new SignatureResolver(libraries, _assignmentLookup); _signatureLookup.SpecifyOperationBindings(new List <OperationBinding>()); }
public bool CanAccept(FunctionTypeSignature target, AssignmentResolver resolver) { if (target.Parameters.Count != Parameters.Count) { return(false); } for (int i = 0; i < Parameters.Count; i++) { SprakType destination = Parameters[i]; SprakType source = target.Parameters[i]; if (!resolver.IsAssignable(source, destination)) { return(false); } } return(true); }
public Executor(Computer computer) { // At some point the list of library names should be stored // in the executable... but there is only one library at the moment. List <Library> libraries = new List <Library> { Library.Core }; AssignmentResolver assignments = new AssignmentResolver(libraries); SignatureResolver signatures = new SignatureResolver(libraries, assignments); signatures.SpecifyUserFunctions(computer.Executable.FunctionDeclarations); signatures.SpecifyOperationBindings(new List <OperationBinding>()); _context = new ExecutionContext(computer, signatures); _context.Reset(); State = ExecutorState.Idle; }
public CompilationEnvironment(Messenger messages, SignatureResolver signatureLookup, AssignmentResolver assignmentLookup) { Messages = messages; SignatureLookup = signatureLookup; AssignmentLookup = assignmentLookup; }