Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1188 → Rev 1189

/programs/develop/fasm/trunk/preproce.inc
37,6 → 37,7
mov eax,[additional_memory_end]
mov [labels_list],eax
xor eax,eax
mov [source_start],eax
mov [display_buffer],eax
mov [hash_tree],eax
mov [macro_status],al
375,12 → 376,14
ret
directive_ok:
lea esi,[edx+ebp]
call directive_handler
directive_handler:
pop ecx
movzx eax,word [ebx]
add eax,preprocessor
add eax,ecx
clc
ret
 
 
preprocess_line:
mov eax,esp
sub eax,100h
756,10 → 759,7
define_fix_constant:
add edx,5
add esi,2
push edx esi
mov esi,edx
call skip_parameters
xchg esi,[esp]
push edx
mov ch,11b
jmp define_preprocessor_constant
define_equ_constant:
766,7 → 766,6
add esi,3
push esi
call process_equ_constants
push esi
mov esi,[struc_name]
mov ch,10b
define_preprocessor_constant:
773,7 → 772,7
mov byte [esi-2],3Bh
mov cl,[esi-1]
call add_preprocessor_symbol
pop esi ebx
pop ebx
mov ecx,edi
dec ecx
sub ecx,ebx
790,34 → 789,11
call add_preprocessor_symbol
movzx eax,byte [esi-1]
add esi,eax
push esi edx
call skip_parameters
pop edx ebx
lea ecx,[esi-1]
sub ecx,ebx
mov [edx+8],ebx
lea ecx,[edi-1]
sub ecx,esi
mov [edx+8],esi
mov [edx+12],ecx
jmp line_preprocessed
skip_parameters:
lods byte [esi]
or al,al
jz parameters_skipped
cmp al,'{'
je parameters_skipped
cmp al,22h
je skip_quoted_parameter
cmp al,1Ah
jne skip_parameters
lods byte [esi]
movzx eax,al
add esi,eax
jmp skip_parameters
skip_quoted_parameter:
lods dword [esi]
add esi,eax
jmp skip_parameters
parameters_skipped:
ret
 
define_struc:
mov ch,1
959,8 → 935,25
mov [instant_macro_start],esi
cmp [base_code],10h
je prepare_match
call skip_parameters
instant_macro_parameters_skipped:
skip_parameters:
lods byte [esi]
or al,al
jz parameters_skipped
cmp al,'{'
je parameters_skipped
cmp al,22h
je skip_quoted_parameter
cmp al,1Ah
jne skip_parameters
lods byte [esi]
movzx eax,al
add esi,eax
jmp skip_parameters
skip_quoted_parameter:
lods dword [esi]
add esi,eax
jmp skip_parameters
parameters_skipped:
dec esi
mov [parameters_end],esi
lods byte [esi]
973,7 → 966,7
call skip_pattern
mov [value_type],80h+10b
call process_symbolic_constants
jmp instant_macro_parameters_skipped
jmp parameters_skipped
skip_pattern:
lods byte [esi]
or al,al
1522,15 → 1515,9
jae do_match
cmp [base_code],0
jne do_irp
call get_number
jc invalid_value
or ebp,ebp
jnz invalid_value
cmp dword [edi+4],0
jne value_out_of_range
mov eax,[edi]
cmp eax,80000000h
jae value_out_of_range
call precalculate_value
cmp eax,0
jl value_out_of_range
push [free_additional_memory]
push [macro_symbols]
mov [macro_symbols],0
1558,16 → 1545,10
cmp al,':'
jne rept_counter_added
push edx
call get_number
jc invalid_value
or ebp,ebp
jnz invalid_value
cmp dword [edi+4],0
jne value_out_of_range
mov eax,[edi]
call precalculate_value
mov edx,eax
add edx,[counter_limit]
jc value_out_of_range
jo value_out_of_range
pop edx
mov dword [edx+8],eax
lods byte [esi]
1606,6 → 1587,21
mov ecx,edx
call move_data
jmp initial_preprocessing_ok
precalculate_value:
push edi
call convert_expression
mov al,')'
stosb
push esi
mov esi,[esp+4]
call calculate_expression
mov eax,[edi]
mov ecx,[edi+4]
pop esi edi
cdq
cmp edx,ecx
jne value_out_of_range
ret
do_irp:
cmp byte [esi],1Ah
jne invalid_macro_arguments
1977,10 → 1973,10
replace_macro_symbol:
pop edi eax
mov ecx,[edx+8]
and ecx,not 80000000h
mov edx,[edx+12]
or edx,edx
jz replace_macro_counter
and ecx,not 80000000h
xchg esi,edx
call move_data
mov esi,edx
2057,6 → 2053,12
inc edi
jmp multiple_macro_counter_values
store_number_symbol:
cmp ecx,0
jge numer_symbol_sign_ok
neg ecx
mov al,'-'
stos byte [edi]
numer_symbol_sign_ok:
mov ax,1Ah
stos word [edi]
push edi