mirror of
https://github.com/kanaka/mal.git
synced 2024-09-21 10:37:58 +03:00
a4ca0426a2
Also some more useful error messages for the arithmetic operators, rather than returning nil.
50 lines
975 B
Plaintext
50 lines
975 B
Plaintext
;; Some useful macros
|
|
|
|
%ifndef MACROS_MAC
|
|
%define MACROS_MAC
|
|
|
|
;; Define a static data value
|
|
;;
|
|
;; static label value
|
|
;;
|
|
%macro static 2+
|
|
%1: %2
|
|
%1.len: equ $ - %1
|
|
%endmacro
|
|
|
|
;; Puts address of data in RSI, length in EDX
|
|
%macro load_static 1
|
|
mov rsi, %1
|
|
mov edx, %1.len
|
|
%endmacro
|
|
|
|
;; Define a symbol which can be compared against
|
|
;;
|
|
;; static_symbol name, string
|
|
;;
|
|
;; Example:
|
|
;;
|
|
;; static_symbol def_symbol, 'def!'
|
|
;;
|
|
%macro static_symbol 2
|
|
%strlen slen %2 ; length of string
|
|
|
|
%1: ISTRUC Array
|
|
AT Array.type, db maltype_symbol
|
|
AT Array.refcount, dw 1
|
|
AT Array.length, dd slen
|
|
AT Array.data, db %2
|
|
IEND
|
|
%endmacro
|
|
|
|
;; Macro for printing raw string
|
|
;;
|
|
%macro print_str_mac 1
|
|
mov rsi, %1 ; String address
|
|
mov rdx, %1.len ; Length of string
|
|
call print_rawstring
|
|
%endmacro
|
|
|
|
%endif
|
|
|