Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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;
        }
Exemple #5
0
 public CompilationEnvironment(Messenger messages, SignatureResolver signatureLookup, AssignmentResolver assignmentLookup)
 {
     Messages         = messages;
     SignatureLookup  = signatureLookup;
     AssignmentLookup = assignmentLookup;
 }