Merge pull request 'everything works except for weird issue where add.ul and fib.ul are duplicating the first function call' (#1) from feature/stdlib-print into main
Reviewed-on: #1
This commit is contained in:
commit
470ff4ab20
|
|
@ -57,8 +57,8 @@ undar_compile(int emitter_type, char *source)
|
|||
}
|
||||
|
||||
List *code = List_init(&a);
|
||||
List *msize = List_init(&a);
|
||||
List *memory = List_init(&a);
|
||||
List *msize = List_init(&a);
|
||||
|
||||
compile(&a, code, memory, &e, source);
|
||||
|
||||
|
|
|
|||
50
compiler.c
50
compiler.c
|
|
@ -10,6 +10,7 @@ Emitter *emitter;
|
|||
Arena *arena;
|
||||
List *code;
|
||||
List *memory;
|
||||
CallStack *call_stack;
|
||||
|
||||
/****************************************************
|
||||
* Scope
|
||||
|
|
@ -107,6 +108,23 @@ scope_add_symbol(const char *name, u32 name_length, SymbolType type, u32 size)
|
|||
sizeof(Symbol));
|
||||
}
|
||||
|
||||
void CallStack_push(CallStack *stack, Symbol *symbol) {
|
||||
if (stack->count >= stack->capacity) {
|
||||
emitter->error("call stack full", 16, parser->previous.line);
|
||||
}
|
||||
stack->symbols[stack->count] = symbol;
|
||||
stack->count++;
|
||||
}
|
||||
|
||||
Symbol *CallStack_pop(CallStack *stack) {
|
||||
if (stack->count == 0) {
|
||||
emitter->error("call stack empty", 17, parser->previous.line);
|
||||
}
|
||||
stack->count--;
|
||||
return stack->symbols[stack->count];
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
is_global(void)
|
||||
{
|
||||
|
|
@ -590,7 +608,7 @@ variable(void)
|
|||
}
|
||||
|
||||
if(sym->type == SYMBOL_FUNCTION) {
|
||||
parser->call_fn = sym;
|
||||
CallStack_push(call_stack, sym);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -802,19 +820,6 @@ declaration(void)
|
|||
statement();
|
||||
}
|
||||
|
||||
void
|
||||
print_statement(void)
|
||||
{
|
||||
expression();
|
||||
if (parser->current_type == SYMBOL_STR) {
|
||||
emitter->emit_nat(arena, code, "2", 1);
|
||||
emitter->emit_add(arena, code, 2);
|
||||
}
|
||||
consume(TOKEN_SEMICOLON);
|
||||
emitter->emit_print(arena, code);
|
||||
emitter->emit_end_statement(arena, code);
|
||||
}
|
||||
|
||||
void
|
||||
if_statement(void)
|
||||
{
|
||||
|
|
@ -875,6 +880,8 @@ function(void)
|
|||
void
|
||||
call(void)
|
||||
{
|
||||
Symbol *call_fn;
|
||||
|
||||
if(!check(TOKEN_RPAREN)) {
|
||||
do {
|
||||
expression();
|
||||
|
|
@ -882,8 +889,9 @@ call(void)
|
|||
}
|
||||
consume(TOKEN_RPAREN);
|
||||
|
||||
emitter->emit_arena_fn_call(arena, code, parser->call_fn);
|
||||
parser->current_type = parser->call_fn->secondary_type;
|
||||
call_fn = CallStack_pop(call_stack);
|
||||
emitter->emit_arena_fn_call(arena, code, call_fn);
|
||||
parser->current_type = call_fn->secondary_type;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -915,8 +923,6 @@ statement(void)
|
|||
if_statement();
|
||||
} else if(match(TOKEN_KEYWORD_WHILE)) {
|
||||
while_statement();
|
||||
} else if(match(TOKEN_KEYWORD_PRINT)) {
|
||||
print_statement();
|
||||
} else if(match(TOKEN_KEYWORD_HALT)) {
|
||||
emitter->emit_halt(arena, code);
|
||||
} else {
|
||||
|
|
@ -1086,7 +1092,6 @@ ParseRule rules[] = {
|
|||
/* TOKEN_ARROW_RIGHT */ {nil, nil, PREC_NONE},
|
||||
/* TOKEN_SLL */ {nil, binary, PREC_NONE},
|
||||
/* TOKEN_SRL */ {nil, binary, PREC_NONE},
|
||||
/* TOKEN_KEYWORD_PRINT*/ {nil, binary, PREC_NONE},
|
||||
/* TOKEN_KEYWORD_TRAIT*/ {nil, nil, PREC_NONE},
|
||||
/* TOKEN_KEYWORD_HALT*/ {nil, nil, PREC_NONE},
|
||||
/* TOKEN_KEYWORD_DEVMAP*/ {nil, nil, PREC_NONE},
|
||||
|
|
@ -1136,6 +1141,13 @@ bool
|
|||
compile(Arena *a, List *c, List *m, Emitter *e, char *source)
|
||||
{
|
||||
Parser p = {0};
|
||||
Symbol *syms[50] = {0};
|
||||
CallStack cs;
|
||||
cs.symbols = syms;
|
||||
cs.count = 0;
|
||||
cs.capacity = 50;
|
||||
call_stack = &cs;
|
||||
|
||||
arena = a;
|
||||
emitter = e;
|
||||
code = c;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,13 @@ struct scope_s {
|
|||
u32 locals_offset;
|
||||
};
|
||||
|
||||
typedef struct call_stack_s CallStack;
|
||||
struct call_stack_s {
|
||||
Symbol **symbols;
|
||||
u32 count;
|
||||
u32 capacity;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
PREC_NONE,
|
||||
PREC_ASSIGNMENT, /* = */
|
||||
|
|
@ -39,7 +46,6 @@ struct parse_rule_s {
|
|||
};
|
||||
|
||||
struct parser_s {
|
||||
Symbol *call_fn;
|
||||
Scope *current_scope;
|
||||
List *scopes;
|
||||
Token current;
|
||||
|
|
|
|||
1
emit.h
1
emit.h
|
|
@ -51,7 +51,6 @@ struct emitter_s {
|
|||
VoidArgEmit emit_method;
|
||||
VoidArgEmit emit_trait;
|
||||
VoidArgEmit emit_const;
|
||||
VoidArgEmit emit_print;
|
||||
VoidArgEmit emit_neg;
|
||||
VoidArgEmit emit_not;
|
||||
VoidArgEmit emit_open_paren;
|
||||
|
|
|
|||
181
emit/uxn/emit.c
181
emit/uxn/emit.c
|
|
@ -84,98 +84,111 @@ char emit_uxn_lib_undar_tal[] = {
|
|||
0x74, 0x68, 0x2a, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x2a, 0x20, 0x2d, 0x2d,
|
||||
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54,
|
||||
0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x38, 0x20, 0x53, 0x55, 0x42, 0x32,
|
||||
0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32,
|
||||
0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30,
|
||||
0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32,
|
||||
0x30, 0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
||||
0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
|
||||
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
|
||||
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44,
|
||||
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20,
|
||||
0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
||||
0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
|
||||
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
|
||||
0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44,
|
||||
0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x61, 0x61, 0x6c, 0x6c, 0x6f,
|
||||
0x63, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
||||
0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20,
|
||||
0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30,
|
||||
0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54,
|
||||
0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e,
|
||||
0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
||||
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
||||
0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x34, 0x20, 0x41, 0x44, 0x44, 0x32,
|
||||
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23,
|
||||
0x30, 0x30, 0x20, 0x45, 0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65,
|
||||
0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
|
||||
0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48,
|
||||
0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44,
|
||||
0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
|
||||
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32,
|
||||
0x20, 0x4c, 0x44, 0x41, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20,
|
||||
0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30, 0x30, 0x66,
|
||||
0x66, 0x20, 0x41, 0x4e, 0x44, 0x32, 0x20, 0x4e, 0x49, 0x50, 0x20, 0x73,
|
||||
0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32,
|
||||
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
||||
0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
||||
0x20, 0x23, 0x30, 0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
||||
0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30, 0x38, 0x20, 0x53, 0x46, 0x54,
|
||||
0x32, 0x20, 0x23, 0x30, 0x30, 0x66, 0x66, 0x20, 0x41, 0x4e, 0x44, 0x32,
|
||||
0x20, 0x4e, 0x49, 0x50, 0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
|
||||
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
||||
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20,
|
||||
0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x50, 0x4f, 0x50, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53,
|
||||
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a,
|
||||
0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44,
|
||||
0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30,
|
||||
0x30, 0x30, 0x36, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
||||
0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x23, 0x30, 0x30, 0x20, 0x45,
|
||||
0x51, 0x55, 0x20, 0x3f, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
||||
0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c,
|
||||
0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c,
|
||||
0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
||||
0x20, 0x73, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
|
||||
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
|
||||
0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
|
||||
0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
||||
0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
|
||||
0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x0a, 0x0a,
|
||||
0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e,
|
||||
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
||||
0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x6b,
|
||||
0x20, 0x52, 0x4f, 0x54, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x21, 0x26, 0x62, 0x65,
|
||||
0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x72,
|
||||
0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54,
|
||||
0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e,
|
||||
0x43, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x21, 0x26, 0x72, 0x65,
|
||||
0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30,
|
||||
0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72,
|
||||
0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20,
|
||||
0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x0a, 0x40, 0x6e, 0x61, 0x74, 0x5f,
|
||||
0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72, 0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a,
|
||||
0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20,
|
||||
0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x72, 0x20,
|
||||
0x4c, 0x49, 0x54, 0x32, 0x72, 0x20, 0x30, 0x30, 0x30, 0x61, 0x20, 0x53,
|
||||
0x55, 0x42, 0x32, 0x72, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
||||
0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
|
||||
0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30,
|
||||
0x35, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x53, 0x54, 0x41,
|
||||
0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e,
|
||||
0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72,
|
||||
0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
||||
0x4c, 0x44, 0x41, 0x32, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x4f,
|
||||
0x56, 0x52, 0x32, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x44, 0x49, 0x56,
|
||||
0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20,
|
||||
0x23, 0x30, 0x30, 0x33, 0x30, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
|
||||
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49,
|
||||
0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c,
|
||||
0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x31, 0x20, 0x53,
|
||||
0x55, 0x42, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41,
|
||||
0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x20,
|
||||
0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x50, 0x4f, 0x50, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e,
|
||||
0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b,
|
||||
0x20, 0x49, 0x4e, 0x43, 0x32, 0x6b, 0x20, 0x52, 0x4f, 0x54, 0x32, 0x20,
|
||||
0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
|
||||
0x32, 0x20, 0x21, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a,
|
||||
0x0a, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49,
|
||||
0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
||||
0x32, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20,
|
||||
0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a,
|
||||
0x0a, 0x40, 0x6e, 0x61, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x72,
|
||||
0x5f, 0x20, 0x28, 0x20, 0x6e, 0x2a, 0x20, 0x2d, 0x2d, 0x20, 0x72, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x2a, 0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x4f, 0x56, 0x52, 0x32, 0x72, 0x20, 0x4c, 0x49, 0x54, 0x32, 0x72, 0x20,
|
||||
0x30, 0x30, 0x30, 0x61, 0x20, 0x53, 0x55, 0x42, 0x32, 0x72, 0x20, 0x53,
|
||||
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20,
|
||||
0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32,
|
||||
0x6b, 0x72, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26,
|
||||
0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38,
|
||||
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x23,
|
||||
0x30, 0x30, 0x30, 0x61, 0x20, 0x4f, 0x56, 0x52, 0x32, 0x20, 0x4f, 0x56,
|
||||
0x52, 0x32, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x4d, 0x55, 0x4c, 0x32,
|
||||
0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x23, 0x30, 0x30, 0x33, 0x30, 0x20,
|
||||
0x41, 0x44, 0x44, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
||||
0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54,
|
||||
0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23,
|
||||
0x30, 0x30, 0x30, 0x31, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x57,
|
||||
0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x6b, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x50, 0x4f, 0x50, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x53,
|
||||
0x54, 0x41, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x53,
|
||||
0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20,
|
||||
0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x6b, 0x20, 0x23,
|
||||
0x30, 0x30, 0x30, 0x61, 0x20, 0x44, 0x49, 0x56, 0x32, 0x20, 0x53, 0x57,
|
||||
0x50, 0x32, 0x20, 0x53, 0x54, 0x41, 0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26,
|
||||
0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x20, 0x53, 0x54, 0x48,
|
||||
0x32, 0x6b, 0x72, 0x20, 0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44,
|
||||
0x44, 0x32, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x4c, 0x54, 0x48, 0x32,
|
||||
0x20, 0x3f, 0x26, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a,
|
||||
0x20, 0x20, 0x26, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x35, 0x20, 0x53, 0x54, 0x48,
|
||||
0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x53, 0x55, 0x42,
|
||||
0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43,
|
||||
0x32, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b,
|
||||
0x72, 0x20, 0x4c, 0x44, 0x41, 0x32, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20,
|
||||
0x61, 0x6d, 0x63, 0x70, 0x79, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x21,
|
||||
0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
0x23, 0x30, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x72, 0x65,
|
||||
0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x4f, 0x50,
|
||||
0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x0a, 0x40, 0x73, 0x74, 0x72, 0x2f, 0x3c, 0x70, 0x72, 0x69, 0x6e,
|
||||
0x74, 0x3e, 0x20, 0x28, 0x20, 0x73, 0x74, 0x72, 0x2a, 0x20, 0x2d, 0x2d,
|
||||
0x20, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x44, 0x41, 0x6b, 0x20,
|
||||
0x44, 0x55, 0x50, 0x20, 0x3f, 0x7b, 0x20, 0x50, 0x4f, 0x50, 0x20, 0x50,
|
||||
0x4f, 0x50, 0x32, 0x20, 0x4a, 0x4d, 0x50, 0x32, 0x72, 0x20, 0x7d, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x23, 0x31, 0x38, 0x20, 0x44, 0x45, 0x4f, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x21, 0x2f, 0x3c,
|
||||
0x70, 0x72, 0x69, 0x6e, 0x74, 0x3e, 0x0a
|
||||
0x20, 0x50, 0x4f, 0x50, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20,
|
||||
0x23, 0x30, 0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c,
|
||||
0x44, 0x41, 0x32, 0x6b, 0x20, 0x23, 0x30, 0x30, 0x30, 0x61, 0x20, 0x44,
|
||||
0x49, 0x56, 0x32, 0x20, 0x53, 0x57, 0x50, 0x32, 0x20, 0x53, 0x54, 0x41,
|
||||
0x32, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e,
|
||||
0x75, 0x65, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30,
|
||||
0x30, 0x30, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x23, 0x30,
|
||||
0x30, 0x30, 0x38, 0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x4c, 0x44, 0x41,
|
||||
0x32, 0x20, 0x4c, 0x54, 0x48, 0x32, 0x20, 0x3f, 0x26, 0x62, 0x65, 0x67,
|
||||
0x69, 0x6e, 0x2e, 0x31, 0x0a, 0x0a, 0x20, 0x20, 0x26, 0x62, 0x72, 0x65,
|
||||
0x61, 0x6b, 0x2e, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30,
|
||||
0x30, 0x35, 0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44,
|
||||
0x41, 0x32, 0x20, 0x53, 0x55, 0x42, 0x32, 0x20, 0x53, 0x54, 0x48, 0x32,
|
||||
0x6b, 0x72, 0x20, 0x49, 0x4e, 0x43, 0x32, 0x20, 0x49, 0x4e, 0x43, 0x32,
|
||||
0x20, 0x53, 0x54, 0x48, 0x32, 0x6b, 0x72, 0x20, 0x4c, 0x44, 0x41, 0x32,
|
||||
0x20, 0x41, 0x44, 0x44, 0x32, 0x20, 0x61, 0x6d, 0x63, 0x70, 0x79, 0x5f,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72,
|
||||
0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x30, 0x30, 0x30, 0x30, 0x0a,
|
||||
0x0a, 0x20, 0x20, 0x26, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x50, 0x4f, 0x50, 0x32, 0x72, 0x20, 0x4a, 0x4d, 0x50,
|
||||
0x32, 0x72
|
||||
};
|
||||
unsigned int emit_uxn_lib_undar_tal_len = 1507;
|
||||
unsigned int emit_uxn_lib_undar_tal_len = 1658;
|
||||
|
||||
void
|
||||
uxn_emit_error(const char *str, i32 length, i32 line)
|
||||
|
|
@ -588,7 +601,8 @@ void
|
|||
uxn_emit_inline_str(Arena *a, List *out, const char *str, i32 length)
|
||||
{
|
||||
/* set a pointer to the string literal and then jump over it */
|
||||
StrBuf_append(a, out, ";{ #0002 ADD2 } !{ ");
|
||||
sprintf(uxn_temp_strbuf, ";{ #0001 ADD2 } !{ %04x ", length - 2);
|
||||
StrBuf_append(a, out, uxn_temp_strbuf);
|
||||
|
||||
i32 i = 1;
|
||||
while(i < length - 1) {
|
||||
|
|
@ -994,12 +1008,6 @@ uxn_emit_and(Arena *a, List *out)
|
|||
StrBuf_append(a, out, "AND2 ");
|
||||
}
|
||||
|
||||
void
|
||||
uxn_emit_print(Arena *a, List *out)
|
||||
{
|
||||
StrBuf_append(a, out, "str/<print> ");
|
||||
}
|
||||
|
||||
void
|
||||
uxn_emit_if(Arena *a, List *out)
|
||||
{
|
||||
|
|
@ -1162,7 +1170,6 @@ uxn_emitter()
|
|||
uxn_emit_method,
|
||||
uxn_emit_trait,
|
||||
uxn_emit_const,
|
||||
uxn_emit_print,
|
||||
uxn_emit_neg,
|
||||
uxn_emit_not,
|
||||
uxn_emit_open_paren,
|
||||
|
|
|
|||
|
|
@ -20,10 +20,16 @@ afree()
|
|||
char *
|
||||
amcpy(char *from, unsigned length)
|
||||
{
|
||||
char *ptr = aalloc(length);
|
||||
unsigned total = length + sizeof(unsigned);
|
||||
char *ptr = aalloc(total);
|
||||
|
||||
ptr[0] = (char)(length & 0xff);
|
||||
ptr[1] = (char)((length >> 8) & 0xff);
|
||||
|
||||
for (unsigned i = 0; i < length; i++) {
|
||||
ptr[i] = from[i];
|
||||
ptr[i + sizeof(unsigned)] = from[i];
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,16 +19,21 @@
|
|||
POP2r JMP2r
|
||||
|
||||
@amcpy_ ( length* from* -- result* )
|
||||
OVR2r LIT2r 0008 SUB2r STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0004 ADD2 STA2
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0006 ADD2 LDA2 INC2 INC2 STH2kr #0004 ADD2 STA2
|
||||
STH2kr #0004 ADD2 LDA2 aalloc_
|
||||
STH2kr INC2 INC2 STA2
|
||||
#0000 STH2kr STA2
|
||||
STH2kr #0006 ADD2 LDA2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 STA
|
||||
POP STH2kr #0006 ADD2 LDA2 #08 SFT2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 INC2 STA
|
||||
POP #0000 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
||||
STH2kr LDA2 STH2kr #0006 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0008 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 INC2 INC2 ADD2 STA
|
||||
POP
|
||||
|
||||
&continue.1
|
||||
|
|
@ -61,8 +66,3 @@
|
|||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@str/<print> ( str* -- )
|
||||
LDAk DUP ?{ POP POP2 JMP2r }
|
||||
#18 DEO
|
||||
INC2 !/<print>
|
||||
|
|
|
|||
2
lexer.c
2
lexer.c
|
|
@ -231,8 +231,6 @@ identifierType(void)
|
|||
return check_keyword(2, 1, "r", TOKEN_TYPE_PTR);
|
||||
case 'l':
|
||||
return check_keyword(2, 2, "ex", TOKEN_KEYWORD_PLEX);
|
||||
case 'r':
|
||||
return check_keyword(2, 3, "int", TOKEN_KEYWORD_PRINT);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
1
lexer.h
1
lexer.h
|
|
@ -84,7 +84,6 @@ typedef enum {
|
|||
TOKEN_ARROW_RIGHT,
|
||||
TOKEN_SLL,
|
||||
TOKEN_SRL,
|
||||
TOKEN_KEYWORD_PRINT,
|
||||
TOKEN_KEYWORD_TRAIT,
|
||||
TOKEN_KEYWORD_HALT,
|
||||
TOKEN_KEYWORD_DEVMAP, /* device memory map */
|
||||
|
|
|
|||
|
|
@ -7,3 +7,11 @@ halt;
|
|||
function add(nat a, nat b) nat {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,3 +21,16 @@ print("\n");
|
|||
// }
|
||||
|
||||
halt;
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
function pln(str string) {
|
||||
print(string);
|
||||
write = '\n';
|
||||
}
|
||||
|
|
@ -11,3 +11,12 @@ halt;
|
|||
function calc_damage(nat at, nat accuracy) nat {
|
||||
return at * accuracy / 20 - 3;
|
||||
}
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1,11 @@
|
|||
print((!(5 - 4 > 3 * 2 == false)) as str);
|
||||
halt;
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,3 +11,12 @@ function fib(nat n) nat {
|
|||
if (n < 2) { return n; }
|
||||
return fib(n - 2) + fib(n - 1);
|
||||
}
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,3 +9,12 @@ for (nat j = 0; j < 10; j = j + 1) {
|
|||
}
|
||||
|
||||
halt;
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,3 +2,12 @@ nat i = 122;
|
|||
nat j = 32;
|
||||
print((i - j) as str);
|
||||
halt;
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,12 @@
|
|||
str msg = "nuqneH 'u'?\n";
|
||||
print(msg);
|
||||
halt;
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,3 +12,12 @@ function main() {
|
|||
print("x is something else");
|
||||
}
|
||||
}
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,3 +8,12 @@ function main() {
|
|||
print(((i - j) as str));
|
||||
print("\n");
|
||||
}
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,3 +34,11 @@ for (nat x = 0; x < xSize; x++) {
|
|||
if (found) break;
|
||||
}
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,3 +5,12 @@ if (!flag) {
|
|||
}
|
||||
|
||||
halt;
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
write = '\n';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,11 @@
|
|||
str hello = "hello World!";
|
||||
str msg = " damage inflicted!";
|
||||
|
||||
if (msg[1] == 'd') {
|
||||
print("yes");
|
||||
}
|
||||
|
||||
pln(msg.length as str);
|
||||
pln(msg);
|
||||
print(hello.length as str);
|
||||
hello[0] = hello[0] - ' ';
|
||||
pln(hello);
|
||||
print(hello);
|
||||
halt;
|
||||
|
||||
function pln(str string) {
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,97 @@
|
|||
|100
|
||||
LIT2r 0000
|
||||
|
||||
#0001 #0001 add_ nat_to_str_ print_
|
||||
POP2r BRK
|
||||
@add_ ( a b -- res )
|
||||
OVR2r LIT2r 0004 SUB2r
|
||||
STH2kr STA2
|
||||
STH2kr #0002 ADD2 STA2
|
||||
|
||||
STH2kr LDA2 STH2kr #0002 ADD2 LDA2 ADD2 !&return &return
|
||||
POP2r JMP2r
|
||||
|
||||
@print_ ( string -- )
|
||||
OVR2r LIT2r 0004 SUB2r
|
||||
STH2kr STA2
|
||||
|
||||
STH2kr #0002 ADD2 LDA2
|
||||
#0000 STH2kr #0002 ADD2 STA2
|
||||
|
||||
&while.0 STH2kr #0002 ADD2 LDA2 STH2kr LDA2 LDA2 LTH2 #03 JCN !{
|
||||
STH2kr LDA2 #0002 ADD2 STH2kr #0002 ADD2 LDA2 ADD2 LDA #18 DEO
|
||||
STH2kr #0002 ADD2 LDA2 #0001 ADD2 STH2kr #0002 ADD2 STA2
|
||||
!&while.0 }
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@sext
|
||||
#80 ANDk EQU #ff MUL SWP JMP2r
|
||||
|
||||
@aalloc_ ( size* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
;mem_length_ LDA2 STH2kr STA2
|
||||
;mem_length_ LDA2k STH2kr INC2 INC2 LDA2 ADD2 SWP2 STA2
|
||||
;mem_ STH2kr LDA2 ADD2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@afree_ ( -- result* )
|
||||
OVR2r #0000 ;mem_length_ STA2
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@amcpy_ ( length* from* -- result* )
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0006 ADD2 LDA2 INC2 INC2 STH2kr #0004 ADD2 STA2
|
||||
STH2kr #0004 ADD2 LDA2 aalloc_
|
||||
STH2kr INC2 INC2 STA2
|
||||
STH2kr #0006 ADD2 LDA2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 STA
|
||||
POP STH2kr #0006 ADD2 LDA2 #08 SFT2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 INC2 STA
|
||||
POP #0000 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr LDA2 STH2kr #0006 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0008 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 INC2 INC2 ADD2 STA
|
||||
POP
|
||||
|
||||
&continue.1
|
||||
STH2kr LDA2k INC2k ROT2 STA2
|
||||
POP2 !&begin.1
|
||||
|
||||
&break.1
|
||||
STH2kr INC2 INC2 LDA2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@nat_to_str_ ( n* -- result* )
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
#0005 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr #0008 ADD2 LDA2 #000a OVR2 OVR2 DIV2 MUL2 SUB2 #0030 ADD2 STH2kr INC2 INC2 STH2kr LDA2k #0001 SUB2 SWP2 STA2k
|
||||
POP2 ADD2 STA
|
||||
POP STH2kr #0008 ADD2 LDA2k #000a DIV2 SWP2 STA2
|
||||
|
||||
&continue.1
|
||||
#0000 STH2kr #0008 ADD2 LDA2 LTH2 ?&begin.1
|
||||
|
||||
&break.1
|
||||
#0005 STH2kr LDA2 SUB2 STH2kr INC2 INC2 STH2kr LDA2 ADD2 amcpy_
|
||||
!&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
@mem_length_ #0000
|
||||
@mem_
|
||||
|
|
@ -1,18 +1,46 @@
|
|||
|100
|
||||
LIT2r 0000
|
||||
|
||||
!{ @i $2 } #0000 ;i STA2
|
||||
&while.0 ;i LDA2 ;fixed_size LDA2 LTH2 #03 JCN !{
|
||||
;fixed_size ;i LDA2 #0002 MUL2 ADD2 #0002 ADD2 LDA2 nat_to_str_ str/<print>
|
||||
;{ #0002 ADD2 } !{ 20 00 } str/<print>
|
||||
;i LDA2 #0001 ADD2 ;i STA2 !&while.0 }
|
||||
;{ #0002 ADD2 } !{ 0a 00 } str/<print>
|
||||
POP2r BRK @sext
|
||||
;fixed_size #0005 #0002 MUL2 ADD2 #0002 ADD2 LDA2 #0000 EQU2 #03 JCN !{
|
||||
;fixed_size #0005 #0002 MUL2 ADD2 #0002 ADD2 #0006 SWP2 STA2
|
||||
!&if_end.0 } &if_end.0
|
||||
STH2kr #000c ADD2 LDA2
|
||||
#0000 STH2kr #000c ADD2 STA2
|
||||
|
||||
&while.0 STH2kr #000c ADD2 LDA2 ;fixed_size LDA2 LTH2 #03 JCN !{
|
||||
;fixed_size STH2kr #000c ADD2 LDA2 #0002 MUL2 ADD2 #0002 ADD2 LDA2 nat_to_str_ print_
|
||||
STH2kr #000c ADD2 LDA2 ;fixed_size LDA2 #0001 SUB2 LTH2 #03 JCN !{
|
||||
;{ #0001 ADD2 } !{ 0001 20 00 } print_
|
||||
!&if_end.1 } &if_end.1
|
||||
STH2kr #000c ADD2 LDA2 #0001 ADD2 STH2kr #000c ADD2 STA2
|
||||
!&while.0 }
|
||||
;{ #0001 ADD2 } !{ 0002 0a 00 } print_
|
||||
POP2r BRK
|
||||
@print_ ( string -- )
|
||||
OVR2r LIT2r 0004 SUB2r
|
||||
STH2kr STA2
|
||||
|
||||
STH2kr #0002 ADD2 LDA2
|
||||
#0000 STH2kr #0002 ADD2 STA2
|
||||
|
||||
&while.1 STH2kr #0002 ADD2 LDA2 STH2kr LDA2 LDA2 LTH2 #03 JCN !{
|
||||
STH2kr LDA2 #0002 ADD2 STH2kr #0002 ADD2 LDA2 ADD2 LDA #18 DEO
|
||||
STH2kr #0002 ADD2 LDA2 #0001 ADD2 STH2kr #0002 ADD2 STA2
|
||||
!&while.1 }
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@pln_ ( string -- )
|
||||
OVR2r LIT2r 0002 SUB2r
|
||||
STH2kr STA2
|
||||
|
||||
STH2kr LDA2 print_
|
||||
#0a #18 DEO
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@sext
|
||||
#80 ANDk EQU #ff MUL SWP JMP2r
|
||||
@sdiv
|
||||
OVR #80 AND ?&b_neg &b_pos OVR2 POP #80 AND ?&a_neg_b_pos DIV2 JMP2r &a_neg_b_pos SWP2 #0000 SWP2 SUB2 SWP2 DIV2 #0000 SWP2 SUB2 JMP2r
|
||||
&b_neg #0000 SWP2 SUB2 OVR2 POP #80 AND ?&a_neg_b_neg DIV2 #0000 SWP2 SUB2 JMP2r
|
||||
&a_neg_b_neg #0000 ROT2 SUB2 SWP2 DIV2 JMP2r
|
||||
|
||||
@aalloc_ ( size* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
|
|
@ -24,36 +52,6 @@ POP2r BRK @sext
|
|||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@areturn_ ( size* src* checkpoint* -- result* )
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0004 ADD2 STA2
|
||||
;mem_ STH2kr #0008 ADD2 LDA2 ADD2 STH2kr INC2 INC2 STA2
|
||||
STH2kr #0006 ADD2 LDA2 STH2kr INC2 INC2 LDA2 NEQ2 ?&end.1
|
||||
STH2kr #0006 ADD2 LDA2 !&return
|
||||
|
||||
&end.1
|
||||
#0000 STH2kr STA2
|
||||
|
||||
&begin.2
|
||||
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.2
|
||||
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
||||
POP
|
||||
|
||||
&continue.2
|
||||
STH2kr LDA2k INC2k ROT2 STA2
|
||||
POP2 !&begin.2
|
||||
|
||||
&break.2
|
||||
STH2kr #0008 ADD2 LDA2 STH2kr #0004 ADD2 LDA2 ADD2 ;mem_length_ STA2
|
||||
#0000 ;mem_ ;mem_length_ LDA2 ADD2 STA
|
||||
POP STH2kr INC2 INC2 LDA2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@afree_ ( -- result* )
|
||||
OVR2r #0000 ;mem_length_ STA2
|
||||
#0000
|
||||
|
|
@ -62,16 +60,21 @@ POP2r BRK @sext
|
|||
POP2r JMP2r
|
||||
|
||||
@amcpy_ ( length* from* -- result* )
|
||||
OVR2r LIT2r 0008 SUB2r STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0004 ADD2 STA2
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0006 ADD2 LDA2 INC2 INC2 STH2kr #0004 ADD2 STA2
|
||||
STH2kr #0004 ADD2 LDA2 aalloc_
|
||||
STH2kr INC2 INC2 STA2
|
||||
#0000 STH2kr STA2
|
||||
STH2kr #0006 ADD2 LDA2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 STA
|
||||
POP STH2kr #0006 ADD2 LDA2 #08 SFT2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 INC2 STA
|
||||
POP #0000 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
||||
STH2kr LDA2 STH2kr #0006 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0008 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 INC2 INC2 ADD2 STA
|
||||
POP
|
||||
|
||||
&continue.1
|
||||
|
|
@ -104,177 +107,6 @@ POP2r BRK @sext
|
|||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_to_str_ ( n* -- result* )
|
||||
OVR2r LIT2r 000c SUB2r STH2kr #000a ADD2 STA2
|
||||
#0006 STH2kr INC2 INC2 STA2
|
||||
STH2kr #000a ADD2 LDA2 #8000 EOR2 #8000 LTH2 #00 SWP #0000 NEQ2 #00 SWP STH2kr STA
|
||||
POP LDAkr STHr sext
|
||||
#0000 EQU2 ?&end.1
|
||||
#0000 STH2kr #000a ADD2 LDA2 SUB2 STH2kr #000a ADD2 STA2
|
||||
|
||||
&end.1
|
||||
|
||||
&begin.2
|
||||
STH2kr #000a ADD2 LDA2 #000a OVR2 OVR2 sdiv/b_pos
|
||||
MUL2 SUB2 #0030 ADD2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k
|
||||
POP2 ADD2 STA
|
||||
POP STH2kr #000a ADD2 LDA2k #000a sdiv/b_pos
|
||||
SWP2 STA2
|
||||
|
||||
&continue.2
|
||||
#8000 STH2kr #000a ADD2 LDA2 #8000 EOR2 LTH2 ?&begin.2
|
||||
|
||||
&break.2
|
||||
LDAkr STHr sext
|
||||
#0000 EQU2 ?&end.3
|
||||
#002d STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2k #0001 SUB2 SWP2 STA2k
|
||||
POP2 ADD2 STA
|
||||
POP
|
||||
|
||||
&end.3
|
||||
#0006 STH2kr INC2 INC2 LDA2 SUB2 STH2kr #0004 ADD2 STH2kr INC2 INC2 LDA2 ADD2 amcpy_
|
||||
!&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_to_nat_ ( n* -- result* )
|
||||
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
||||
STH2kr LDA2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@nat_to_int_ ( n* -- result* )
|
||||
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
||||
STH2kr LDA2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_add_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_sub_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 SUB2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_mul_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 MUL2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_div_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 sdiv
|
||||
!&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_eq_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 EQU2 #00 SWP !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_ne_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 NEQ2 #00 SWP !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_lt_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 LTH2 #00 SWP !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_le_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_gt_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 LTH2 #00 SWP !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_ge_ ( b* a* -- result* )
|
||||
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
|
||||
STH2kr STA2
|
||||
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_neg_ ( f* -- result* )
|
||||
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
||||
#0000 STH2kr LDA2 SUB2 !&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@int_abs_ ( f* -- result* )
|
||||
OVR2r LIT2r 0002 SUB2r STH2kr STA2
|
||||
STH2kr LDA2 #8000 EOR2 #8000 LTH2 ?&then.1
|
||||
STH2kr LDA2 !&end.1
|
||||
|
||||
&then.1
|
||||
#0000 STH2kr LDA2 SUB2
|
||||
|
||||
&end.1
|
||||
!&return
|
||||
#0000
|
||||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@str/<print> ( str* -- )
|
||||
LDAk DUP ?{ POP POP2 JMP2r }
|
||||
#18 DEO
|
||||
INC2 !/<print>
|
||||
|
||||
@mem_length_ #0000
|
||||
@mem_ @fixed_size 0006 0001 0002 0003 0004 0005 0006
|
||||
@mem_length_ #0009
|
||||
@mem_ @fixed_size 0006 0001 0002 0003 0004 0005 0000
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|100
|
||||
LIT2r 0000
|
||||
|
||||
#0017 fib_ nat_to_str_ str/<print>
|
||||
#0017 fib_ nat_to_str_ print_
|
||||
POP2r BRK
|
||||
@fib_ ( n -- res )
|
||||
OVR2r LIT2r 0002 SUB2r
|
||||
|
|
@ -12,6 +12,21 @@ POP2r BRK
|
|||
STH2kr LDA2 #0002 SUB2 fib_ STH2kr LDA2 #0001 SUB2 fib_ ADD2 !&return &return
|
||||
POP2r JMP2r
|
||||
|
||||
@print_ ( string -- )
|
||||
OVR2r LIT2r 0004 SUB2r
|
||||
STH2kr STA2
|
||||
|
||||
STH2kr #0002 ADD2 LDA2
|
||||
#0000 STH2kr #0002 ADD2 STA2
|
||||
|
||||
&while.0 STH2kr #0002 ADD2 LDA2 STH2kr LDA2 LDA2 LTH2 #03 JCN !{
|
||||
STH2kr LDA2 #0002 ADD2 STH2kr #0002 ADD2 LDA2 ADD2 LDA #18 DEO
|
||||
STH2kr #0002 ADD2 LDA2 #0001 ADD2 STH2kr #0002 ADD2 STA2
|
||||
!&while.0 }
|
||||
#0a #18 DEO
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@sext
|
||||
#80 ANDk EQU #ff MUL SWP JMP2r
|
||||
|
||||
|
|
@ -33,16 +48,21 @@ POP2r BRK
|
|||
POP2r JMP2r
|
||||
|
||||
@amcpy_ ( length* from* -- result* )
|
||||
OVR2r LIT2r 0008 SUB2r STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0004 ADD2 STA2
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0006 ADD2 LDA2 INC2 INC2 STH2kr #0004 ADD2 STA2
|
||||
STH2kr #0004 ADD2 LDA2 aalloc_
|
||||
STH2kr INC2 INC2 STA2
|
||||
#0000 STH2kr STA2
|
||||
STH2kr #0006 ADD2 LDA2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 STA
|
||||
POP STH2kr #0006 ADD2 LDA2 #08 SFT2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 INC2 STA
|
||||
POP #0000 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
||||
STH2kr LDA2 STH2kr #0006 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0008 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 INC2 INC2 ADD2 STA
|
||||
POP
|
||||
|
||||
&continue.1
|
||||
|
|
@ -75,11 +95,5 @@ POP2r BRK
|
|||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@str/<print> ( str* -- )
|
||||
LDAk DUP ?{ POP POP2 JMP2r }
|
||||
#18 DEO
|
||||
INC2 !/<print>
|
||||
|
||||
@mem_length_ #0000
|
||||
@mem_
|
||||
|
|
@ -1,15 +1,11 @@
|
|||
|100
|
||||
LIT2r 0000
|
||||
|
||||
;msg #0002 ADD2 #0001 ADD2 LDA #64 EQU #03 JCN !{
|
||||
;{ #0002 ADD2 } !{ 79 65 73 00 } str/<print>
|
||||
!&if_end.0 } &if_end.0
|
||||
;msg LDA2 nat_to_str_ pln_
|
||||
;msg pln_
|
||||
;hello LDA2 nat_to_str_ print_
|
||||
;hello #0002 ADD2 #0000 ADD2 ;hello #0002 ADD2 #0000 ADD2 LDA #20 SUB ROT ROT STA
|
||||
;hello pln_
|
||||
;hello print_
|
||||
POP2r BRK
|
||||
@pln_ ( string -- )
|
||||
@print_ ( string -- )
|
||||
OVR2r LIT2r 0004 SUB2r
|
||||
STH2kr STA2
|
||||
|
||||
|
|
@ -45,16 +41,21 @@ POP2r BRK
|
|||
POP2r JMP2r
|
||||
|
||||
@amcpy_ ( length* from* -- result* )
|
||||
OVR2r LIT2r 0008 SUB2r STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0004 ADD2 STA2
|
||||
OVR2r LIT2r 000a SUB2r STH2kr #0008 ADD2 STA2
|
||||
STH2kr #0006 ADD2 STA2
|
||||
STH2kr #0006 ADD2 LDA2 INC2 INC2 STH2kr #0004 ADD2 STA2
|
||||
STH2kr #0004 ADD2 LDA2 aalloc_
|
||||
STH2kr INC2 INC2 STA2
|
||||
#0000 STH2kr STA2
|
||||
STH2kr #0006 ADD2 LDA2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 STA
|
||||
POP STH2kr #0006 ADD2 LDA2 #08 SFT2 #00ff AND2 NIP sext
|
||||
STH2kr INC2 INC2 LDA2 INC2 STA
|
||||
POP #0000 STH2kr STA2
|
||||
|
||||
&begin.1
|
||||
STH2kr LDA2 STH2kr #0004 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0006 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 STA
|
||||
STH2kr LDA2 STH2kr #0006 ADD2 LDA2 LTH2 #00 EQU ?&break.1
|
||||
STH2kr #0008 ADD2 LDA2 STH2kr LDA2 ADD2 LDA sext
|
||||
STH2kr INC2 INC2 LDA2 STH2kr LDA2 INC2 INC2 ADD2 STA
|
||||
POP
|
||||
|
||||
&continue.1
|
||||
|
|
@ -87,11 +88,5 @@ POP2r BRK
|
|||
|
||||
&return
|
||||
POP2r JMP2r
|
||||
|
||||
@str/<print> ( str* -- )
|
||||
LDAk DUP ?{ POP POP2 JMP2r }
|
||||
#18 DEO
|
||||
INC2 !/<print>
|
||||
|
||||
@mem_length_ #0022
|
||||
@mem_ @hello 000c 68 65 6c 6c 6f 20 57 6f 72 6c 64 21 00 @msg 0012 20 64 61 6d 61 67 65 20 69 6e 66 6c 69 63 74 65 64 21 00
|
||||
@mem_length_ #000e
|
||||
@mem_ @hello 000c 68 65 6c 6c 6f 20 57 6f 72 6c 64 21 00
|
||||
|
|
@ -4,3 +4,12 @@ while (i < 10) {
|
|||
print(i as str);
|
||||
i = i + 1;
|
||||
}
|
||||
halt;
|
||||
|
||||
function print(str string) {
|
||||
nat i = 0;
|
||||
while (i < string.length) {
|
||||
write = string[i];
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
4
tests
4
tests
|
|
@ -31,9 +31,9 @@ tests "add.ul" "2" ./cli ./test/add.ul
|
|||
tests "local.ul" "90" ./cli ./test/local.ul
|
||||
tests "global.ul" "90" ./cli ./test/global.ul
|
||||
tests "hello.ul" "nuqneH 'u'?" ./cli ./test/hello.ul
|
||||
tests "bang.ul" "flag is false" ./cli ./test/bang.ul
|
||||
tests "not.ul" "flag is false" ./cli ./test/not.ul
|
||||
tests "if.ul" "x is 20" ./cli ./test/if.ul
|
||||
tests "while.ul" "0123456789" ./cli ./test/while.ul
|
||||
tests "fib.ul" "28657" ./cli ./test/fib.ul
|
||||
tests "attack.ul" "102 damage inflicted!" ./cli ./test/attack.ul
|
||||
tests "array.ul" "1 2 3 4 5 6 " ./cli ./test/array.ul
|
||||
tests "fib.ul" "28657" ./cli ./test/fib.ul
|
||||
Loading…
Reference in New Issue