private void Brk() { emitter.Call( new ProcedureConstant( new Pointer(new CodeType(), 2), host.EnsurePseudoProcedure("__brk", VoidType.Instance, 0)), 2); }
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); }
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)); }
//$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)); }
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))); } }
private void RewriteSvc() { emitter.SideEffect(emitter.Fn( host.EnsurePseudoProcedure("__syscall", VoidType.Instance, 2), Operand(instr.Dst))); }
private void RewriteSvc() { m.SideEffect(m.Fn( host.EnsurePseudoProcedure(PseudoProcedure.Syscall, VoidType.Instance, 2), Operand(Dst))); }