Esempio n. 1
0
 private void Brk()
 {
     emitter.Call(
         new ProcedureConstant(
             new Pointer(new CodeType(), 2),
             host.EnsurePseudoProcedure("__brk", VoidType.Instance, 0)),
         2);
 }
Esempio n. 2
0
        private Application PseudoProc(string name, DataType ret, params Expression[] exprs)
        {
            var ppp = host.EnsurePseudoProcedure(name, ret, exprs.Length);
            var fn  = emitter.Fn(ppp, exprs);

            return(fn);
        }
Esempio n. 3
0
        public HExpr EnsurePseudoProcedure(string name, BaseType dt, int arity)
        {
            var exp = host.EnsurePseudoProcedure(name, ntf.GetRekoType((HExpr)dt), arity);
            var pc  = new ProcedureConstant(PrimitiveType.Ptr32, exp);

            return(m.MapToHandle(pc));
        }
Esempio n. 4
0
        //$REVIEW: push PseudoProc into the RewriterHost interface"
        public Expression PseudoProc(string name, DataType retType, params Expression[] args)
        {
            var ppp = host.EnsurePseudoProcedure(name, retType, args.Length);

            return(PseudoProc(ppp, retType, args));
        }
Esempio n. 5
0
        private void ParseStatement()
        {
            if (!EatSpaces())
            {
                return;
            }
            byte b = line[i++];

            switch (b)
            {
            case (byte)Token.END:
                var ppp = host.EnsurePseudoProcedure("__End", VoidType.Instance, 0);
                ppp.Characteristics = new ProcedureCharacteristics
                {
                    Terminates = true,
                };
                emitter.SideEffect(PseudoProc(ppp, VoidType.Instance));
                i = line.Length;        // We never return from end.
                return;

            case (byte)Token.CLOSE:
                RewriteClose();
                break;

            case (byte)Token.CLR:
                RewriteClr();
                break;

            case (byte)Token.FOR:
                RewriteFor();
                break;

            case (byte)Token.GET:
                RewriteGet();
                break;

            case (byte)Token.GOSUB:
                RewriteGosub();
                break;

            case (byte)Token.GOTO:
                RewriteGoto();
                break;

            case (byte)Token.IF:
                RewriteIf();
                break;

            case (byte)Token.INPUT:
                RewriteInput();
                break;

            case (byte)Token.INPUT_hash:
                RewriteInput_hash();
                break;

            case (byte)Token.NEXT:
                RewriteNext();
                break;

            case (byte)Token.OPEN:
                RewriteOpen();
                break;

            case (byte)Token.POKE:
                RewritePoke();
                break;

            case (byte)Token.PRINT:
                RewritePrint();
                break;

            case (byte)Token.PRINT_hash:
                RewritePrint_hash();
                break;

            case (byte)Token.REM:
                //$TODO: annotation
                i = line.Length;
                return;

            case (byte)Token.RETURN:
                RewriteReturn();
                break;

            case (byte)Token.SYS:
                RewriteSys();
                break;

            case (byte)':':
                // Statement separator.
                break;

            default:
                if (0x41 <= b && b <= 0x5A)
                {
                    --i;
                    RewriteLet();
                    break;
                }
                throw new NotImplementedException(string.Format(
                                                      "Unimplemented BASIC token {0:X2} [{1}].",
                                                      (int)line[i - 1],
                                                      C64BasicInstruction.TokenToString(b)));
            }
        }
Esempio n. 6
0
 private void RewriteSvc()
 {
     emitter.SideEffect(emitter.Fn(
                            host.EnsurePseudoProcedure("__syscall", VoidType.Instance, 2),
                            Operand(instr.Dst)));
 }
Esempio n. 7
0
 private void RewriteSvc()
 {
     m.SideEffect(m.Fn(
                      host.EnsurePseudoProcedure(PseudoProcedure.Syscall, VoidType.Instance, 2),
                      Operand(Dst)));
 }