[][src]Enum basic::mach::Opcode

pub enum Opcode {
    Literal(Val),
    Push(Rc<str>),
    Pop(Rc<str>),
    PushArr(Rc<str>),
    PopArr(Rc<str>),
    DimArr(Rc<str>),
    EraseArr(Rc<str>),
    IfNot(Address),
    Jump(Address),
    Next(Rc<str>),
    On,
    Return,
    Clear,
    Cls,
    Cont,
    Def(Rc<str>),
    Defdbl,
    Defint,
    Defsng,
    Defstr,
    Delete,
    End,
    Fn(Rc<str>),
    Input(Rc<str>),
    LetMid,
    List,
    Load,
    LoadRun,
    New,
    Print,
    Read,
    Renum,
    Restore(Address),
    Save,
    Stop,
    Swap,
    Troff,
    Tron,
    Neg,
    Pow,
    Mul,
    Div,
    DivInt,
    Mod,
    Add,
    Sub,
    Eq,
    NotEq,
    Lt,
    LtEq,
    Gt,
    GtEq,
    Not,
    And,
    Or,
    Xor,
    Imp,
    Eqv,
    Abs,
    Asc,
    Atn,
    Cdbl,
    Chr,
    Cint,
    Cos,
    Csng,
    Date,
    Exp,
    Fix,
    Hex,
    Inkey,
    Instr,
    Int,
    Left,
    Len,
    Log,
    Mid,
    Oct,
    Pos,
    Right,
    Rnd,
    Sgn,
    Sin,
    Spc,
    Sqr,
    Str,
    String,
    Tab,
    Tan,
    Time,
    Val,
}

Virtual machine instruction set

The BASIC virtual machine has no registers. Every operation is performed on the stack.

For example: LET A=3*B compiles to [Literal(3), Push(B), Mul, Pop(A)]

See https://en.wikipedia.org/wiki/Reverse_Polish_notation

Variants

Literal(Val)

Push literal value on to the stack.

Push(Rc<str>)

Push stack value of named variable. Infallible.

Pop(Rc<str>)

Pop stack value to named variable. This is the LET statement and may generate errors.

PushArr(Rc<str>)
PopArr(Rc<str>)
DimArr(Rc<str>)
EraseArr(Rc<str>)
IfNot(Address)

Pop stack and branch to Address if not zero.

Jump(Address)

Unconditional branch to Address.

Next(Rc<str>)

Process the FOR loop on the stack.

On

ON x GOTO/GOSUB lines

Return

Expect Return(Address) on stack or else error: RETURN WITHOUT GOSUB. A single assignable value before the Return(Address) will be restored to the stack. Branch to Address.

Clear
Cls
Cont
Def(Rc<str>)
Defdbl
Defint
Defsng
Defstr
Delete
End
Fn(Rc<str>)
Input(Rc<str>)
LetMid
List
Load
LoadRun
New
Print
Read
Renum
Restore(Address)
Save
Stop
Swap
Troff
Tron
Neg
Pow
Mul
Div
DivInt
Mod
Add
Sub
Eq
NotEq
Lt
LtEq
Gt
GtEq
Not
And
Or
Xor
Imp
Eqv
Abs
Asc
Atn
Cdbl
Chr
Cint
Cos
Csng
Date
Exp
Fix
Hex
Inkey
Instr
Int
Left
Len
Log
Mid
Oct
Pos
Right
Rnd
Sgn
Sin
Spc
Sqr
Str
String
Tab
Tan
Time
Val

Trait Implementations

impl Clone for Opcode[src]

impl Debug for Opcode[src]

impl Display for Opcode[src]

Auto Trait Implementations

impl !RefUnwindSafe for Opcode

impl !Send for Opcode

impl !Sync for Opcode

impl Unpin for Opcode

impl UnwindSafe for Opcode

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,