mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-21 22:59:16 +02:00
WIP - make-vector
Working on this, code does not compile yet due to issues with the C macro. There are still lower-level changes required to support vectors, though. Especially changes to the GC.
This commit is contained in:
parent
3682b7f9d0
commit
66e69f2c29
4 changed files with 21 additions and 1 deletions
4
cgen.scm
4
cgen.scm
|
@ -434,6 +434,7 @@
|
||||||
((eq? p 'string->number)"Cyc_string2number")
|
((eq? p 'string->number)"Cyc_string2number")
|
||||||
((eq? p 'list->string) "Cyc_list2string")
|
((eq? p 'list->string) "Cyc_list2string")
|
||||||
((eq? p 'string->list) "string2list")
|
((eq? p 'string->list) "string2list")
|
||||||
|
((eq? p 'make-vector) "make_vector")
|
||||||
((eq? p 'string-append) "Cyc_string_append")
|
((eq? p 'string-append) "Cyc_string_append")
|
||||||
((eq? p 'string-cmp) "Cyc_string_cmp")
|
((eq? p 'string-cmp) "Cyc_string_cmp")
|
||||||
((eq? p 'string->symbol) "Cyc_string2symbol")
|
((eq? p 'string->symbol) "Cyc_string2symbol")
|
||||||
|
@ -501,6 +502,7 @@
|
||||||
current-input-port open-input-file
|
current-input-port open-input-file
|
||||||
char->integer system string->number
|
char->integer system string->number
|
||||||
string-append string-cmp list->string string->list
|
string-append string-cmp list->string string->list
|
||||||
|
make-vector
|
||||||
symbol->string number->string
|
symbol->string number->string
|
||||||
+ - * / apply cons length cell))))
|
+ - * / apply cons length cell))))
|
||||||
|
|
||||||
|
@ -512,7 +514,7 @@
|
||||||
;; Does primitive allocate an object?
|
;; Does primitive allocate an object?
|
||||||
(define (prim:allocates-object? exp)
|
(define (prim:allocates-object? exp)
|
||||||
(and (prim? exp)
|
(and (prim? exp)
|
||||||
(member exp '(string->list))))
|
(member exp '(string->list make-vector))))
|
||||||
|
|
||||||
;; c-compile-prim : prim-exp -> string -> string
|
;; c-compile-prim : prim-exp -> string -> string
|
||||||
(define (c-compile-prim p cont)
|
(define (c-compile-prim p cont)
|
||||||
|
|
|
@ -1100,6 +1100,9 @@ void _string_91append(object cont, object args) {
|
||||||
void _string_91_125list(object cont, object args) {
|
void _string_91_125list(object cont, object args) {
|
||||||
string2list(lst, car(args));
|
string2list(lst, car(args));
|
||||||
return_funcall1(cont, &lst);}
|
return_funcall1(cont, &lst);}
|
||||||
|
void _make_91_125vector(object cont, object args) {
|
||||||
|
make_vector(v, car(args), cadr(args));
|
||||||
|
return_funcall1(cont, &v);}
|
||||||
void _list_91_125string(object cont, object args) {
|
void _list_91_125string(object cont, object args) {
|
||||||
string_type s = Cyc_list2string(car(args));
|
string_type s = Cyc_list2string(car(args));
|
||||||
return_funcall1(cont, &s);}
|
return_funcall1(cont, &s);}
|
||||||
|
@ -1761,6 +1764,7 @@ static primitive_type list_91_125string_primitive = {primitive_tag, "list->strin
|
||||||
static primitive_type string_91_125symbol_primitive = {primitive_tag, "string->symbol", &_string_91_125symbol};
|
static primitive_type string_91_125symbol_primitive = {primitive_tag, "string->symbol", &_string_91_125symbol};
|
||||||
static primitive_type symbol_91_125string_primitive = {primitive_tag, "symbol->string", &_symbol_91_125string};
|
static primitive_type symbol_91_125string_primitive = {primitive_tag, "symbol->string", &_symbol_91_125string};
|
||||||
static primitive_type number_91_125string_primitive = {primitive_tag, "number->string", &_number_91_125string};
|
static primitive_type number_91_125string_primitive = {primitive_tag, "number->string", &_number_91_125string};
|
||||||
|
static primitive_type make_91_125vector_primitive = {primitive_tag, "make-vector", &_make_91_125vector};
|
||||||
static primitive_type boolean_127_primitive = {primitive_tag, "boolean?", &_boolean_127};
|
static primitive_type boolean_127_primitive = {primitive_tag, "boolean?", &_boolean_127};
|
||||||
static primitive_type char_127_primitive = {primitive_tag, "char?", &_char_127};
|
static primitive_type char_127_primitive = {primitive_tag, "char?", &_char_127};
|
||||||
static primitive_type eof_91object_127_primitive = {primitive_tag, "eof-object?", &_eof_91object_127};
|
static primitive_type eof_91object_127_primitive = {primitive_tag, "eof-object?", &_eof_91object_127};
|
||||||
|
@ -1858,6 +1862,7 @@ const object primitive_list_91_125string = &list_91_125string_primitive;
|
||||||
const object primitive_string_91_125symbol = &string_91_125symbol_primitive;
|
const object primitive_string_91_125symbol = &string_91_125symbol_primitive;
|
||||||
const object primitive_symbol_91_125string = &symbol_91_125string_primitive;
|
const object primitive_symbol_91_125string = &symbol_91_125string_primitive;
|
||||||
const object primitive_number_91_125string = &number_91_125string_primitive;
|
const object primitive_number_91_125string = &number_91_125string_primitive;
|
||||||
|
const object primitive_make_91_125vector = &make_91_125vector_primitive;
|
||||||
const object primitive_boolean_127 = &boolean_127_primitive;
|
const object primitive_boolean_127 = &boolean_127_primitive;
|
||||||
const object primitive_char_127 = &char_127_primitive;
|
const object primitive_char_127 = &char_127_primitive;
|
||||||
const object primitive_eof_91object_127 = &eof_91object_127_primitive;
|
const object primitive_eof_91object_127 = &eof_91object_127_primitive;
|
||||||
|
|
12
runtime.h
12
runtime.h
|
@ -161,6 +161,17 @@ void do_dispatch(int argc, function_type func, object clo, object *buffer);
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define make_vector(v, len, fill) object v = nil; { \
|
||||||
|
int i; \
|
||||||
|
v = (object)alloca(sizeof(vector_type)); \
|
||||||
|
v->tag = vector_tag; \
|
||||||
|
v->num_elt = ((integer_type *)len)->value; \
|
||||||
|
v->elts = (v->num_elt > 0) ? (object *)alloca(sizeof(object) * v->num_elt): NULL; \
|
||||||
|
for (i = 0; i < v->num_elt; i++) { \
|
||||||
|
v->elts[i] = fill; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
/* Global variables. */
|
/* Global variables. */
|
||||||
extern clock_t start; /* Starting time. */
|
extern clock_t start; /* Starting time. */
|
||||||
extern char *stack_begin; /* Initialized by main. */
|
extern char *stack_begin; /* Initialized by main. */
|
||||||
|
@ -264,6 +275,7 @@ extern const object primitive_list_91_125string;
|
||||||
extern const object primitive_string_91_125symbol;
|
extern const object primitive_string_91_125symbol;
|
||||||
extern const object primitive_symbol_91_125string;
|
extern const object primitive_symbol_91_125string;
|
||||||
extern const object primitive_number_91_125string;
|
extern const object primitive_number_91_125string;
|
||||||
|
extern const object primitive_make_91_125vector;
|
||||||
extern const object primitive_system;
|
extern const object primitive_system;
|
||||||
extern const object primitive_boolean_127;
|
extern const object primitive_boolean_127;
|
||||||
extern const object primitive_char_127;
|
extern const object primitive_char_127;
|
||||||
|
|
|
@ -516,6 +516,7 @@
|
||||||
string->symbol
|
string->symbol
|
||||||
symbol->string
|
symbol->string
|
||||||
number->string
|
number->string
|
||||||
|
make-vector
|
||||||
boolean?
|
boolean?
|
||||||
char?
|
char?
|
||||||
eof-object?
|
eof-object?
|
||||||
|
|
Loading…
Add table
Reference in a new issue