Subversion Repositories Kolibri OS

Rev

Rev 226 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 226 Rev 242
Line 178... Line 178...
178
	mov	dword [edi+4],0
178
	mov	dword [edi+4],0
179
	cmp	byte [ebx],'$'
179
	cmp	byte [ebx],'$'
180
	je	pascal_hex_number
180
	je	pascal_hex_number
181
	cmp	word [ebx],'0x'
181
	cmp	word [ebx],'0x'
182
	je	c_hex_number
182
	je	get_hex_number
183
	mov	al,[esi]
183
	mov	al,[esi]
184
	dec	esi
184
	dec	esi
185
	cmp	al,'h'
185
	cmp	al,'h'
186
	je	get_hex_number
186
	je	get_hex_number
187
	cmp	al,'b'
187
	cmp	al,'b'
188
	je	get_bin_number
188
	je	get_bin_number
Line 277... Line 277...
277
	or	al,al
277
	or	al,al
278
	jz	get_bin_digit
278
	jz	get_bin_digit
279
	or	ebp,-1
279
	or	ebp,-1
280
	jmp	get_bin_digit
280
	jmp	get_bin_digit
281
      c_hex_number:
281
      pascal_hex_number:
282
	cmp	cl,2
-
 
283
	je	bad_number
-
 
284
      pascal_hex_number:
-
 
285
	cmp	cl,1
282
	cmp	cl,1
286
	je	bad_number
283
	je	bad_number
287
      get_hex_number:
284
      get_hex_number:
288
	xor	bl,bl
285
	xor	bl,bl
289
      get_hex_digit:
286
      get_hex_digit:
Line 1268... Line 1265...
1268
	cbw
1265
	cbw
1269
	cmp	ah,dl
1266
	cmp	ah,dl
1270
	jne	value_out_of_range
1267
	jne	value_out_of_range
1271
	mov	[esi+10],al
1268
	mov	[esi+10],al
1272
      mul_first_register_ok:
1269
	or	al,al
-
 
1270
	jnz	mul_first_register_ok
-
 
1271
	mov	[esi+8],al
-
 
1272
      mul_first_register_ok:
1273
	cmp	byte [esi+9],0
1273
	cmp	byte [esi+9],0
1274
	je	mul_calculated
1274
	je	mul_calculated
1275
	mov	al,[edi]
1275
	mov	al,[edi]
1276
	cbw
1276
	cbw
1277
	cwde
1277
	cwde
Line 1285... Line 1285...
1285
	cbw
1285
	cbw
1286
	cmp	ah,dl
1286
	cmp	ah,dl
1287
	jne	value_out_of_range
1287
	jne	value_out_of_range
1288
	mov	[esi+11],al
1288
	mov	[esi+11],al
1289
      mul_calculated:
1289
	or	al,al
-
 
1290
	jnz	mul_calculated
-
 
1291
	mov	[esi+9],al
-
 
1292
      mul_calculated:
1290
	pop	esi
1293
	pop	esi
1291
	jmp	calculation_loop
1294
	jmp	calculation_loop
1292
      calculate_div:
1295
      calculate_div:
1293
	push	esi edx
1296
	push	esi edx
1294
	mov	esi,ebx
1297
	mov	esi,ebx
Line 2173... Line 2176...
2173
	mov	[value_type],7
2176
	mov	[value_type],7
2174
	ret
2177
	ret
2175
 
2178
 
Line 2176... Line 2179...
2176
preevaluate_logical_expression:
2179
preevaluate_logical_expression:
-
 
2180
	xor	al,al
-
 
2181
  preevaluate_embedded_logical_expression:
-
 
2182
	mov	[logical_value_wrapping],al
2177
	push	edi
2183
	push	edi
2178
	call	preevaluate_logical_value
2184
	call	preevaluate_logical_value
2179
      preevaluation_loop:
2185
      preevaluation_loop:
2180
	cmp	al,0FFh
2186
	cmp	al,0FFh
2181
	je	invalid_logical_expression
2187
	je	invalid_logical_expression
Line 2261... Line 2267...
2261
      negation_skipped:
2267
      negation_skipped:
2262
	cmp	byte [esi],'{'
2268
	cmp	byte [esi],'{'
2263
	jne	skip_simple_logical_value
2269
	jne	skip_simple_logical_value
2264
	inc	esi
2270
	inc	esi
2265
      skip_logical_expression:
2271
	xchg	al,[logical_value_wrapping]
-
 
2272
	push	eax
-
 
2273
      skip_logical_expression:
2266
	call	skip_logical_value
2274
	call	skip_logical_value
2267
	lods	byte [esi]
2275
	lods	byte [esi]
2268
	or	al,al
2276
	or	al,al
2269
	jz	wrongly_structured_logical_expression
2277
	jz	wrongly_structured_logical_expression
2270
	cmp	al,0Fh
2278
	cmp	al,0Fh
Line 2273... Line 2281...
2273
	je	skip_logical_expression
2281
	je	skip_logical_expression
2274
	cmp	al,'&'
2282
	cmp	al,'&'
2275
	je	skip_logical_expression
2283
	je	skip_logical_expression
2276
	cmp	al,'}'
2284
	cmp	al,'}'
2277
	je	logical_value_skipped
2285
	jne	wrongly_structured_logical_expression
-
 
2286
	pop	eax
-
 
2287
	mov	[logical_value_wrapping],al
-
 
2288
      logical_value_skipped:
2278
      wrongly_structured_logical_expression:
2289
	clc
-
 
2290
	ret
-
 
2291
      wrongly_structured_logical_expression:
2279
	stc
2292
	stc
2280
	ret
2293
	ret
2281
      skip_simple_logical_value:
2294
      skip_simple_logical_value:
2282
	mov	al,[esi]
2295
	mov	[logical_value_parentheses],0
-
 
2296
      find_simple_logical_value_end:
-
 
2297
	mov	al,[esi]
2283
	or	al,al
2298
	or	al,al
2284
	jz	logical_value_skipped
2299
	jz	logical_value_skipped
2285
	cmp	al,0Fh
2300
	cmp	al,0Fh
2286
	je	logical_value_skipped
2301
	je	logical_value_skipped
2287
	cmp	al,'}'
2302
	cmp	al,'|'
2288
	je	logical_value_skipped
-
 
2289
	cmp	al,'|'
-
 
2290
	je	logical_value_skipped
2303
	je	logical_value_skipped
2291
	cmp	al,'&'
2304
	cmp	al,'&'
2292
	je	logical_value_skipped
2305
	je	logical_value_skipped
2293
	call	skip_symbol
2306
	cmp	al,'{'
-
 
2307
	je	skip_logical_value_internal_parenthesis
-
 
2308
	cmp	al,'}'
-
 
2309
	jne	skip_logical_value_symbol
-
 
2310
	sub	[logical_value_parentheses],1
-
 
2311
	jnc	skip_logical_value_symbol
-
 
2312
	cmp	[logical_value_wrapping],al
-
 
2313
	jne	skip_logical_value_symbol
-
 
2314
	jmp	logical_value_skipped
-
 
2315
      skip_logical_value_internal_parenthesis:
-
 
2316
	inc	[logical_value_parentheses]
-
 
2317
      skip_logical_value_symbol:
-
 
2318
	call	skip_symbol
2294
	jmp	skip_simple_logical_value
2319
	jmp	find_simple_logical_value_end
2295
      logical_value_skipped:
2320
  preevaluate_logical_value:
2296
	clc
-
 
2297
	ret
-
 
2298
 
-
 
2299
preevaluate_logical_value:
-
 
2300
	mov	ebp,edi
2321
	mov	ebp,edi
2301
      preevaluate_negation:
2322
      preevaluate_negation:
2302
	cmp	byte [esi],'~'
2323
	cmp	byte [esi],'~'
2303
	jne	preevaluate_negation_ok
2324
	jne	preevaluate_negation_ok
2304
	movs	byte [edi],[esi]
2325
	movs	byte [edi],[esi]
2305
	jmp	preevaluate_negation
2326
	jmp	preevaluate_negation
2306
      preevaluate_negation_ok:
2327
      preevaluate_negation_ok:
2307
	mov	ebx,esi
2328
	mov	ebx,esi
2308
	xor	edx,edx
2329
	cmp	byte [esi],'{'
2309
	cmp	byte [esi],'{'
-
 
2310
	jne	find_logical_value_boundaries
2330
	jne	preevaluate_simple_logical_value
2311
	movs	byte [edi],[esi]
2331
	lods	byte [esi]
2312
	push	ebp
2332
	stos	byte [edi]
-
 
2333
	push	ebp
2313
	call	preevaluate_logical_expression
2334
	mov	dl,[logical_value_wrapping]
-
 
2335
	push	edx
-
 
2336
	call	preevaluate_embedded_logical_expression
2314
	pop	ebp
2337
	pop	edx
-
 
2338
	mov	[logical_value_wrapping],dl
-
 
2339
	pop	ebp
2315
	cmp	al,0FFh
2340
	cmp	al,0FFh
2316
	je	invalid_logical_value
2341
	je	invalid_logical_value
2317
	cmp	byte [esi],'}'
2342
	cmp	byte [esi],'}'
2318
	jne	invalid_logical_value
2343
	jne	invalid_logical_value
2319
	or	al,al
2344
	or	al,al
Line 2333... Line 2358...
2333
      invalid_logical_value:
2358
      invalid_logical_value:
2334
	mov	edi,ebp
2359
	mov	edi,ebp
2335
	mov	al,0FFh
2360
	mov	al,0FFh
2336
	ret
2361
	ret
2337
      find_logical_value_boundaries:
2362
      preevaluate_simple_logical_value:
-
 
2363
	xor	edx,edx
-
 
2364
	mov	[logical_value_parentheses],edx
-
 
2365
      find_logical_value_boundaries:
2338
	mov	al,[esi]
2366
	mov	al,[esi]
2339
	or	al,al
2367
	or	al,al
2340
	jz	logical_value_boundaries_found
2368
	jz	logical_value_boundaries_found
2341
	cmp	al,'}'
2369
	cmp	al,'{'
-
 
2370
	je	logical_value_internal_parentheses
-
 
2371
	cmp	al,'}'
2342
	je	logical_value_boundaries_found
2372
	je	logical_value_boundaries_parenthesis_close
2343
	cmp	al,'|'
2373
	cmp	al,'|'
2344
	je	logical_value_boundaries_found
2374
	je	logical_value_boundaries_found
2345
	cmp	al,'&'
2375
	cmp	al,'&'
2346
	je	logical_value_boundaries_found
2376
	je	logical_value_boundaries_found
2347
	or	edx,edx
2377
	or	edx,edx
2348
	jnz	next_symbol_in_logical_value
2378
	jnz	next_symbol_in_logical_value
Line 2356... Line 2386...
2356
	mov	edx,esi
2386
	mov	edx,esi
2357
      next_symbol_in_logical_value:
2387
      next_symbol_in_logical_value:
2358
	call	skip_symbol
2388
	call	skip_symbol
2359
	jmp	find_logical_value_boundaries
2389
	jmp	find_logical_value_boundaries
2360
      logical_value_boundaries_found:
2390
      logical_value_internal_parentheses:
-
 
2391
	inc	[logical_value_parentheses]
-
 
2392
	jmp	next_symbol_in_logical_value
-
 
2393
      logical_value_boundaries_parenthesis_close:
-
 
2394
	sub	[logical_value_parentheses],1
-
 
2395
	jnc	next_symbol_in_logical_value
-
 
2396
	cmp	[logical_value_wrapping],'{'
-
 
2397
	jne	next_symbol_in_logical_value
-
 
2398
      logical_value_boundaries_found:
2361
	or	edx,edx
2399
	or	edx,edx
2362
	jz	non_preevaluable_logical_value
2400
	jz	non_preevaluable_logical_value
2363
	mov	al,[edx]
2401
	mov	al,[edx]
2364
	cmp	al,0F0h
2402
	cmp	al,0F0h
2365
	je	compare_symbols
2403
	je	compare_symbols
Line 2504... Line 2542...
2504
	pop	esi edi
2542
	pop	esi edi
2505
	jmp	invalid_logical_value
2543
	jmp	invalid_logical_value
2506
 
2544
 
Line 2507... Line 2545...
2507
calculate_logical_expression:
2545
calculate_logical_expression:
-
 
2546
	xor	al,al
-
 
2547
  calculate_embedded_logical_expression:
-
 
2548
	mov	[logical_value_wrapping],al
2508
	call	get_logical_value
2549
	call	get_logical_value
2509
      logical_loop:
2550
      logical_loop:
2510
	cmp	byte [esi],'|'
2551
	cmp	byte [esi],'|'
2511
	je	logical_or
2552
	je	logical_or
2512
	cmp	byte [esi],'&'
2553
	cmp	byte [esi],'&'
Line 2746... Line 2787...
2746
      return_true:
2787
      return_true:
2747
	or	al,-1
2788
	or	al,-1
2748
	jmp	logical_value_ok
2789
	jmp	logical_value_ok
2749
      logical_expression:
2790
      logical_expression:
2750
	inc	esi
2791
	lods	byte [esi]
-
 
2792
	mov	dl,[logical_value_wrapping]
-
 
2793
	push	edx
2751
	call	calculate_logical_expression
2794
	call	calculate_embedded_logical_expression
2752
	push	eax
2795
	pop	edx
-
 
2796
	mov	[logical_value_wrapping],dl
-
 
2797
	push	eax
2753
	lods	byte [esi]
2798
	lods	byte [esi]
2754
	cmp	al,'}'
2799
	cmp	al,'}'
2755
	jne	invalid_expression
2800
	jne	invalid_expression
2756
	pop	eax
2801
	pop	eax
2757
      logical_value_ok:
2802
      logical_value_ok: