Check-in [3fff6adc90]
Not logged in
Overview
Comment:Fix in type check for DECLARE and LOCAL.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 3fff6adc908314955bb3b9ce43903a5413a681b1
User & Date: peter 2022-12-23 17:07:02
Context
2022-12-25
08:17:05
[2524084992] Added support for Haiku OS. (user: peter tags: trunk)
2022-12-23
17:07:02
[3fff6adc90] Fix in type check for DECLARE and LOCAL. (user: peter tags: trunk)
2022-12-18
19:09:23
[3acfce214a] Improved code for RUN statement. (user: peter tags: trunk)
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to bacon_trunk/bacon.bac.

1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
			var$ = CHOP$(TOKEN$(arg$, 1, "TREE"))
			type$ = CHOP$(TOKEN$(arg$, 2, "TREE"))
		ELSE
			var$ = CHOP$(arg$)
			IF ISTOKEN(var$, "ARRAY") THEN
				array$ = TOKEN$(var$, 2, "ARRAY")
				var$ = TOKEN$(var$, 1, "ARRAY")
			ELIF REGEX(var$, "DIR$|FILE$|short$|int$|long$|float$|double$|char$|void$|STRING$|NUMBER$|FLOATING$") AND NOT(ISTOKEN(var$, "TYPE")) THEN
				EPRINT NL$, "Syntax error: missing TYPE keyword in DECLARE/GLOBAL at line ", g_COUNTER, " in file '", g_CURFILE$, "'!"
				END 1
			FI
			type$ = IIF$(INSTR(var$, g_STRINGSIGN$), "char*", IIF$(INSTR(var$, g_FLOATSIGN$), "double", g_VARTYPE$))
		END IF

		' Check if variable was already declared
		IF NOT(INSTR(var$, ".")) AND LEFT$(var$, 1) != "(" THEN
			FOR str$ IN EXTRACT$(var$, " ") STEP ","







<
<
<







1699
1700
1701
1702
1703
1704
1705



1706
1707
1708
1709
1710
1711
1712
			var$ = CHOP$(TOKEN$(arg$, 1, "TREE"))
			type$ = CHOP$(TOKEN$(arg$, 2, "TREE"))
		ELSE
			var$ = CHOP$(arg$)
			IF ISTOKEN(var$, "ARRAY") THEN
				array$ = TOKEN$(var$, 2, "ARRAY")
				var$ = TOKEN$(var$, 1, "ARRAY")



			FI
			type$ = IIF$(INSTR(var$, g_STRINGSIGN$), "char*", IIF$(INSTR(var$, g_FLOATSIGN$), "double", g_VARTYPE$))
		END IF

		' Check if variable was already declared
		IF NOT(INSTR(var$, ".")) AND LEFT$(var$, 1) != "(" THEN
			FOR str$ IN EXTRACT$(var$, " ") STEP ","
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
		var$ = CHOP$(TOKEN$(arg$, 1, "TREE"))
		type$ = CHOP$(TOKEN$(arg$, 2, "TREE"))
	ELSE
		var$ = CHOP$(arg$)
		IF ISTOKEN(var$, "ARRAY") THEN
			array$ = TOKEN$(var$, 2, "ARRAY")
			var$ = TOKEN$(var$, 1, "ARRAY")
		ELIF REGEX(var$, "DIR$|FILE$|short$|int$|long$|float$|double$|char$|void$|STRING$|NUMBER$|FLOATING$") AND NOT(ISTOKEN(var$, "TYPE")) THEN
			EPRINT NL$, "Syntax error: missing TYPE keyword in LOCAL at line ", g_COUNTER, " in file '", g_CURFILE$, "'!"
			END 1
		FI
		type$ = IIF$(INSTR(var$, g_STRINGSIGN$), "char*", IIF$(INSTR(var$, g_FLOATSIGN$), "double", "long"))
	END IF

	' Check if variable was already declared
	IF NOT(INSTR(var$, ".")) AND LEFT$(var$, 1) != "(" THEN
		FOR str$ IN EXTRACT$(var$, " ") STEP ","
			' Check for C keywords
			IF REGEX(str$, g_C_KEYWORDS$) THEN







<
<
<

|







1858
1859
1860
1861
1862
1863
1864



1865
1866
1867
1868
1869
1870
1871
1872
1873
		var$ = CHOP$(TOKEN$(arg$, 1, "TREE"))
		type$ = CHOP$(TOKEN$(arg$, 2, "TREE"))
	ELSE
		var$ = CHOP$(arg$)
		IF ISTOKEN(var$, "ARRAY") THEN
			array$ = TOKEN$(var$, 2, "ARRAY")
			var$ = TOKEN$(var$, 1, "ARRAY")



		FI
		type$ = IIF$(INSTR(var$, g_STRINGSIGN$), "char*", IIF$(INSTR(var$, g_FLOATSIGN$), "double", g_VARTYPE$))
	END IF

	' Check if variable was already declared
	IF NOT(INSTR(var$, ".")) AND LEFT$(var$, 1) != "(" THEN
		FOR str$ IN EXTRACT$(var$, " ") STEP ","
			' Check for C keywords
			IF REGEX(str$, g_C_KEYWORDS$) THEN

Changes to bacon_trunk/bacon.sh.

2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
	    VAR=$(echo "${1%% TREE *}")
	    TYPE=$(echo "${1##* TREE }")
	else
	    if [[ "${1}" = +(* ARRAY *) ]]
	    then
		ARRAY=${1##* ARRAY }
	        VAR=$(echo "${1%% ARRAY *}")
            elif [[ "${@}" = +(DIR|FILE|*int|*short|*long|*float|*double|*char|void|STRING|NUMBER|FLOATING) && "${@}" != +(*TYPE*) ]]
            then
	        echo -e "\nSyntax error: missing TYPE keyword in DECLARE/GLOBAL at line $g_COUNTER in file '$g_CURFILE'!"
	        exit 1
            else
	        VAR=$(echo "${1}")
	    fi
            # This construction needed for KSH93
	    if [[ "${VAR//${g_STRINGSIGN}/}" != "${VAR}" ]]
	    then
	        TYPE="char*"
	    elif [[ "${VAR//${g_FLOATSIGN}/}" != "${VAR}" ]]
	    then
	        TYPE="double"
	    else
	        TYPE="long"
	    fi
        fi
        # Check if variable was already declared - no record and not a function pointer?
        if [[ "$VAR" != +(*.*) && "$VAR" != +(\(*) ]]
        then
            IFS=","
	    for i in ${VAR// /}







<
<
<
<











|







2267
2268
2269
2270
2271
2272
2273




2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
	    VAR=$(echo "${1%% TREE *}")
	    TYPE=$(echo "${1##* TREE }")
	else
	    if [[ "${1}" = +(* ARRAY *) ]]
	    then
		ARRAY=${1##* ARRAY }
	        VAR=$(echo "${1%% ARRAY *}")




            else
	        VAR=$(echo "${1}")
	    fi
            # This construction needed for KSH93
	    if [[ "${VAR//${g_STRINGSIGN}/}" != "${VAR}" ]]
	    then
	        TYPE="char*"
	    elif [[ "${VAR//${g_FLOATSIGN}/}" != "${VAR}" ]]
	    then
	        TYPE="double"
	    else
	        TYPE="${g_VARTYPE}"
	    fi
        fi
        # Check if variable was already declared - no record and not a function pointer?
        if [[ "$VAR" != +(*.*) && "$VAR" != +(\(*) ]]
        then
            IFS=","
	    for i in ${VAR// /}
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
	VAR=$(echo "${1%% TREE *}")
	TYPE=$(echo "${1##* TREE }")
    else
	if [[ "${1}" = +(* ARRAY *) ]]
	then
	    ARRAY=${1##* ARRAY }
	    VAR=$(echo "${1%% ARRAY *}")
        elif [[ "${@}" = +(DIR|FILE|*int|*short|*long|*float|*double|*char|void|STRING|NUMBER|FLOATING) && "${@}" != +(*TYPE*) ]]
        then
	    echo -e "\nSyntax error: missing TYPE keyword in LOCAL at line $g_COUNTER in file '$g_CURFILE'!"
	    exit 1
        else
	    VAR=$(echo "${1}")
	fi
        # This construction needed for KSH93
	if [[ "${VAR//${g_STRINGSIGN}/}" != "${VAR}" ]]
	then
	    TYPE="char*"
	elif [[ "${VAR//${g_FLOATSIGN}/}" != "${VAR}" ]]
	then
	    TYPE="double"
	else
	    TYPE="long"
	fi
    fi

    # Check if variable was already declared - no record and not function pointer?
    if [[ "$VAR" != +(*.*) && "$VAR" != +(\(*) ]]
    then
        IFS=","







<
<
<
<











|







2479
2480
2481
2482
2483
2484
2485




2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
	VAR=$(echo "${1%% TREE *}")
	TYPE=$(echo "${1##* TREE }")
    else
	if [[ "${1}" = +(* ARRAY *) ]]
	then
	    ARRAY=${1##* ARRAY }
	    VAR=$(echo "${1%% ARRAY *}")




        else
	    VAR=$(echo "${1}")
	fi
        # This construction needed for KSH93
	if [[ "${VAR//${g_STRINGSIGN}/}" != "${VAR}" ]]
	then
	    TYPE="char*"
	elif [[ "${VAR//${g_FLOATSIGN}/}" != "${VAR}" ]]
	then
	    TYPE="double"
	else
	    TYPE="${g_VARTYPE}"
	fi
    fi

    # Check if variable was already declared - no record and not function pointer?
    if [[ "$VAR" != +(*.*) && "$VAR" != +(\(*) ]]
    then
        IFS=","

Changes to bacon_trunk/doc-pak/CHANGES.

1
2
3
4
5
6

7
8
9
10
11
12
13
+-------------------------------+
| 4.6.1 beta
+-------------------------------+
- Fix: check on duplicate SUB or FUNCTION names (all versions - kudos rikky)
- Fix: memory leak in handling local string arrays (BaCon version)
- Fix: regression and improvement in RUN statement (BaCon resp. Shell version)


November 1, 2022 - 4.6 stable
- New: INVERT function to invert keys/values in associative arrays (all versions)
- New: WHERE function to determine character position in string based on token index (all versions)
- Imp: SORT now also can sort associative arrays (all versions)
- Imp: extended INDEX with INDEX$ for associative arrays (all versions)
- Imp: replaced 'which' for 'command -v' in shell searching (all versions)






>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-------------------------------+
| 4.6.1 beta
+-------------------------------+
- Fix: check on duplicate SUB or FUNCTION names (all versions - kudos rikky)
- Fix: memory leak in handling local string arrays (BaCon version)
- Fix: regression and improvement in RUN statement (BaCon resp. Shell version)
- Fix: type check in DECLARE/GLOBAL/LOCAL too strict (all versions - kudos rikky)

November 1, 2022 - 4.6 stable
- New: INVERT function to invert keys/values in associative arrays (all versions)
- New: WHERE function to determine character position in string based on token index (all versions)
- Imp: SORT now also can sort associative arrays (all versions)
- Imp: extended INDEX with INDEX$ for associative arrays (all versions)
- Imp: replaced 'which' for 'command -v' in shell searching (all versions)