endbasic-core 0.13.0

The EndBASIC programming language - core
Documentation
# Test: Two immediate integers

## Source

```basic
OUT 2 = 2
```

## Disassembly

```asm
0000:   LOADI       R65, 2              ; 1:5
0001:   LOADI       R66, 2              ; 1:9
0002:   CMPEQI      R65, R65, R66       ; 1:7
0003:   LOADI       R64, 256            ; 1:5
0004:   UPCALL      0, R64              ; 1:1, OUT
0005:   EOF                             ; 0:0
```

## Output

```plain
0=true?
```

# Test: Two immediate doubles

## Source

```basic
OUT 2.5 = 2.0
```

## Disassembly

```asm
0000:   LOADC       R65, 0              ; 1:5, 2.5
0001:   LOADC       R66, 1              ; 1:11, 2
0002:   CMPEQD      R65, R65, R66       ; 1:9
0003:   LOADI       R64, 256            ; 1:5
0004:   UPCALL      0, R64              ; 1:1, OUT
0005:   EOF                             ; 0:0
```

## Output

```plain
0=false?
```

# Test: Left integer operand needs type promotion to double

## Source

```basic
OUT 2 = 2.0
```

## Disassembly

```asm
0000:   LOADI       R65, 2              ; 1:5
0001:   LOADC       R66, 0              ; 1:9, 2
0002:   ITOD        R65                 ; 1:7
0003:   CMPEQD      R65, R65, R66       ; 1:7
0004:   LOADI       R64, 256            ; 1:5
0005:   UPCALL      0, R64              ; 1:1, OUT
0006:   EOF                             ; 0:0
```

## Output

```plain
0=true?
```

# Test: Two immediate strings

## Source

```basic
OUT "foo" = "bar"
```

## Disassembly

```asm
0000:   LOADI       R65, 0              ; 1:5
0001:   LOADI       R66, 1              ; 1:13
0002:   CMPEQS      R65, R65, R66       ; 1:11
0003:   LOADI       R64, 256            ; 1:5
0004:   UPCALL      0, R64              ; 1:1, OUT
0005:   EOF                             ; 0:0
```

## Output

```plain
0=false?
```

# Test: Two immediate booleans

## Source

```basic
OUT TRUE = FALSE
```

## Disassembly

```asm
0000:   LOADI       R65, 1              ; 1:5
0001:   LOADI       R66, 0              ; 1:12
0002:   CMPEQB      R65, R65, R66       ; 1:10
0003:   LOADI       R64, 256            ; 1:5
0004:   UPCALL      0, R64              ; 1:1, OUT
0005:   EOF                             ; 0:0
```

## Output

```plain
0=false?
```

# Test: Type error between integer and string

## Source

```basic
OUT 1 = "1"
```

## Compilation errors

```plain
1:7: Cannot = INTEGER and STRING
```