mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-05 22:38:44 +00:00
Use malloc from <stdlib.h>
Signed-off-by: Kakadu <Kakadu@pm.me>
This commit is contained in:
parent
72b67ed632
commit
c9cd55d173
1 changed files with 40 additions and 40 deletions
|
|
@ -3,7 +3,7 @@
|
|||
# include <string.h>
|
||||
# include <stdio.h>
|
||||
# include <errno.h>
|
||||
# include <malloc.h>
|
||||
# include <stdib.h>
|
||||
# include "../runtime/runtime.h"
|
||||
|
||||
void *__start_custom_data;
|
||||
|
|
@ -18,7 +18,7 @@ typedef struct {
|
|||
int stringtab_size; /* The size (in bytes) of the string table */
|
||||
int global_area_size; /* The size (in words) of global area */
|
||||
int public_symbols_number; /* The number of public symbols */
|
||||
char buffer[0];
|
||||
char buffer[0];
|
||||
} bytefile;
|
||||
|
||||
/* Gets a string from a string table by an index */
|
||||
|
|
@ -45,7 +45,7 @@ bytefile* read_file (char *fname) {
|
|||
if (f == 0) {
|
||||
failure ("%s\n", strerror (errno));
|
||||
}
|
||||
|
||||
|
||||
if (fseek (f, 0, SEEK_END) == -1) {
|
||||
failure ("%s\n", strerror (errno));
|
||||
}
|
||||
|
|
@ -55,31 +55,31 @@ bytefile* read_file (char *fname) {
|
|||
if (file == 0) {
|
||||
failure ("*** FAILURE: unable to allocate memory.\n");
|
||||
}
|
||||
|
||||
|
||||
rewind (f);
|
||||
|
||||
if (size != fread (&file->stringtab_size, 1, size, f)) {
|
||||
failure ("%s\n", strerror (errno));
|
||||
}
|
||||
|
||||
|
||||
fclose (f);
|
||||
|
||||
|
||||
file->string_ptr = &file->buffer [file->public_symbols_number * 2 * sizeof(int)];
|
||||
file->public_ptr = (int*) file->buffer;
|
||||
file->code_ptr = &file->string_ptr [file->stringtab_size];
|
||||
file->global_ptr = (int*) malloc (file->global_area_size * sizeof (int));
|
||||
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
/* Disassembles the bytecode pool */
|
||||
void disassemble (FILE *f, bytefile *bf) {
|
||||
|
||||
|
||||
# define INT (ip += sizeof (int), *(int*)(ip - sizeof (int)))
|
||||
# define BYTE *ip++
|
||||
# define STRING get_string (bf, INT)
|
||||
# define FAIL failure ("ERROR: invalid opcode %d-%d\n", h, l)
|
||||
|
||||
|
||||
char *ip = bf->code_ptr;
|
||||
char *ops [] = {"+", "-", "*", "/", "%", "<", "<=", ">", ">=", "==", "!=", "&&", "!!"};
|
||||
char *pats[] = {"=str", "#string", "#array", "#sexp", "#ref", "#val", "#fun"};
|
||||
|
|
@ -90,59 +90,59 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
l = x & 0x0F;
|
||||
|
||||
fprintf (f, "0x%.8x:\t", ip-bf->code_ptr-1);
|
||||
|
||||
|
||||
switch (h) {
|
||||
case 15:
|
||||
goto stop;
|
||||
|
||||
|
||||
/* BINOP */
|
||||
case 0:
|
||||
fprintf (f, "BINOP\t%s", ops[l-1]);
|
||||
break;
|
||||
|
||||
|
||||
case 1:
|
||||
switch (l) {
|
||||
case 0:
|
||||
fprintf (f, "CONST\t%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 1:
|
||||
fprintf (f, "STRING\t%s", STRING);
|
||||
break;
|
||||
|
||||
|
||||
case 2:
|
||||
fprintf (f, "SEXP\t%s ", STRING);
|
||||
fprintf (f, "%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 3:
|
||||
fprintf (f, "STI");
|
||||
break;
|
||||
|
||||
|
||||
case 4:
|
||||
fprintf (f, "STA");
|
||||
break;
|
||||
|
||||
|
||||
case 5:
|
||||
fprintf (f, "JMP\t0x%.8x", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 6:
|
||||
fprintf (f, "END");
|
||||
break;
|
||||
|
||||
|
||||
case 7:
|
||||
fprintf (f, "RET");
|
||||
break;
|
||||
|
||||
|
||||
case 8:
|
||||
fprintf (f, "DROP");
|
||||
break;
|
||||
|
||||
|
||||
case 9:
|
||||
fprintf (f, "DUP");
|
||||
break;
|
||||
|
||||
|
||||
case 10:
|
||||
fprintf (f, "SWAP");
|
||||
break;
|
||||
|
|
@ -150,12 +150,12 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
case 11:
|
||||
fprintf (f, "ELEM");
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
FAIL;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
|
|
@ -168,27 +168,27 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
default: FAIL;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 5:
|
||||
switch (l) {
|
||||
case 0:
|
||||
fprintf (f, "CJMPz\t0x%.8x", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 1:
|
||||
fprintf (f, "CJMPnz\t0x%.8x", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 2:
|
||||
fprintf (f, "BEGIN\t%d ", INT);
|
||||
fprintf (f, "%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 3:
|
||||
fprintf (f, "CBEGIN\t%d ", INT);
|
||||
fprintf (f, "%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 4:
|
||||
fprintf (f, "CLOSURE\t0x%.8x", INT);
|
||||
{int n = INT;
|
||||
|
|
@ -203,30 +203,30 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
}
|
||||
};
|
||||
break;
|
||||
|
||||
|
||||
case 5:
|
||||
fprintf (f, "CALLC\t%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 6:
|
||||
fprintf (f, "CALL\t0x%.8x ", INT);
|
||||
fprintf (f, "%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 7:
|
||||
fprintf (f, "TAG\t%s ", STRING);
|
||||
fprintf (f, "%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 8:
|
||||
fprintf (f, "ARRAY\t%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 9:
|
||||
fprintf (f, "FAIL\t%d", INT);
|
||||
fprintf (f, "%d", INT);
|
||||
break;
|
||||
|
||||
|
||||
case 10:
|
||||
fprintf (f, "LINE\t%d", INT);
|
||||
break;
|
||||
|
|
@ -235,7 +235,7 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
FAIL;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 6:
|
||||
fprintf (f, "PATT\t%s", pats[l]);
|
||||
break;
|
||||
|
|
@ -245,7 +245,7 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
case 0:
|
||||
fprintf (f, "CALL\tLread");
|
||||
break;
|
||||
|
||||
|
||||
case 1:
|
||||
fprintf (f, "CALL\tLwrite");
|
||||
break;
|
||||
|
|
@ -267,7 +267,7 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
FAIL;
|
||||
}
|
||||
|
|
@ -281,13 +281,13 @@ void disassemble (FILE *f, bytefile *bf) {
|
|||
/* Dumps the contents of the file */
|
||||
void dump_file (FILE *f, bytefile *bf) {
|
||||
int i;
|
||||
|
||||
|
||||
fprintf (f, "String table size : %d\n", bf->stringtab_size);
|
||||
fprintf (f, "Global area size : %d\n", bf->global_area_size);
|
||||
fprintf (f, "Number of public symbols: %d\n", bf->public_symbols_number);
|
||||
fprintf (f, "Public symbols :\n");
|
||||
|
||||
for (i=0; i < bf->public_symbols_number; i++)
|
||||
for (i=0; i < bf->public_symbols_number; i++)
|
||||
fprintf (f, " 0x%.8x: %s\n", get_public_offset (bf, i), get_public_name (bf, i));
|
||||
|
||||
fprintf (f, "Code:\n");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue