add instructions for loading string const to register
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -58,4 +58,6 @@ bin
|
|||||||
build
|
build
|
||||||
|
|
||||||
*.yy.c
|
*.yy.c
|
||||||
*.yy.h
|
*.yy.h
|
||||||
|
|
||||||
|
out.car
|
||||||
@@ -48,6 +48,7 @@ int main(int argc, char *argv[]) {
|
|||||||
fwrite(&translated.constants.size, sizeof(size_t), 1, file);
|
fwrite(&translated.constants.size, sizeof(size_t), 1, file);
|
||||||
fwrite(&translated.bytecode.size, sizeof(size_t), 1, file);
|
fwrite(&translated.bytecode.size, sizeof(size_t), 1, file);
|
||||||
fwrite(translated.constants.data, 1, translated.constants.size, file);
|
fwrite(translated.constants.data, 1, translated.constants.size, file);
|
||||||
|
fwrite(translated.bytecode.data, translated.bytecode.element_size, translated.bytecode.size, file);
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
|
|||||||
@@ -4,5 +4,10 @@
|
|||||||
|
|
||||||
void translate_parsed_string(Translated *translated, ParsedValue *parsedValue) {
|
void translate_parsed_string(Translated *translated, ParsedValue *parsedValue) {
|
||||||
size_t string_pos = arena_push_string(&translated->constants, (char*)parsedValue->data);
|
size_t string_pos = arena_push_string(&translated->constants, (char*)parsedValue->data);
|
||||||
// set_registers(translated, 1);
|
set_registers(translated, 1);
|
||||||
|
push_instruction_code(translated, OP_LOAD_CONST);
|
||||||
|
push_instruction_code(translated, 0);
|
||||||
|
push_instruction_code(translated, OP_TYPE_STRING);
|
||||||
|
push_instruction_code(translated,strlen(parsedValue->data)+1);
|
||||||
|
push_instruction_code(translated, string_pos);
|
||||||
}
|
}
|
||||||
@@ -55,8 +55,7 @@ size_t arena_push(ConstantArena *arena, const void *data, size_t length) {
|
|||||||
|
|
||||||
Translated init_translator() {
|
Translated init_translator() {
|
||||||
Translated translated;
|
Translated translated;
|
||||||
|
darray_init(&translated.bytecode, sizeof(size_t));
|
||||||
darray_init(&translated.bytecode, sizeof(uint8_t));
|
|
||||||
arena_init(&translated.constants);
|
arena_init(&translated.constants);
|
||||||
return translated;
|
return translated;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
#include "../parser/parser.h"
|
#include "../parser/parser.h"
|
||||||
#include "../memory.h"
|
#include "../memory.h"
|
||||||
|
|
||||||
typedef enum { OP_INIT_STRING } OperationType;
|
typedef enum { OP_LOAD_CONST=255 } OperationType;
|
||||||
|
typedef enum { OP_TYPE_STRING=255 } types;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void *data;
|
void *data;
|
||||||
|
|||||||
Reference in New Issue
Block a user