ps5: generate_expression
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#define EMIT(fmt, ...) printf("\t" fmt "\n" __VA_OPT__(, ) __VA_ARGS__)
|
||||
|
||||
#define MOVQ(src, dst) EMIT("movq %s, %s", (src), (dst))
|
||||
#define MOVQ_IMM(imm, dst) EMIT("movq $%ld, %s", (int64_t)(imm), (dst))
|
||||
#define PUSHQ(src) EMIT("pushq %s", (src))
|
||||
#define POPQ(src) EMIT("popq %s", (src))
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include "symbol_table.h"
|
||||
#include "vslc.h"
|
||||
|
||||
// This header defines a bunch of macros we can use to emit assembly to stdout
|
||||
@@ -168,9 +169,12 @@ static void generate_expression(node_t* expression)
|
||||
// (The candidates are NUMBER_LITERAL, IDENTIFIER, ARRAY_INDEXING, OPERATOR and FUNCTION_CALL)
|
||||
switch (expression->type) {
|
||||
case NUMBER_LITERAL:
|
||||
|
||||
MOVQ_IMM(expression->data.number_literal, RAX);
|
||||
break;
|
||||
case IDENTIFIER:
|
||||
symbol_t *sym = expression->symbol;
|
||||
symbol_t *value = symbol_hashmap_lookup(sym->function_symtable->hashmap, sym->name);
|
||||
MOVQ_IMM(value->node->data.number_literal, RAX);
|
||||
break;
|
||||
case ARRAY_INDEXING:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user